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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

% b$ x* T- x# m; p0 f
3 l2 e$ U6 W) L% b1 `' _FIR滤波系数具有对称性,利用MATLAB 设计工具,求得三阶8位FIR滤波系数
; I6 T+ A" `; K- n2 Dh(0)~h(4)={-1,3.75,3.75,-1}
+ p; p/ y$ \- E1 J& n+ Q; B6 S& w0 K1 H
---------------三阶8位的FIR 直接型滤波器VHDL 源程序 ---------------------------------$ j" c- J2 R0 I9 M9 H! C+ I

6 t9 H* M  ]8 o0 I" o. F; L定义自定库:
6 p8 e6 |' Y8 q* b: }% R. i  package eight_bit_int is1 Z" F. L% S, s2 o' y6 z
  subtype fbyte is integer range -128 to 127 ;
/ x9 u# A$ W3 N  x% |2 `" c  type array_byte is array(0 to 3) of fbyte;
8 ^! Y8 ]8 x5 X% ~  N" L8 z  uend eight_bit_int;% O5 c6 `, l) n9 G0 H9 Q3 n
-------上面程序开始定义的私有库------------------------------------
2 o  V7 h) S) j+ S-----标准库调用声明----------------------------------------------# K1 B* N' B# }! [$ K; o' a4 I; @
library work;
3 R( i( m; n. i4 {- luse ieee.std_logic_1164.all;# |6 E; @, Y' ~' _
use_ieee.std_logic_arith.all;
' Y! y# ^+ Z: Z% e! f4 I: s5 H4 Kentity fiRFilter is; S& Q3 ^; h- T, k# N8 x" l
  port
) N6 Q% r" @  c0 K    (, J  i! R, C! }2 S9 E# t% ~5 [
     clk: in std_logic;! C5 P: S" y- f2 A
     x: in fbyte;: R% z  `6 ?; G) l* \5 M
     y: out fbyte" z. |" J' K1 f
);7 Z  X4 n# u9 w( n. u" o$ U
end firfilter;
* ~0 ^( b& P0 G! n5 o7 l3 T2 Y, darichitecture fir of firfilter is6 _! R. [2 d+ I
signal t: array_byte;- `& n: |/ e9 `4 A5 u3 ]) ^/ a
begin
5 f2 @, i& w; q) ?6 \p1: process
2 u/ F( n/ o& m( v7 w   begin
# Q8 D8 s$ Q8 E2 @' a      wait unitl  clk='1';  ------上升沿检测
3 S, \( K5 {  ^+ t( n4 G0 ^) _------滤波器表达式; o8 U: q4 g3 S- z" F4 e
   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);
" F, ^) o. g" r) D! E------输入数据移动,每个时钟移动一次------------------------$ |$ t2 x0 C5 ^
for i in 3 downto 1 loop) c! T$ l4 _& {1 p, \
   t(i)<=t(i-1);" |; m1 h, s3 o4 _! G  Z
end loop;$ ]/ l  ^: G* i0 q! P* V6 g3 B( ~
   t(0)<=x;- S# {+ u) o* q# f9 y) A' W( \! v
end process;
1 T7 u: j6 s' @' Jend fir;5 _# Z' B- [% A, M2 n8 C7 n9 A
上面的程序是标准的FIR 数字滤波器直接型,VHDL程序表达。这种设计对应对称和非对称滤波器设计都很适用。
' U; `$ G# c2 u# x, W5 `1 a- V" z- ?: r2 J+ @9 t
上面的程序有几处可以改进:. c7 w2 X- N$ S$ ?" P7 ]; {: Z
   1. 最优的CSD码实现每个滤波器的系数,即3.75=2^2-2^-2;
- C, D1 M3 v$ C, [   2. 通过流水线来提高有效的乘法器的速度。输出加法器可以放在流水线平衡树中,如果系数被编码成2的幂的形式,流水线乘法器和加法器就可以合并。
7 E  K$ m( u$ ?3 [4 q   3. 利用对称系数,乘法复杂度,线性相位。
. D( g" }; F2 L# k根据上面三点改进最快的设计如下:$ c* g4 |- A* I$ `  I& r" l% J
   wait until clk='1';
* s. e1 E. A- [     t1<=t(1)+t(2);    -------加法合并7 a- x* o2 p* K8 u/ }
     t2<=t(0)+t(3);
2 X! n- n5 u7 Y: e-------第一级流水线处理-----------------
7 A7 W+ ~/ S% c2 W' \     t3<=4*t1-t1/4;   --------组合成2的幂相乘/ ?, N& }  u; {) |$ k
     t4<=-t2;
* l, |- o/ M. p& K* V; {-------第二级流水线处理----------------------. @/ J4 l$ z4 u. }6 c
     y<=t3+t4;! Q  J! @9 m% A" }* K
-------第三级流水线处理,得到结果------------  
7 o7 D# y; r$ `
' \# _7 b& `# g" v' V: i9 z! R. W5 L* @* v& I' l3 q4 o- C
与开始程序相比,增加4个中间变量寄存器,处理速度大为提高! 这招叫做资源换速度!
- l) G2 [/ i. A3 q/ V& d. N, b
, O4 i9 [6 x( a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-12 05:00 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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