找回密码
 注册
关于网站域名变更的通知
查看: 246|回复: 1
打印 上一主题 下一主题

分享三阶8位的FIR滤波设计

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-27 14:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享三阶8位的FIR滤波设计

/ d' i) i$ u. x6 A5 s  ]2 n& n1 I3 A, X6 k, P* I- i9 T
FIR滤波系数具有对称性,利用MATLAB 设计工具,求得三阶8位FIR滤波系数; l. a/ p& P1 y( I5 ]
h(0)~h(4)={-1,3.75,3.75,-1} / h3 y2 b- X% L# h
' m0 a  x" V9 J% s" O/ Y
---------------三阶8位的FIR 直接型滤波器VHDL 源程序 ---------------------------------" O" t1 G/ y1 F) _4 e

2 m2 {6 m2 f; A6 e定义自定库:8 Y" Y* Z8 J2 E6 z9 Q2 N
  package eight_bit_int is
5 V6 L% k4 M/ n  subtype fbyte is integer range -128 to 127 ;$ v1 O# o$ Y" A1 M7 X$ M
  type array_byte is array(0 to 3) of fbyte;* L0 k. I- l4 Q$ O3 X7 `8 R
end eight_bit_int;
2 Q8 E" D1 T: r9 I+ ]5 M-------上面程序开始定义的私有库------------------------------------& Z. {3 }9 `7 T5 h0 }" e3 Z
-----标准库调用声明----------------------------------------------" {, T+ v- q6 s6 _. Q7 ^( `
library work;8 a. g' n' s9 M% ?$ S3 d& l5 n$ g
use ieee.std_logic_1164.all;2 h5 O! Z; y, N# k8 k- P6 o
use_ieee.std_logic_arith.all;
6 W# C* T1 O& R! C! p. fentity fiRFilter is, e! Y- @1 Z5 q
  port1 |; y' u0 i# L8 h& l- G4 D. |
    (# y& y3 C6 A; S7 b
     clk: in std_logic;
* ?7 P- S' E; C     x: in fbyte;2 W! p$ H1 P" Z/ F
     y: out fbyte
% `6 B- M/ X& G$ g$ e+ ~, {! z1 l);
& \% N7 z$ t1 ^6 }+ Nend firfilter;: T9 L9 g9 `0 o3 b1 b; y6 `! D9 c4 e
arichitecture fir of firfilter is
7 @0 a6 a5 Q" z; y, e$ e& Usignal t: array_byte;+ o  }& t0 D& @+ a
begin
7 Y5 _7 ?1 ^5 s! H+ `p1: process8 j1 L* z/ }9 i7 o$ ]
   begin) _/ ?, E. P7 Y
      wait unitl  clk='1';  ------上升沿检测) T0 ^  d( i, ]( Y6 s3 ^3 ~" A( I
------滤波器表达式
4 N. o4 `7 l% P6 g   y<=2*t(1)+t(1)+t(1)/2+t(1)/4+2*t(2)+t(2)+t(2)/2+t(2)/4-t(3)-t(0);3 a3 [8 I1 h  g* U4 G5 G
------输入数据移动,每个时钟移动一次------------------------& i# \- H) ?8 W0 c. N
for i in 3 downto 1 loop# ^6 N" v, d6 @
   t(i)<=t(i-1);; Q, G" E% k7 r' g9 x/ b5 c
end loop;
4 a* a+ _  y* I( r* b: v# l5 p   t(0)<=x;
! A. ~5 i4 Q9 i! {+ q# H. z4 |$ y. a1 Rend process;* d- S. `. z- T
end fir;1 I) D6 \6 X8 ?+ y* \# Q- Z5 ~1 |
上面的程序是标准的FIR 数字滤波器直接型,VHDL程序表达。这种设计对应对称和非对称滤波器设计都很适用。. n* f4 s2 C( ~( B! A- E: o
9 f: G% k7 x% L1 ?% w: w
上面的程序有几处可以改进:
" h! Z8 ?8 G1 D, P8 h   1. 最优的CSD码实现每个滤波器的系数,即3.75=2^2-2^-2;
& q+ k2 _1 S' v' U1 r* A   2. 通过流水线来提高有效的乘法器的速度。输出加法器可以放在流水线平衡树中,如果系数被编码成2的幂的形式,流水线乘法器和加法器就可以合并。
( n$ N3 d+ g8 {. o   3. 利用对称系数,乘法复杂度,线性相位。* i5 L$ q/ C0 ~
根据上面三点改进最快的设计如下:. \) _! @8 ]- W  v
   wait until clk='1';
3 ]4 ]- u1 M4 G2 w# U+ {     t1<=t(1)+t(2);    -------加法合并
( T+ q9 Q  |! W( t- Z& k7 ?     t2<=t(0)+t(3);9 k8 U0 k! C7 B+ g
-------第一级流水线处理-----------------
1 S$ A' K1 T' ~4 @" w6 W     t3<=4*t1-t1/4;   --------组合成2的幂相乘
" @4 C8 o8 e$ U1 Q; \! p  M     t4<=-t2;
3 U1 x  e! }) r% h9 K-------第二级流水线处理----------------------* @& }$ |. ?, t/ ^/ s
     y<=t3+t4;
" B9 d) V) ^3 W/ s  W; {-------第三级流水线处理,得到结果------------  " C6 U- l' ~9 u/ ]# _
: A1 K3 M; H! _/ d+ }  A
6 E( i7 ]! r5 \( Z5 Q: i+ _
与开始程序相比,增加4个中间变量寄存器,处理速度大为提高! 这招叫做资源换速度!! B! d  Y2 q0 @  `6 w+ A
7 Z5 U' M% e7 ]6 o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 20:36 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表