版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、沈阳航空航天大学综合课程设计一、概述在通信与信息技术领域,数字信号处理显得越来越重要了,数字滤波器在数字信号处理中起到重要作用并能够获得广泛应用。数字滤波器根据频域特性可以分为低通、高通、带通和带阻四种基本类型,根据时域特性可以分为无限脉冲响应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所示。RRRR输入数据 乘累加器 滤波输出图3 串行滤波器结构4.经过多种方案的比较,本设计最终决定采用串行结构来实现FIR滤波器。方案是利用MATLAB提供的FDAtool设计所需要的FIR数字滤波器,并确定需要的滤波系数,最终实现FPGA的设计。三、电路设计1.利
6、用FDAtool设计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.27
8、23 -25.1068 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位
9、+左移3位+原数93.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”。当cl
10、ear为“0”时,加入时钟信号,当遇到时钟信号的上升沿,则将输入的数据从输出端输出。生成的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; ARCHIT
11、ECTURE a OF suoc8 IS BEGIN PROCESS(clk,clear) BEGIN IF clear='1' THEN Dout<="00000000" ELSE IF(clk'EVENT AND clk='1') THEN Dout <= Din; END IF; END IF; END PROCESS; END a;b. 第一级加法器数据通过add889,就是8位数字输入,9位数字输出加法器,完成第一级相加运算。因为本题是15阶FIR数字滤波器,它的滤波系数有对称的关系,所以采用第一级加法器,达到简
12、化运算的效果。当遇到一次时钟信号的上升沿,完成一次加法运算。add889加法器如图10所示。图10 加法器add889模块加法器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 s
13、1: signed(8 downto 0);SIGNAL s2: signed(8 downto 0);BEGIN s1<=(Din1(7)&Din1); s2<=(Din2(7)&Din2);PROCESS(Din1,Din2,clk)BEGINif clk'event and clk='1' thenDout<=s1+s2;end if;end process;end a;c. 乘法器乘法器用来将数据乘以由matlab计算得到的滤波系数,各系数的结果是通过移位运算得到,节约了硬件乘法器资源。在上面说到,乘法器是通过移位实现的,以系数
14、-19.1269为例,则是左移4位+左移1位+原数+右移2位。当遇到一次时钟信号的上升沿,完成一次乘法运算。生成的乘法器模块如图11所示。图11 乘法器mult19模块乘法器mult19对应的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;ARCHITECTU
15、RE a OF mult19 ISSIGNAL s1 : SIGNED (15 DOWNTO 0);SIGNAL s2 : SIGNED (15 DOWNTO 0);BEGINP1: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&quo
16、t;&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)BEGINif clk'event and clk='1' thenDo
17、ut<=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.ALL;USE IEEE.STD_LOGIC_arith
18、.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(Din1,Din2,c
19、lk)BEGINif clk'event 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
20、 downto 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 clk'event and clk='1' thenDout<=s1-Din1;end if;end process;end
21、 a;所需的寄存器、乘法器、加法器和减法器通过编程,生成之后根据顶层原理图进行连接,加入输入端和输出端,即可构成所需要的FIR数字滤波器。3. 各模块之间的关系由于本设计采用的是串行的滤波器设计,其中使用的15个寄存器依次相连,前一级寄存器的输出端接入下一级寄存器的输入端,起到逐级延时的作用。根据滤波器系数的对称性,第0级系数与第15级系数相等,第1级与第14级系数相等,以此类推,第N级与第15-N级系数相等,因此可先进行加法运算,即第N级与第15-N级相加。第N级与第15-N级相加之后与得到的第N个乘法系数相乘,一共得到8组无符号相乘的结果。得到的数据再以此相加,乘法系数带负号的数值经过减法
22、器,作为减数,从而达到加法的效果,逐级相加之后输出。四、性能的测试为了验证设计的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,则
23、可得到40个抽样值,由于x(n)为浮点数,本设计将x(n)扩大2倍,得到x(n),然后再取整,所得到的数值如表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.94291
24、625.4025263.053366.577-1.74-217-8.7-927-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,将采样值作为输入信号,并将输入信
25、号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同样用MAYLAB生成相应杆状图,其杆状图如图15所示。图15 滤波前的输入信号杆状图由生成的原理图在Quartus II上编译后, 将输入信号数据从输入端(Din)输入,创建时域仿真波形,加入时钟信号clk,并将clear置低电平,可以得到滤波后的数据如图16(a)和16(b)所示。图16(a) 仿真后的时域波形
26、图16(b) 仿真后的时域波形由上图中的输出可得到输出的数据: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,
27、2,-22,-162,190,将仿真后得到的数据在MATLAB中生成相应的杆状图,指令如下: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,
28、-1530,-1485,-596,-50,396,2,-22,-162,190; 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,
29、0, -32,1,-30, 3,-27,7,-23,11,-19,h(n)=-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,
30、-25.1,-45,3,29,5.6,-19;y=round(conv(h,Din)/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 -4035 -3663 -3686 -3107 -2585 -1748 -1697 -1538 -1482Columns 49 through 55 -597 -46 387 0 -26 -158 181经过比较,由Din和h进行卷积得到的结果,和Din经过滤波器得到的Dout数值基本一致,由此
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢结构设计方案
- 房屋建设产业园厂房毕业设计
- 电缆沟开挖及电缆敷设技术交底
- 2026年襄樊市樊城区工会人员招聘笔试参考试题及答案详解
- 2026四川广安市实验中学教师招聘考试模拟试题及答案详解
- 2026贵州兴黔人才发展集团有限公司派遣员工招聘1人笔试备考试题及答案详解
- 产业园研发办公楼建筑结构毕业设计
- 2026年城市低空经济无人机物流手册
- 2026年辽宁省丹东市工会人员招聘笔试参考试题及答案详解
- 2026年中医确有专长考试题及答案
- (2026版)《医疗器械定期安全更新报告撰写指南(试行)》培训课件
- 中药外敷:缓解疼痛的护理方法
- 2026年教师资格证《语文学科知识与教学能力》初中试题及一套参考答案详解
- 领导联系单位工作制度
- JJF 1221-2025 汽车排气污染物检测用底盘测功机校准规范
- 肝炎病毒筛查与管理原则
- 3.3 沥青路面封层、功能性罩面及结构性补强
- BRCGS Food Safety Issue 9 全球食品安全标准培训课件
- 心室扑动和心室颤动课件
- (全套表格可用)SL631-2025年水利水电工程单元工程施工质量检验表与验收表
- 2025-2026学年福建省厦门一中八年级(上)期中数学试卷
评论
0/150
提交评论