数字信号处理的FPGA实现课程报告.docx
- 文档编号:3669630
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:12
- 大小:281.66KB
数字信号处理的FPGA实现课程报告.docx
《数字信号处理的FPGA实现课程报告.docx》由会员分享,可在线阅读,更多相关《数字信号处理的FPGA实现课程报告.docx(12页珍藏版)》请在冰豆网上搜索。
数字信号处理的FPGA实现课程报告
数字信号处理的FPGA实现课程报告
(基于DA算法的FIR滤波器设计与分析)
班级:
信息工程一班
姓名:
XXX
学号:
XXXX
一.此次报告所需滤波器的基本概念
FIR滤波器可以在幅度特性随意设计的同时,能保证精确,严格的线形相位的特性。
此外,FIR滤波器的单位冲激响应h(n)是有限长序列,它的Z变换在整个有限Z平面上收敛,因此FIR滤波器肯定是稳定滤波器。
同时,FIR滤波器也没有因果性困难,因为任何一个非因果的有限长序列,只要通过一定的延时,总是可以转换为因果序列,因此总可以用一个因果系统来实现。
FIR滤波器还可以采用快速傅立叶变换的方法过滤信号,从而大大提高了运算效率。
所有这些特点使FIR滤波器得到越来越广泛的应用。
二.FIR数字滤波器的设计思路
(1)系统的单位冲击响应h(n)在有限个n值处不为零。
(2)系统函数在
>0处收敛,极点全部在Z=0处(稳定系统)。
(3)结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。
有限冲击响应(FIR)的优点:
(1)既具有严格的线性相位,又具有任意的幅度。
(2)IR滤波器的单位抽样响应是有限长的,因而滤波器性能稳定。
(3)只要经过一定的延时,任何非因果有限长序列都能变成因果的有限长序列,因而能用因果系统来实现。
(4)FIR滤波器由于单位冲击响应是有限长的,因而可用快速傅里叶变换(FFT)算法来实现过滤信号,可大大提高运算效率。
三FIR数字滤波器的VHDL实现
1.采用分布式算法实现FIR数字滤波器
采用分布式算法实现5阶FIR数字滤波器,采用状态机实现分布式算法的状态转移,分为s0和s1状态。
使用FPGA的芯片EPM240F10015来实现其相应的DA表为:
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_arith.ALL;
ENTITYcase5pIS
PORT(table_in:
INSTD_LOGIC_VECTOR(4DOWNTO0);
table_out:
OUTINTEGERRANGE0TO25);
ENDcase5p;
ARCHITECTURELEsOFcase5pIS
BEGIN
--ThisistheDACASEtablefor
--the5coefficients:
1,3,5,7,9
--automaticallygeneratedwithdagen.exe--DONOTEDIT!
PROCESS(table_in)
BEGIN
CASEtable_inIS
WHEN"00000"=>table_out<=0;
WHEN"00001"=>table_out<=1;
WHEN"00010"=>table_out<=3;
WHEN"00011"=>table_out<=4;
WHEN"00100"=>table_out<=5;
WHEN"00101"=>table_out<=6;
WHEN"00110"=>table_out<=8;
WHEN"00111"=>table_out<=9;
WHEN"01000"=>table_out<=7;
WHEN"01001"=>table_out<=8;
WHEN"01010"=>table_out<=10;
WHEN"01011"=>table_out<=11;
WHEN"01100"=>table_out<=12;
WHEN"01101"=>table_out<=13;
WHEN"01110"=>table_out<=15;
WHEN"01111"=>table_out<=16;
WHEN"10000"=>table_out<=9;
WHEN"10001"=>table_out<=10;
WHEN"10010"=>table_out<=12;
WHEN"10011"=>table_out<=13;
WHEN"10100"=>table_out<=14;
WHEN"10101"=>table_out<=15;
WHEN"10110"=>table_out<=17;
WHEN"10111"=>table_out<=18;
WHEN"11000"=>table_out<=16;
WHEN"11001"=>table_out<=17;
WHEN"11010"=>table_out<=19;
WHEN"11011"=>table_out<=20;
WHEN"11100"=>table_out<=21;
WHEN"11101"=>table_out<=22;
WHEN"11110"=>table_out<=24;
WHEN"11111"=>table_out<=25;
WHENOTHERS=>table_out<=0;
ENDCASE;
ENDPROCESS;
ENDLEs;
系统程序为:
LIBRARYieee;--Usingpredefinedpackages
USEieee.std_logic_1164.ALL;
USEieee.std_logic_arith.ALL;
ENTITYdafsmIS------>Interface
PORT(clk,reset:
INSTD_LOGIC;
x0_in,x1_in,x2_in,x3_in,x4_in:
INSTD_LOGIC_VECTOR(4DOWNTO0);
lut:
OUTINTEGERRANGE0TO25;
y:
OUTINTEGERRANGE0TO1024);
ENDdafsm;
ARCHITECTUREfpgaOFdafsmIS
COMPONENTcase5p--User-definedcomponent
PORT(table_in:
INSTD_LOGIC_VECTOR(4DOWNTO0);
table_out:
OUTINTEGERRANGE0TO25);
ENDCOMPONENT;
TYPESTATE_TYPEIS(s0,s1);
SIGNALstate:
STATE_TYPE;
SIGNALx0,x1,x2,x3,x4,table_in
:
STD_LOGIC_VECTOR(4DOWNTO0);
SIGNALtable_out:
INTEGERRANGE0TO31;
BEGIN
table_in(0)<=x0(0);
table_in
(1)<=x1(0);
table_in
(2)<=x2(0);
table_in(3)<=x3(0);
table_in(4)<=x4(0);
PROCESS(reset,clk)------>DAinbehavioralstyle
VARIABLEp:
INTEGERRANGE0TO63;--temp.register
VARIABLEcount:
INTEGERRANGE0TO5;--countsshifts
BEGIN
IFreset='1'THEN--asynchronousreset
state<=s0;
ELSIFrising_edge(clk)THEN
CASEstateIS
WHENs0=>--Initializationstep
state<=s1;
count:
=0;
p:
=0;
x0<=x0_in;
x1<=x1_in;
x2<=x2_in;
x3<=x3_in;
x4<=x4_in;
WHENs1=>--Processingstep
IFcount=5THEN--Issumofproductdone?
y<=p;--Outputofresulttoyand
state<=s0;--startnextsumofproduct
ELSE
p:
=p/2+table_out*16;
FORkIN0TO3LOOP--Shiftbits
x0(k)<=x0(k+1);
x1(k)<=x1(k+1);
x2(k)<=x2(k+1);
x3(k)<=x3(k+1);
x4(k)<=x4(k+1);
ENDLOOP;
count:
=count+1;
state<=s1;
ENDIF;
ENDCASE;
ENDIF;
ENDPROCESS;
LC_Table0:
case5p
PORTMAP(table_in=>table_in,table_out=>table_out);
lut<=table_out;--Extratestsignal
ENDfpga;
如图f给出了对应序列{2,3,2,6,6}的仿真结果此仿真结果给出了clk,reset等的信号。
以及5个输入信号:
(f)
由上图可以看出在程序中通过case5p来定义分布式算法表,合成器可以使用逻辑单元来实现lut,也由此可以看出其registeredperformance为140.35MHz。
其相应生成的FIR滤波器的RTLviewer为:
2.采用直接型实现5阶FIR滤波器
如分布式一样,直接型算法的时候也采用EPM240F10015,其相应的系统代码为:
PACKAGEeight_bit_intIS--User-definedtypes
SUBTYPEBYTEISINTEGERRANGE-128TO127;
TYPEARRAY_BYTEISARRAY(0TO4)OFBYTE;
ENDeight_bit_int;
LIBRARYwork;
USEwork.eight_bit_int.ALL;
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_arith.ALL;
ENTITYfir_srgIS------>Interface
PORT(clk:
INSTD_LOGIC;
x:
INBYTE;
y:
OUTBYTE);
ENDfir_srg;
ARCHITECTUREflexOFfir_srgIS
SIGNALtap:
ARRAY_BYTE:
=(0,0,0,0,0);
--Tappeddelaylineofbytes
BEGIN
p1:
PROCESS------>Behavioralstyle
BEGIN
WAITUNTILclk='1';
--Computeoutputywiththefiltercoefficientsweight.
--Thecoefficientsare[13579].
--DivisionforAlteraVHDLisonlyallowedfor
--powers-of-twovalues!
y<=tap(0)+3*tap
(1)+5*tap
(2)+7*tap(3)+9*tap(4);
FORIIN3DOWNTO1LOOP
tap(I)<=tap(I-1);--Tappeddelayline:
shiftone
ENDLOOP;
tap(0)<=x;--Inputinregister0
ENDPROCESS;
ENDflex;
其对应脉冲10的滤波器脉冲响应y的仿真结果如图g:
(g)
也由此可以看出其registeredperformance为64.52MHz。
其相应生成的FIR滤波器的RTLviewer为:
四.基于matlab工具的滤波器系数计算:
其指标为:
采样频率:
64.52MHz归一化截止频率:
0.4MHz
类型:
低通输入数据S(n)宽度:
9位
阶数:
5阶输出数据y(n)宽度:
10位
Fdatool是Matlab自带的一个数字滤波器的设计分析软件,里面提供了丰富的参数供调整(具体的参阅Matlab的教材),大大降低了数字滤波器的设计难度,同时又可以设计出高质量的滤波器。
fdatool虽然不是最好的滤波器设计软件,但是在Matlab响亮的名号下,得到了广泛的使用。
FIRMegacore是Altera针对其主流FPGA推出的一款商业化的数字滤波器设计软件,可以直接生成HDL代码,同时其结构针对Altera自己的FPGA做了各种各样的优化。
尽管fdatool也可以生成可综合的HDL代码,但是没有针对FPGA的M4K、DSPBlock做出相应的优化,所以性能和FIRMegacore生成的FIR滤波器有相当的差距。
然而,FIRMegacore的滤波器设计工具相当的简单,只提供了窗函数法,用户只能定义有限的几个参数。
而其他的设计方法,比如矩形系数更好的等纹波法则只能在fdatool里面找到。
所幸的是,FIRMegacore提供了滤波器的Coefficients导入的选项,可以使用第三方工具生成的Coefficients。
这使得我们能够用FIRMegacore来实现fdatool生成的滤波器。
在matlab命令编辑窗口输入Fdatool指令,敲击回车可以打开FilterDesign&AnalysisTool窗口,在该工具的帮助下,我们可以完成f.i.r.滤波器系数的计算工作。
FilterDesign&AnalysisTool窗口
Fdatool界面总共分两大部分,一部分是designfilter,在界面的下半部分,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。
designfilter部分主要分为:
ResponseType(响应类型)选项,包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的滤波器。
根据本次作业要求,在该选项中选择Lowpass选项。
DesignMethod(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、ChebyshevTypei(切比雪夫i型)法、ChebyshevTypeii(切比雪夫ii型)法、Elliptic(椭圆滤波器)法等和FIR滤波器的Equiripple法、Least-squares(最小乘方)法、Window(窗函数)法等多种方法。
结合本次作业要求,选择FIR滤波器的窗函数法进行设计。
选定窗函数法后,会在右侧出现Options区域,进行窗函数法相关参量的设置,根据作业要求选择Kaiser窗并设置Beta为:
0.5。
FilterOrder(滤波器阶数)选项,定义滤波器的阶数,包括Specifyorder(指定阶数)和Minimumorder(最小阶数)。
在Specifyorder中填入所要设计的滤波器的阶数(n阶滤波器,specifyorder=n-1),如果选择Minimumorder则matlab根据所选择的滤波器类型自动使用最小阶数。
本次作业要求设计5阶滤波器,所以选定Specifyorder并填入4。
FrenquencySpecifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。
它的具体选项由ResponseType选项和DesignMetho选项决定。
我们要求的Lowpass(低通)滤波器只需要定义Fs、Fc。
采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。
MagnitudeSpecifications选项,可以定义幅值衰减的情况。
采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。
。
滤波类型为:
直接型FIR
通过点击matlab的FDATool可以看出FIR滤波器的幅频响应为:
相频响应与幅频响应的比较:
由此图可以看出其时域与频域特性满足要求。
五.结论
以上理论分析和仿真结果表明,软硬件结合串行执行的DSP算法相比,DA算法具有明显的占用系统资源低和运行速度高的优点,是一种更为有效的FIR滤波器设计方法;基于DA算法的数字信号处理设计具有DSP算法所无可比拟的优势,在极大的提高了FIR数字滤波器的处理速度和数据吞吐能力的同时,又可以保证系统很小的处理误差,是一种比较实用可靠高效的设计方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 FPGA 实现 课程 报告