位阶线性FIR滤波器EDA课程设计_第1页
位阶线性FIR滤波器EDA课程设计_第2页
位阶线性FIR滤波器EDA课程设计_第3页
位阶线性FIR滤波器EDA课程设计_第4页
位阶线性FIR滤波器EDA课程设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计EDA技术与VHDL课程设计报告班级:电信10-2班姓名:杨建臻学号: 1006110223 指导教师:刘维成绩:电子与信息工程学院信息与通信工程系目录1 引言31.1课程设计背景31.2课程设计目的41.3基本要求42 实验仿真42.1 线性FIR滤波器原理42.2设计方案:62.3模块电路设计112.3.1 寄存器112.3.2 加法器122.3.3 减法器142.3.4 乘法器152.4 顶层文件172.4 FIR滤波器整体电路202.5 FIR滤波器整体电路仿真结果21输出信号理论值21电路仿真结果213.仿真结果心得:22参考文献22摘要在现代电子系统中,FIR滤波器以良好的

2、线性特征被广泛使用,属于数字信号处理的基本模块之一。在工程实践中,往往要求对信号处理要有实时性和灵活性,而已有的一些软件和硬件实现方式则难以同时达到这两方面的要求。所以FPGA器件实现的FIR滤波器就越来越受到大家的广泛认同。本课题在研究了大量国内外技术文献的基础上。首先,认真分析了FIR滤波器的基本结构和设计原理;其次,将硬件描述语言的特点作了归纳,对硬件描述语言的基本结构进行了阐述,并说明了应用VHDL的EDA设计流程。以4阶为例,同时采用乘法器结构和分布式算法实现,并对其性能进行比较;最后,采用自底向上的原则对16阶FIR滤波器各模块进行设计、仿真验证和综合,结果表明:该数字滤波器的工作

3、频率达到预期要求。具体实现中,采用硬件语言VHDL,在QuartusII 9.0环境下实现。关键字:FIR数字滤波器;FPGA; VHDL1 引言1.1课程设计背景有限长单位冲击响应FIR数字滤波器就可以做成是有限长的线性相位,同时又可以具有任意的幅度特性。此外,FIR滤波器的单位冲击响应是有限长的,因为滤波器具有一定的稳定性。再有,只要经过一定的延时,任何非因果有限长序列都能变成有限长序列,因而总能用因果系统来实现。最后,FIR滤波器由于单位冲击响应是有现场的,所以可以用快速傅里叶变换算法来实现过滤信号,从而可以大大提高运算效率。本论文是通过QuartusII软件仿真实现一个8位16阶线性F

4、IR滤波器的设计的。1.2课程设计目的(1)本次课程设计对FIR滤波器设计原理作了简要分析。(2)利用QuartusII软件来仿真FIR滤波器。1.3基本要求(1)8位16阶线性FIR滤波器(2)采样频率,截止频率2 实验仿真2.1 线性FIR滤波器原理FIR滤波器响应(简称FIR)系统的单位脉冲响应为有限长序列,系统函数在有限z平面上不存在极点,其运算结构中不存在反馈支路,即没有环路。如果的长度为N,则它的系统函数和差分方程一般具有如下形式:根据差分方程直接画出FIR滤波器的结构,称为直接型结构。如图2-1-1所示:图2-1 FIR滤波器直接结构FIR滤波器的特点:单位脉冲响应序列为有限个;

5、可快速实现;可得到线性相位;滤波器阶数较高。对线性时不变系统保持线性相位的条件是:单位脉冲响应为偶对称或奇对称。即:为设计线性滤波器,应保证h(n)为对称的。若N为偶数,其线性相位FIR滤波器的对称结构流图如图2-1-2所示:图2-2若N为偶数线性相位FIR滤波器的对称结构流图图中:“ +1 ” 对应偶对称情况,“ -1 ” 对应奇对称情况。当n为奇数时,支路断开。若N为奇数,其线性相位FIR滤波器的对称结构流图如下图2-1-3:图2-3 N为奇数线性相位FIR滤波器的对称结构流图其中y(n)和x(n)分别是输出和输入序列。有限冲激响应滤波器的一种直接型实现,可由式(2)生成,M=5机器转置如

6、图2-1-4所示,图2-1-5是第二个直接型结构。通常一个长度为M的有限冲激响应滤波器由M个系数描述,并且需要M个乘法器和(M-1)个双输入加法器来实现。图2-4 直接型一图2-5 直接型二长度为M的线性相位有限冲激响应滤波器由对称的冲激响应或反对称的冲激响应描述。利用线性相位有限冲激响应滤波器的对称(或反对称)性质,可以将传输函数的直接型实现所需的乘法器总量减少一半。例如,如图2-1-6显示了一个具有对称冲击响应的、长度为7的有限冲激响应传输函数的实现。图2-6 线性相位有限冲激响应结构2.2设计方案:通常采用窗函数设计FIR滤波器方法简单,但是这些滤波器的设计还不是最优的。首先通带和阻带的

7、波动基本上相等,另外对于大部分窗函数来说,通带内或阻带内的波动不是均匀的,通常离开过渡带时会减小。若允许波动在整个通带内均匀分布,就会产生较小的峰值波动。因此考虑通过某种方法,对滤波器的结构进行优化。对于线性相位因果FIR滤波器,它的系列具有中心对称特性,即。令,对于偶对称,代入下面的公式可得:根据要求,要设计一个输入8位,输出8位的16阶线性相位FIR滤波器,此滤波器 Fs为44kHz,Fc为10.4kHz。MATLAB设计计算滤波器系数过程如下:FIR滤波器参数设置,因为是16阶,所以Specify order处填15。图2-7 FIR滤波器的幅频响应图2-8 FIR滤波器的相频响应图2-

8、9 FIR滤波器的冲激响应图2-10 FIR滤波器系数图2-10FIR滤波器的系数进行调整前图2-11 FIR滤波器的系数进行调整后可得FIR滤波器的参数为-10 -2 14 7 -21 -18 44 115 114 44 -18 -21 7 14 -2 -10根据以上所说的该思路,可以将FIR滤波器的原理图设计如图2-2-1:图2-12滤波器原理图2.3模块电路设计设计的FIR滤波器以下四种模块:寄存器、加法器、减法器、乘法器,组成,下面分别对这四种原件进行设计。2.3.1 寄存器寄存器要求实现的功能在正跳沿前接受输入信号,正跳沿时触发翻转,正跳沿后输入即被封锁。寄存器的VHDL语言实现LI

9、BRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff8 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 dff8; ARCHITECTURE a OF dff8 IS BEGIN PROCESS(clk,clear) BEGIN IF clear='1' THEN Dout<="00000000

10、" ELSIF clear='0' THEN IF(clk'EVENT AND clk='1') THEN Dout <= Din; END IF; END IF; END PROCESS; END a;寄存器的模块图与仿真波形图2-13寄存器的模块图图2-14寄存器的仿真波形2.3.2 加法器加法器要求实现的功能实现两个二进制数字的相加运算。当到达时钟上升沿时,将两数输入,运算,输出结果。2.3.2.2 加法器的VHDL语言实现LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_L

11、OGIC_arith.ALL;ENTITY add isPORT(clk : in STD_LOGIC; Din1 :in signed (7 downto 0); Din2 :in signed (15 downto 0); Dout:out signed (15 downto 0);END add121616;ARCHITECTURE a of add isSIGNAL s1: signed(15 downto 0);BEGIN s1<=(Din1(7)&Din1(7)&Din1(7)&Din1(7)&Din1);PROCESS(Din1,Din2,c

12、lk)BEGINif clk'event and clk='1' thenDout<=s1+Din2;end if;end process;end a;2.3.2.3 加法器的模块图与波形仿真图2-15加法器的模块图图2-16加法器的波形仿真2.3.3 减法器减法器要求实现的功能由上面简化电路的需要,当乘法器常系数为负数的,可以取该数的模来作为乘法器的输入,其输出作为一个减法器的输入即可。故减法器要实现两个二进制数相减的运算。当到达时钟上升沿时,将两数输入,运算,输出结果。2.3.3.2 减法器的VHDL语言实现LIBRARY IEEE;USE IEEE.STD_

13、LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;ENTITY sub isPORT(clk : in STD_LOGIC; Din1 :in signed (13 downto 0); Din2 :in signed (15 downto 0); Dout :out signed(15 downto 0);END sub;ARCHITECTURE a of sub isSIGNAL s1: signed(15 downto 0);BEGIN s1<=(Din1(13)&Din1(13)&Din1);PROCESS(Din1,Din2

14、,clk)BEGINif clk'event and clk='1' thenDout<=Din2-s1;end if;end process;end a;2.3.3.3 减法器的模块图与仿真波形图2-17减法器的模块图图2-18减法器的波形仿2.3.4 乘法器2.3.4.1 乘法器要求实现的功能实现输入带符号数据与固定数据两个二进制数的乘法运算。当到达时钟上升沿时,将两数输入,运算,输出结果。2.3.4.2 乘法器的VHDL语言实现LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.

15、all;ENTITY mult isPORT( clk : IN STD_LOGIC; Din : IN SIGNED (8 DOWNTO 0); Dout : OUT SIGNED (12 DOWNTO 0);END mult;ARCHITECTURE a OF mult ISSIGNAL s1 : SIGNED (12 DOWNTO 0);SIGNAL s2 : SIGNED (9 DOWNTO 0);SIGNAL s3 : SIGNED (12 DOWNTO 0);BEGINP1:process(Din)BEGINs1(12 DOWNTO 4)<=Din;s1( 3 DOWNTO

16、0)<="0000"s2(9 DOWNTO 1)<=Din;s2(0)<='0'if Din(8)='0' then s3<=('0'&s1(12 downto 1)+("0000"&s2(9 DOWNTO 1);else s3<=('1'&s1(12 downto 1)+("1111"&s2(9 DOWNTO 1);end if;end process;P2: PROCESS(clk)BEGINif clk&

17、#39;event and clk='1' thenDout<=s3;end if;END PROCESS;END a;2.3.4.3 乘法器的模块图与仿真波形图2-19乘法器的模块图图2-20乘法器的仿真波形2.4 顶层文件-顶层模块的VHDL实现如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;LIBRARY work;ENTITY qaz ISPORT(clk:IN STD_LOGIC; clear: IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR(7 DOWNTO 0); Dout: OUT ST

18、D_LOGIC_VECTOR(7 DOWNTO 0);END qaz;ARCHITECTURE ART OF qaz IS-元件定义-12位有符号数与13位有符号数相加的全加器COMPONENT adder121313 PORT(clk:IN STD_LOGIC; Din1:IN STD_LOGIC_VECTOR(11 DOWNTO 0); Din2:IN STD_LOGIC_VECTOR(12 DOWNTO 0); Dout:OUT STD_LOGIC_VECTOR(12 DOWNTO 0);END COMPONENT;-8位寄存器COMPONENT register8 PORT(clk:I

19、N STD_LOGIC; clear: IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR(7 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;-8位有符号数与9位有符号数相加的全加器COMPONENT adder889 PORT(clk:IN STD_LOGIC; Din1: IN STD_LOGIC_VECTOR(7 DOWNTO 0); Din2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR(8 DOWNTO

20、 0);END COMPONENT;-输入数据乘以12的乘法器COMPONENT mult12 PORT(clk:IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR(8 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR(11 DOWNTO 0);END COMPONENT;-输入数据乘以18的乘法器COMPONENT mult18 PORT(clk:IN STD_LOGIC; Din:IN STD_LOGIC_VECTOR(8 DOWNTO 0); Dout:OUT STD_LOGIC_VECTOR(12 DOWNTO 0);END COMP

21、ONENT;-输入数据乘以13的乘法器COMPONENT mult13 PORT(clk:IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR (8 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR (11 DOWNTO 0);END COMPONENT;-输入数据乘以29的乘法器COMPONENT mult29 PORT(clk:IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR (8 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR (12 DOWNTO 0);END COMPONENT;

22、-输入数据乘以52的乘法器COMPONENT mult52 PORT(clk:IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR (8 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR (13 DOWNTO 0);END COMPONENT;-输入数据乘以14的乘法器COMPONENT mult14 PORT(clk:IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR (8 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR (11 DOWNTO 0);END COMPONENT;-输入数据乘

23、以162的乘法器COMPONENT mult162 PORT(clk:IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR (8 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR (15 DOWNTO 0);END COMPONENT;-8位移位寄存器COMPONENT register89 PORT(clk:IN STD_LOGIC; clear: IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR(7 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR(8 DOWNTO 0);END COM

24、PONENT;-12位有符号数与14位有符号数相加的全加器COMPONENT adder121414 PORT(clk:IN STD_LOGIC; Din1: IN STD_LOGIC_VECTOR(11 DOWNTO 0); Din2: IN STD_LOGIC_VECTOR(13 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR(13 DOWNTO 0);END COMPONENT;-12位有符号数与16位有符号数相加的全加器COMPONENT adder121616 PORT(clk:IN STD_LOGIC; Din1: IN STD_LOGIC_VECTOR

25、(11 DOWNTO 0); Din2: IN STD_LOGIC_VECTOR(15 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END COMPONENT;-14位有符号数与13位有符号数相减的减法器COMPONENT sub131314PORT(clk:IN STD_LOGIC; Din1: IN STD_LOGIC_VECTOR (12 DOWNTO 0); Din2: IN STD_LOGIC_VECTOR (12 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR (13 DOWNTO 0);END

26、COMPONENT;-16位有符号数与14位有符号数相减的减法器COMPONENT sub141616PORT(clk:IN STD_LOGIC; Din1: IN STD_LOGIC_VECTOR (13 DOWNTO 0); Din2: IN STD_LOGIC_VECTOR (15 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR (15 DOWNTO 0);END COMPONENT;-14位有符号数与16位有符号数相加的全加器COMPONENT adder141616 PORT(clk:IN STD_LOGIC; Din1: IN STD_LOGIC_VEC

27、TOR(13 DOWNTO 0); Din2: IN STD_LOGIC_VECTOR(15 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END COMPONENT;-输入数据乘以242的乘法器COMPONENT mult242 PORT(clk:IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR(8 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END COMPONENT;-16位移位寄存器COMPONENT register16PORT(clk:IN STD_LOGIC; clear: IN STD_LOGIC; Din: IN STD_LOGIC_VECTOR(15 DOWNTO 0); Dout: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END COMPONENT;-16位加法器COMPONENT adder888 PORT(clk:IN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论