数字信号处理FPGA实现课程分析方案.docx
- 文档编号:29145560
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:15
- 大小:281.19KB
数字信号处理FPGA实现课程分析方案.docx
《数字信号处理FPGA实现课程分析方案.docx》由会员分享,可在线阅读,更多相关《数字信号处理FPGA实现课程分析方案.docx(15页珍藏版)》请在冰豆网上搜索。
数字信号处理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个输入信号:
由上图可以看出在程序中通过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: 也由此可以看出其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中填入所要设计的滤波器的阶数 本次作业要求设计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 实现 课程 分析 方案