ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:286.75KB ,
资源ID:9930515      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9930515.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于FPGA的FIR滤波器设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于FPGA的FIR滤波器设计.docx

1、基于FPGA的FIR滤波器设计一、概述在通信与信息技术领域,数字信号处理显得越来越重要了,数字滤波器在数字信号处理中起到重要作用并能够获得广泛应用。数字滤波器根据频域特性可以分为低通、高通、带通和带阻四种基本类型,根据时域特性可以分为无限脉冲响应IIR(Infinte Impulse Response)和有限脉冲响应FIR(Finite Impulse Response)。FIR滤波器具有良好的线性相位特性,因此在数据通信、图像处理方面有广泛的应用。FPGA(Field Programmable Gate Array),即现场可编程门阵列,由于具有用户可编程性,能够实现用户规定的各种用途,因此

2、又被称为可编程专用集成电路,在电子系统的设计中得到广泛的应用。利用FPGA实现FIR数字滤波器的设计,是本次课程设计需要解决的问题,利用学过的知识实现FIR数字滤波器是本次课程设计的主要内容。二、方案论证1.FIR数字滤波器是一种线性时不变系统(LTI),如果FIR数字滤波器的单位脉冲响应h(n)的长度为N,其传递函数和差分方程分别为:H(z) = y(n) = x(n)*h(n) =其中,x(n)和y(n)分别为输入和输出序列。如果FIR数字滤波器的单位脉冲响应h(n)是实数序列,而且满足偶对称或者奇对称条件,即h(n) = h(N-1-n)或者 h(n) = -h(N-1-n)则滤波器具有

3、严格的线性相位特点。正是因为这种特点,在滤波器的设计过程中,可使乘法器的数量减半。对于n阶滤波器,当n是偶数时,乘法器的个数为n/2个,当n为奇数时,乘法器的个数为(n+1)/2个。由传递函数和差分方程可以直接画出FIR滤波器的直接型结构如图1所示。x(n) z z z z h(0) h(1) h(2) h(N-3) h(N-2) h(N-1) y(n) 图1 FIR滤波器的直接型结构 2.FIR滤波器的实现方法有多种,通常有串行算法、半并行算法和并行算法,在串行算法中,常见的有单乘法器MAC FIR滤波器和对称MAC FIR滤波器。单乘法器MAC FIR滤波器是最简单的DSP滤波器结构之一,

4、在采样速度比较慢、系数比较多的时候,需要用高速时钟来驱动乘法器,硬件数量比较少也使得滤波器的吞吐量下降了。而对于对称MAC FIR滤波器,基于逻辑结构的加法器将数据相加,在单乘法器滤波器的基础上,限制了最高时钟速度,需要额外的资源支持对称。由于数据是在一个端口上正向读出和在另一端口反向读出,因此在控制部分提高了一定的资源消耗。在并行算法中,常见的有转置型FIR滤波器、脉冲型FIR滤波器等,二者都使用加法器链,但在课程设计中不易实现。3.根据滤波器的实现表达式,滤波器的实质是做一个乘累加运算,乘累加运算的次数由滤波器的阶数来决定,其串行结构如图2所示。输入数据 滤波输出图2 滤波器串行实现结构图

5、利用串行结构来实现FIR滤波器所使用的资源较少,只需要一些寄存器、一些乘累加器就可以完成滤波运算,一次滤波需要的时钟数由滤波器的结束来决定。但对于课程设计的要求,阶数比较低时采用这种方法相对比较方便。根据FIR滤波器的系数对称性,可以先进行加法运算,然后把加法结果再进行串行的乘累加运算。这种串行滤波器的结构如图3所示。RRR乘累加器R输入数据 滤波输出图3 串行滤波器结构4.经过多种方案的比较,本设计最终决定采用串行结构来实现FIR滤波器。方案是利用MATLAB提供的FDAtool设计所需要的FIR数字滤波器,并确定需要的滤波系数,最终实现FPGA的设计。三、电路设计1.利用FDAtool设计

6、FIR数字滤波器。采用MATALAB中附带的FDAtool工具,输入所需滤波器的参数,即可得到需要的滤波器。各参数如下:阶数:15 低通滤波(Lowpass) Bate = 0.5 Fs = 48kHz Fc = 10.8kHz参数的设置如图4所示。图4 设置FIR滤波器参数按照要求的参数,将参数输入FDAtool中,可以自动生成所需要的滤波器,并可以观察到设计的滤波器的幅频响应、相频响应以及得到的滤波器系数。得到的FIR滤波器的幅频响应如图5所示。图5 FIR滤波器的幅频响应幅频特性是描绘输入信号幅度固定,输出信号的幅度随频率变化而变化的规律,从设计的FIR滤波器的幅频响应可以看出,在频率为

7、0至10kHz内表现为通带,10kHz以后表现为阻带,通带与阻带之间幅频响应产生突变,表现为低通滤波。得到的FIR低通滤波器的相频响应如图6所示。图6 FIR滤波器的相频响应FIR滤波器的相频响应,是指信号通过系统之后的输出信号的相位与它输入时的信号的相位值之差。从滤波器的相频响应的特点,也可以看出其明显的低通特性。由设计的滤波器可以得到相应的滤波系数如图7所示。 图7 滤波器系数将得到的滤波器系数导出,并利用MATLAB进行整理: Num*(29)ans= Columns 1 through 14 -19.1269 5.6636 28.9631 2.8166 -45.2723 -25.106

8、8 93.6359 214.4269 214.4269 93.6359 -25.1068 -45.2723 2.8166 28.9631Columns 15 through 165.6636 -19.1269 通过上面的滤波系数可以观察到很严格的对称性。各系数在FPGA中的不带负号的具体二进制移位实现如下:-19.1269:左移4位+左移1位+原数+右移2位5.6636: 左移2位+原数+右移1位+右移2位28.9631: 左移4位+左移3位+左移2位+原数2.8166: 左移1位+原数-45.2723:左移5位+左移3位+左移2位+原数+右移2位-25.1068:左移4位+左移3位+原数93

9、.6359: 左移6位+左移4位+左移3位+左移2位+原数+右移1位214.4264:左移7位+左移6位+左移4位+左移2位+左移1位+右移1位2. FIR数字滤波器的FPGA的实现工程设计所用的模块有:顶层原理图文件,底层寄存器、加法器、减法器、乘法器的VHDL文件。 顶层的原理图如图8所示。图8 顶层原理图各模块的详细说明:a. 寄存器在原理图中标号为suoc8,输入的8位数据依次通过suoc8,达到各级的延时作用。寄存器输入端有时钟信号、清零端、8位的输入端,输出也为8位。当清零端clear为“1”时,无论输入端输入怎样的数值,输出端均输出“00000000”。当clear为“0”时,加

10、入时钟信号,当遇到时钟信号的上升沿,则将输入的数据从输出端输出。生成的suoc8寄存器模块如图9所示。 图9 寄存器suoc8模块寄存器suoc8的相应的VHDL程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY suoc8 IS PORT( clk : IN STD_LOGIC; clear : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(7 DOWNTO 0); Dout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END suoc8; ARCHITECTURE a O

11、F suoc8 IS BEGIN PROCESS(clk,clear) BEGIN IF clear=1 THEN Dout=00000000; ELSE IF(clkEVENT AND clk=1) THEN Dout = Din; END IF; END IF; END PROCESS; END a;b. 第一级加法器数据通过add889,就是8位数字输入,9位数字输出加法器,完成第一级相加运算。因为本题是15阶FIR数字滤波器,它的滤波系数有对称的关系,所以采用第一级加法器,达到简化运算的效果。当遇到一次时钟信号的上升沿,完成一次加法运算。add889加法器如图10所示。图10 加法器a

12、dd889模块加法器add889的VHDL程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;ENTITY add889 isPORT(clk : in STD_LOGIC; Din1,Din2 :in signed (7 downto 0); Dout:out signed(8 downto 0);END add889;ARCHITECTURE a of add889 isSIGNAL s1: signed(8 downto 0);SIGNAL s2: signed(8 downto 0);BE

13、GIN s1=(Din1(7)&Din1); s2=(Din2(7)&Din2);PROCESS(Din1,Din2,clk)BEGINif clkevent and clk=1 thenDout=s1+s2;end if;end process;end a;c. 乘法器乘法器用来将数据乘以由matlab计算得到的滤波系数,各系数的结果是通过移位运算得到,节约了硬件乘法器资源。在上面说到,乘法器是通过移位实现的,以系数-19.1269为例,则是左移4位+左移1位+原数+右移2位。当遇到一次时钟信号的上升沿,完成一次乘法运算。生成的乘法器模块如图11所示。图11 乘法器mult19模块乘法器mu

14、lt19对应的VHDL程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;ENTITY mult19 isPORT( clk : IN STD_LOGIC; Din : IN SIGNED (8 DOWNTO 0); Dout : OUT SIGNED (15 DOWNTO 0);END mult19;ARCHITECTURE a OF mult19 ISSIGNAL s1 : SIGNED (15 DOWNTO 0);SIGNAL s2 : SIGNED (15 DOWNTO 0);BEGINP

15、1:process(Din)BEGINs1(15 DOWNTO 7)=Din;s1( 6 DOWNTO 0)=0000000;if Din(8)=0 then s2=(000&s1(15 DOWNTO 3)+(000000&s1(15 DOWNTO 6)+(0000000&Din)+(000000000&Din(8 DOWNTO 2);else s2=(111&s1(15 DOWNTO 3)+(111111&s1(15 DOWNTO 6)+(1111111&Din)+(111111111&Din(8 DOWNTO 2);end if;end process;P2: PROCESS(clk)BE

16、GINif clkevent and clk=1 thenDout=s2;end if;END PROCESS;END a;d. 第二级加法器和减法器通过8个乘法器无符号相乘后的数据被传递给第二级加法器进行加法运算,如果乘法系数是负数,则在第二级经过减法器来保证运算的正确性。当遇到一次时钟信号的上升沿,完成一次加法或减法运算。以加法器add161617和减法器sub161416为例,由Quarttus II生成的加法器模块如图12所示。图12 add161617加法器模块加法器Add161617对应的VHDL程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.A

17、LL;USE IEEE.STD_LOGIC_arith.ALL;ENTITY add161617 isPORT(clk : in STD_LOGIC; Din1,Din2 :in signed (15 downto 0); Dout:out signed(16 downto 0);END add161617;ARCHITECTURE a of add161617 isSIGNAL s1: signed(16 downto 0);SIGNAL s2: signed(16 downto 0);BEGIN s1=(Din1(15)&Din1); s2=(Din2(15)&Din2);PROCESS(

18、Din1,Din2,clk)BEGINif clkevent and clk=1 thenDout=s1+s2;end if;end process;end a;由Quarttus II生成的减法器sub161416模块如图13所示。图13 减法器sub161416模块减法器sub161416对应的VHDL程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;ENTITY sub161416 isPORT(clk : in STD_LOGIC; Din1 :in signed (15 downto

19、0); Din2 :in signed (13 downto 0); Dout:out signed(15 downto 0);END sub161416;ARCHITECTURE a of sub161416 isSIGNAL s1: signed(15 downto 0);BEGIN s1=(Din2(13)&Din2(13)&Din2);PROCESS(Din1,Din2,clk)BEGINif clkevent and clk=1 thenDout=s1-Din1;end if;end process;end a;所需的寄存器、乘法器、加法器和减法器通过编程,生成之后根据顶层原理图进行

20、连接,加入输入端和输出端,即可构成所需要的FIR数字滤波器。3. 各模块之间的关系由于本设计采用的是串行的滤波器设计,其中使用的15个寄存器依次相连,前一级寄存器的输出端接入下一级寄存器的输入端,起到逐级延时的作用。根据滤波器系数的对称性,第0级系数与第15级系数相等,第1级与第14级系数相等,以此类推,第N级与第15-N级系数相等,因此可先进行加法运算,即第N级与第15-N级相加。第N级与第15-N级相加之后与得到的第N个乘法系数相乘,一共得到8组无符号相乘的结果。得到的数据再以此相加,乘法系数带负号的数值经过减法器,作为减数,从而达到加法的效果,逐级相加之后输出。四、性能的测试为了验证设计

21、的FIR数字滤波器的性能,并验证设计的FIR数字低通滤波器的正确性,本设计加入了x(t)=sin(500*pi*t)+cos(10000*pi*t)的输入信号,其中的原信号为x(t)=sin(500*pi*t),x(t)=cos(10000*pi*t)为叠加在原信号上的噪声信号。用MATLAB仿真原信号x(t)=sin(500*pi*t),可以观察到其为正弦波如图14所示。图14 未加噪声信号之前的正弦信号设抽样频率为10000,则抽样后x(n)=sin(0.05*pi*n)+cos(pi*n),取n=0,139,则可得到40个抽样值,由于x(n)为浮点数,本设计将x(n)扩大2倍,得到x(n

22、),然后再取整,所得到的数值如表1所示表1 输入序列的处理n取整n取整n取整n取整016.00161032.00322016.001630001-13.49-1311-0.19021-18.50-1931-31.80-32220.94211231.21312211.0511320.7813-8.73-913-1.74-223-23.26-2333-30.25-30425.40251428.9429246.597343.0535-4.68-415-4.6-525-27.31-2735-27.31-27628.94291625.4025263.053366.577-1.74-217-8.7-927

23、-30.25-3037-23.26-23831.21311820.9421280.7813811.05119-0.19019-13.49-1329-31.80-3239-18.50-19由表1可得,采样值为Din=16,-13,21 ,-9, 25,-4,29, -2, 31,0,32, 0, 31, -2,29, -5,25, -9, 21,-13,16,-19, 11,-23,7,-27,3,-30, 1, -32,0, -32,1,-30, 3,-27,7,-23,11,-19,将采样值作为输入信号,并将输入信号Din=16,-13,21 ,-9, 25,-4,29, -2, 31,0,

24、32, 0, 31, -2,29, -5,25, -9, 21,-13,16,-19, 11,-23,7,-27,3,-30, 1, -32,0, -32,1,-30, 3,-27,7,-23,11,-19同样用MAYLAB生成相应杆状图,其杆状图如图15所示。图15 滤波前的输入信号杆状图由生成的原理图在Quartus II上编译后, 将输入信号数据从输入端(Din)输入,创建时域仿真波形,加入时钟信号clk,并将clear置低电平,可以得到滤波后的数据如图16(a)和16(b)所示。图16(a) 仿真后的时域波形图16(b) 仿真后的时域波形由上图中的输出可得到输出的数据:Dout=-15

25、2,171,-5,-21,-340,102,500,1128,965,1064,1180,2130,2732,3370,3378,3798,4010,4168,4173,4033,3782,3515,3108,2600,2082,1588,1030,372,-350,-1040,-1588,-2085,-2610,-3102,-3515,-3810,-4033,-4162,-4161,-4028,-3660,-3683,-3100,-2585,-1743,-1690,-1530,-1485,-596,-50,396,2,-22,-162,190,将仿真后得到的数据在MATLAB中生成相应的杆状

26、图,指令如下:t=0:1:54; Dout=-152,171,-5,-21,-340,102,500,1128,965,1064,1180,2130,2732,3370,3378,3798,4010,4168,4173,4033,3782,3515,3108,2600,2082,1588,1030,372,-350,-1040,-1588,-2085,-2610,-3102,-3515,-3810,-4033,-4162,-4161,-4028,-3660,-3683,-3100,-2585,-1743,-1690,-1530,-1485,-596,-50,396,2,-22,-162,190

27、; stem(t,Dout);生成的杆状图如图17所示。图17 通过滤波器后得到的输出图形通过图17和图15比较可知,在滤波前为叠加信号,滤波之后基本接近于正弦信号,基本接近于未加叠加信号时的波形图14,说明设计的FIR滤波器具有较好的滤波效果。为验证滤波器的正确性,下面用MATLAB计算其卷积关系,由Din=16,-13,21 ,-9, 25,-4,29, -2, 31,0,32, 0, 31, -2,29, -5,25, -9, 21,-13,16,-19, 11,-23,7,-27,3,-30, 1, -32,0, -32,1,-30, 3,-27,7,-23,11,-19,h(n)=-

28、19,5.6,29,3,-45,-25.1,93.6,214.5,214.5,93.6,-25.1,-45,3,29,5.6,-19指令如下:Din=16,-13,21 ,-9, 25,-4,29, -2, 31,0,32, 0, 31, -2,29, -5,25, -9, 21,-13,16,-19, 11,-23,7,-27,3,-30, 1, -32,0, -32,1,-30, 3,-27,7,-23,11,-19; h=-19,5.6,29,3,-45,-25.1,93.6,214.5,214.5,93.6,-25.1,-45,3,29,5.6,-19;y=round(conv(h,D

29、in)/2);得到的计算结果如下:y = Columns 1 through 12 -152 168 -4 -20 -338 101 502 1126 969 1063 1188 2132Columns 13 through 242738 3375 3384 3802 4013 4170 4183 4038 3805 3518 3110 2605Columns 25 through 362085 1587 1040 371 -371 -1040 -1587 -2085 -2605 -3110 -3518 -3815Columns 37 through 48-4035 -4168 -4168 -

30、4035 -3663 -3686 -3107 -2585 -1748 -1697 -1538 -1482Columns 49 through 55 -597 -46 387 0 -26 -158 181经过比较,由Din和h进行卷积得到的结果,和Din经过滤波器得到的Dout数值基本一致,由此可证明FIR低通滤波器的正确性。五、结论这次课程设计首先利用MATLAB中的FDAtool工具设计了需要的15阶FIR数字低通滤波器,并得到了对应的滤波系数,根据滤波系数设计出了滤波器中的乘法器,利用VHDL语言的编程,设计了滤波器中所需要的各个寄存器、加法器、减法器和乘法器等模块,最终形成了原理图,为了验证滤波器

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1