1、利用线性相位有限冲激响应滤波器的对称(或反对称)性质,可以将传输函数的直接型实现所需的乘法器总量减少一半。例如,图2-2显示了一个具有对称冲击响应的、长度为7的有限冲激响应传输函数的实现。图2- 2 线性相位有限冲激响应结构三、设计思路:根据课程上老师所讲例题,首先使用matlab计算出符合设计要求的滤波器冲激响应系数。后将整个电路规划为语言编辑和原理图编辑两个单元,其中语言编辑部分负责编辑整个滤波器电路中所需用的单元器件,包括寄存器、加法器、减法器以及乘法器几个单元器件;原理图编辑部分完成单元器件的电气连接工作。整个电路的原理图设置方案如图3-1所示:图3- 1 滤波器整体设计思路四、设计过
2、程:(一)基于matlab工具的滤波器系数计算:在matlab命令编辑窗口输入Fdatool指令,敲击回车可以打开Filter Design & Analysis Tool窗口(如图4-1所示),在该工具的帮助下,我们可以完成f.i.r.滤波器系数的计算工作。图 4- 1 Filter Design & Analysis Tool窗口Fdatool界面总共分两大部分,一部分是design filter,在界面的下半部分,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。design filter部分主要分为:Response Type(响应类型)选项,包
3、括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的滤波器。根据本次作业要求,在该选项中选择Lowpass选项。Design Method(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、Chebyshev Type i(切比雪夫i型)法、 Chebyshev Type ii(切比雪夫ii型) 法、Elliptic(椭圆滤波器)法等和FIR滤波器的Equiripple法、Least-squares(最小乘方)法、Window(窗函数)法等多种方法。结合本次作业要求,选择FIR滤波器的窗函数法进行设计。选定窗函数法
4、后,会在右侧出现Options区域,进行窗函数法相关参量的设置,根据作业要求选择Kaiser窗并设置Beta为:0.5。Filter Order(滤波器阶数)选项,定义滤波器的阶数,包括Specify order(指定阶数)和Minimum order(最小阶数)。在Specify order中填入所要设计的滤波器的阶数(n阶滤波器,specify ordern-1),如果选择Minimum order则matlab根据所选择的滤波器类型自动使用最小阶数。本次作业要求设计16阶滤波器,所以选定Specify order并填入15。Frenquency Specifications选项,可以详细
5、定义频带的各参数,包括采样频率Fs和频带的截止频率。它的具体选项由Response Type选项和Design Metho选项决定。我们要求的 Lowpass(低通)滤波器只需要定义Fs、Fc。采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。Magnitude Specifications选项,可以定义幅值衰减的情况。采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。本次作业中的参数设定结果如图4-2所示。图 4- 2 滤波器参数设定结果参数设定完毕,单击工具窗口下方的Design Filter按钮,开始进行
6、相关参数计算。在计算结果中我们可以看到该滤波器的一些相关曲线,如幅频响应(如图4-3)、相频响应(如图4-4)、冲激响应(如图4-5)等以及具体的系数值(如图4-6)。图 4- 3 幅频响应图 4- 4 相频响应图 4- 5 冲激响应图 4- 6 所设计滤波器冲激系数计算的结果可通过File下拉菜单中的Export命令取出,点击Export打开Export对话框(如图4-7),点击OK按钮可将滤波器系数数据存放到当前工作空间,并以Num命名。图 4- 7 冲激系数输出对话框保存并关闭滤波器设计分析工具回到matlab主窗口,在命令编辑区输入Num可得到工具的计算结果(如图4-8)。图 4- 8
7、 输出在matlab的冲激系数对FIR滤波器的系数进行调整,做整数化操作(如图4-9)。可得到滤波器整数化的系数为-31 -88 -106 -54 70 239 401 499 499 401 239 70 -54 -106 -88 -31图 4- 9 整数化后的冲激系数(二)单元器件的语言编辑:1、寄存器模块寄存器用于寄存一组二值代码,只要求它们具有置1、置0的功能即可。在本设计中用D触发器组成寄存器,实现寄存功能。本设计中使用带异步复位rst端的D触发器,当rst=1时,输出信号q=0,当rst=0且上升沿脉冲到达时q=d。 程序代码如下:-LIBRARY ieee;USE ieee.st
8、d_logic_1164.all;ENTITY dff16 ISPORT (rst,clk: IN STD_LOGIC; d:IN STD_LOGIC_VECTOR (9 DOWNTO 0); q:OUT STD_LOGIC_VECTOR (9 DOWNTO 0);END dff16;ARCHITECTURE dff16 OF dff16 ISBEGIN PROCESS (rst,clk) BEGIN IF(rst=1)THEN q0); ELSIF(clkEVENT AND clk=)THEN=d; END IF; END PROCESS;仿真结果如图4-10所示:图 4- 10 寄存器仿真
9、结果2、加法器模块实现两个有符号数的相加运算。即将输入的两数,在时钟脉冲到来时相加运算,输出结果。在本设计中共有8个两个10位有符号数相加产生一个11位有符号数的加法器、一个18位和19位有符号数相加产生20位有符号数的加法器、一个两个20位有符号数相加产生一个21位有符号数的加法器、一个两个19位有符号数相加产生一个20位有符号位数的加法器、一个20位和21位有符号数相加产生22位有符号数的加法器,以及一个20位和22位有符号数相加产生23位有符号数的加法器电路。其中一个20位和22位有符号数相加产生23位有符号数的加法器电路为最后一级,所以在加法器电路中在引入低位舍去功能只保留最终10位输
10、出,最终保留10位输出采用了直接取输出23位数的高十位的方法,因此在输出中近似等于除掉了213即8192以后的结果。 10位有符号数相加产生一个11位有符号数的加法器设计: -USE ieee.std_logic_arith.all;ENTITY sum101011 IS PORT(a,b: IN SIGNED(9 DOWNTO 0); clk: s:OUT SIGNED(10 DOWNTO 0);END SUM101011;ARCHITECTURE sum101011 OF sum101011 IS PROCESS(clk) BEGIN IF(clk s=(a(9)&a)+(b(9)&b);
11、END sum101011;仿真结果如图4-11所示:图 4- 11 两10位相加产生11位加法器仿真结果 18位和19位有符号数相加产生20位有符号数的加法器设计:ENTITY sum7023918 IS PORT(a: IN SIGNED(17 DOWNTO 0); b: IN SIGNED(18 DOWNTO 0);OUT SIGNED(19 DOWNTO 0);END sum7023918;ARCHITECTURE sum7023918 OF sum7023918 IS=(a(17)&a(17)&a)+(b(18)&仿真结果如图4-12所示:图 4- 12 18位19位相加产生20位数
12、仿真结果 两个20位有符号数相加产生一个21位有符号数的加法器设计:ENTITY sum40149919 IS IN SIGNED(19 DOWNTO 0);OUT SIGNED(20 DOWNTO 0);END sum40149919;ARCHITECTURE sum40149919 OF sum40149919 IS=(a(19)&a)+(b(19)&仿真结果如图4-13所示:图 4- 13 两20位相加产生21位数仿真结果 两个19位有符号数相加产生一个20位有符号位数的加法器设计:ENTITY sum181819 ISEND sum181819;ARCHITECTURE sum1818
13、19 OF sum181819 IS=(a(18)&仿真结果如图4-14所示:图 4- 14 两19位相加产生20位数仿真结果 20位和21位有符号数相加产生22位有符号数的加法器:ENTITY sum192021 IS IN SIGNED(20 DOWNTO 0);OUT SIGNED(21 DOWNTO 0);END sum192021;ARCHITECTURE sum192021 OF sum192021 ISa(19)&a)+(b(20)&仿真结果如图4-15所示:图 4- 15 20位和21相加产生22位数仿真结果 20位和22位有符号数相加产生23位有符号数的加法器电路设计(最后一
14、级带舍位):- ENTITY sum192110 IS IN SIGNED(21 DOWNTO 0);OUT SIGNED(9 DOWNTO 0);END sum192110;ARCHITECTURE sum192110 OF sum192110 IS VARIABLE c:SIGNED(22 DOWNTO 0); c:a)+(b(21)&=c(22 DOWNTO 13);仿真结果如图4-16所示:图 4- 16 20位22位相加产生被截短的10位数仿真结果3、减法器模块:实现零值减去两个有符号数的减法运算。即用零值减去输入的两数,在时钟脉冲到来时做减法运算,输出结果。-31和-88的乘结果都
15、只包含了乘系数31和88的数值,并没有将两个负号代入,所以两乘法器后面的加法器运算改为减法器模块,采用0-31*累加结果-88*累加结果的方法,实现(-31)*累加结果+(-88)*累加结果的计算。-106和-54后面的加法器采用同样的方式处理。 -31和-88的减法器设计:-ENTITY sub318817 isPORT(clk : in STD_LOGIC; Din1 :in signed (15 downto 0); Din2 :in signed (17 downto 0); Dout :out signed(18 downto 0);END sub318817;ARCHITECTUR
16、E sub318817 of sub318817 ISSIGNAL s1: signed(17 downto 0):=(Din1(15)&Din1(15)&Din1);SIGNAL s2: signed(18 downto 0): PROCESS(Din1,Din2,clk) IF clkevent and clk= THEN Dout=s2-Din2-s1;仿真结果如图4-17所示:图 4- 17 -31和-88减法器的仿真结果 -106和-54的减法器的设计:ENTITY sub1065417 isin signed (16 downto 0);END sub1065417;ARCHITE
17、CTURE sub1065417 of sub1065417 IS=(Din2(16)&Din2);=s2-Din1-s1;仿真结果如图4-18所示:图 4- 18 -106和-54减法器的仿真结果4、乘法器模块:从资源和速度考虑,常系数乘法运算可用移位相加来实现。将常系数分解成几个2的幂的和形式。滤波器系数分别为-31、-88、-106、-54、70、239、401、499、499、401、239、70、-54、-106、-88、-31。算法:其中带负号数先乘去负号的整数部分,在后面的求和中做减法运算。编码方式如下:31被编码为25-20、88被编码为26+24+23、106被编码为26+2
18、5+23+21、54被编码为26-23-21、70被编码为26+22+21、239被编码为28-24-20、401被编码为29-27+24+20、499被编码为29-23-22-20。实现输入带符号数据与固定数据两个二进制数的乘法运算。当到达时钟上升沿时,将两数输入,运算并输出结果。乘31电路设计:ENTITY mult31 ISPORT( clk : Din : IN SIGNED (10 DOWNTO 0); OUT SIGNED (15 DOWNTO 0);END mult31;ARCHITECTURE mult31 OF mult31 ISSIGNAL s1 : SIGNED (15 DOWNTO 0);SIGNAL s2 : SIGNED (10 DOWNTO 0);SIGNAL s3 : A1:PROCESS(Din,s1,s2,s3) s1=Din&00000; s2=Din; IF (Din(10)=) THEN s3=(&s1(14 downto 0)-(s2(10 DOWNTO 0); ELSE 11111 A2: PROCESS(clk,s3) I
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1