基于FDATool的FIR滤波器设计步骤
- 格式:doc
- 大小:313.31 KB
- 文档页数:9
实验5 FIR滤波器设计与实现以下为参考中文实验指导,原文请参见:\GuideSlide\DSP_Primer\chinese\print下:Xilinx_DSP_workbook_A4.pdf5.FIR滤波器在这一部分中,我们将利用多种不同方法实现FIR滤波器。
为了说明问题,首先来看一下如下图所示的简单的四抽头FIR滤波器:滤波器的系数按如下选择:w0= -10,w1= 20,w2= 50,w3= 80 [5.1] 这些系数并不是针对某个具体的频率响应而设计的,如此选择只是为了说明问题。
5.1.字长增长为了说明字长效应的影响,我们当然只能选择有限精度的信号。
在本例中,我们让输入信号为2位整数。
因此信号x[k]的范围在-2和1之间。
在下面各实验中,我们将考虑滤波器系数为8位的情况,即w的范围在-128和+127之间实验 5.1简单FIR滤波器打开以下系统:\filter\cut_set\FIR1\FIR1.mdl(a)在上图中画出关键路径,并回答在关键路径上共有多少乘法单元和加法单元。
答:(b)运行该系统并在示波器中观察其冲激响应。
(c) 观察加法链上的字长变化并验证字长由8位增长到10位。
(d) 使用System Generator 模块生成所需ISE 工程文件。
打开ISE 工程,对该设计经行时序模拟以及布局与布线(Place & Route ),然后完成下列表格。
(注意在本例中并没有使用到内嵌乘法器)实验 5.2 时序变更(Retiming)打开以下系统:\filter\cut_set\FIR2\FIR2.mdl对图中上面的系统应用cut sets 分割得到的割集进行适当变换便得到了下面的系统。
变换后的系统的关键路径长度被大大缩减。
但同时需要注意的是,系统的延迟增加了。
(a) 运行该系统并在示波器中观察其冲激响应。
可以看出该系统与之前的系统相比其关键路径大大缩短。
新系统的关键路径长度是多少? 答:(b) 使用System Generator 模块生成所需ISE 工程文件。
基于FDATool的FIR滤波器设计方法(二)
这一节主要讲解一下转置型FIR 滤波器实现。
FIR 滤波器的单位冲激响应h(n)可以表示为如下式:
对应转置型结构的FIR 滤波器,如
可以发现转置型结构不对输入数据寄存,而是对乘累加后的结果寄存,这样关键路径上只有1 个乘法和1 个加法操作,相比于直接型结构,延时缩短了不少。
综合得到结果如下:
Number of Slice Registers:1
Number of Slice LUTs:18
Number of DSP48E1s:11
Minimum period:4.854ns{1} (Maximum frequency:206.016MHz)
关键路径延时报告如
线性相位:
与直接型结构相同,由FIR 滤波器的线性相位特征,转置型结构的FIR 滤波器也可优化,如
流水线实现:
为了进一步缩短关键路径的延时,将乘法器和加法器逻辑分割开,中间加入流水线级,结果如
综合得到结果如下:
Number of Slice Registers:355
Number of Slice LUTs:340。
使用MATLAB设计ISE中FIR滤波器系数的方法
1、打开MATLAB,在命令行窗口输入“fdatool”,打开“Filter Designer & Analysis Tool”工具。
如下图所示:
2、由于FPGA中滤波器的系数需要为整数,因此需要在此处将系数设置为“Fixed -point”类型。
点击上图中红色方框内的按钮,在新出现的页面中将“Filter arithmetic”设置为“Fixed -point”。
设置完成后如下图所示:
3、点击上图中红色方框内的按钮,进入滤波器参数设置页面,在其中设置采样频率(Fs)、通带频率(Fpass)、阻带频率(Fstop)以及阻带衰减(Astop)等参数,并按最下面的“Design Filter”按钮生成滤波器系数。
如下图所示,采样频率为62MHz,通带频率为2MHz,阻带频率为4MHz,阻带衰减为-80dB。
4、然后导出coe文件,点击下图方框中的按钮即可导出coe文件:
5、在ISE中新建一个FIR滤波器IP核,在第一页设置中将“Select Source”改为“COE File”,然后在下面选择上一步生成的coe文件即可。
基于FPGA实现FIR滤波器的研究摘要:针对在FPGA中实现FIR滤波器的关键--乘法运算的高效实现进行了研究,给了了将乘法化为查表的DA算法,并采用这一算法设计了FIR滤波器。
通过FPGA仿零点验证,证明了这一方法是可行和高效的,其实现的滤波器的性能优于用DSP和传统方法实现FIR滤波器。
最后介绍整数的CSD表示和还处于研究阶段的根据FPGA实现的要求改进的最优表示。
关键词:FPGA DA FIR滤波器 CSD数字滤波器是语音与图像处理、模式识别、雷达信号处理、频谱分析等应用中的一种基本的处理部件,它能满足波器对幅度和相位特性的严格要求,避免模拟乙波器所无法克服的电压漂移、温度漂移和噪声等问题。
有限冲激响应(FIR)滤波器能在设计任意幅频特性的同时保证严格的线性相位特性。
目前FIR滤波器的实现方法有三种:利用单片通用数字滤波器集成电路、DSP器件和可编程逻辑器件实现。
单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。
使用DSP器件实现虽然简单,但由于程序顺序执行,执行速度必然不快。
FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好。
但长期以来,FPGA一直被用于系统逻辑或时序控制上,很少有信号处理方面的应用,其原因主要是因为在FPGA中缺乏实现乘法运算的有效结构。
现在这个问题得到了解决,使FPGA在数字信号处理方面有了长足的发展。
1 分布式运算原理分布式算法(DA)早在1973年就已经被Croisier提出来了,但是直到FPGA出现以后,才被广泛地应用在FPGA中计算乘积和。
一个线性时不变网络的输出可以用下式表示:=c[0]x[0]+c[1]x[1]+…+c[N-1]x[N-1]假设系数c[n]是已知常数,x[n]是变量,在有符号DA系统中假设变量x[n]的表达式如下:式中,xb[n]表示z[叫的第b位,而x[n]也就是x的第n次采样。
FIR数字滤波器的设计
FIR(有限冲激响应)数字滤波器的设计主要包括以下几个步骤:
1.确定滤波器的要求:根据应用需求确定滤波器的类型(如低通、高通、带通、带阻等)和滤波器的频率特性要求(如截止频率、通带波动、阻带衰减等)。
2.确定滤波器的长度:根据频率特性要求和滤波器类型,确定滤波器的长度(即冲激响应的系数个数)。
长度通常根据滤波器的截止频率和阻带宽度来决定。
3.设计滤波器的冲激响应:使用一种滤波器设计方法(如窗函数法、频率抽样法、最小二乘法等),根据滤波器的长度和频率特性要求,设计出滤波器的冲激响应。
4.计算滤波器的频率响应:将设计得到的滤波器的冲激响应进行傅里叶变换,得到滤波器的频率响应。
可以使用FFT算法来进行计算。
5.优化滤波器的性能:根据频率响应的实际情况,对滤波器的冲激响应进行优化,可以通过调整滤波器的系数或使用优化算法来实现。
6.实现滤波器:将设计得到的滤波器的冲激响应转化为差分方程或直接形式,并使用数字信号处理器(DSP)或其他硬件进行实现。
7.验证滤波器的性能:使用测试信号输入滤波器,检查输出信号是否满足设计要求,并对滤波器的性能进行验证和调整。
以上是FIR数字滤波器的一般设计步骤,具体的设计方法和步骤可能因应用需求和设计工具的不同而有所差异。
在实际设计中,还需要考虑滤波器的实时性、计算复杂度和存储资源等方面的限制。
基于MATLAB的滤波器设计由于MATLAB的广泛使用与功能的不断更新,基于MATLAB的滤波器设计方法以其方便快捷的特点,受到了设计者的欢迎。
下面将举例说明基于MATLAB的FIR滤波器的设计。
1 基于FDATool的FIR滤波器设计使用FDATool设计FIR滤波器的具体步骤如下:1、1 滤波器指标若需要设计一个16阶的FIR滤波器(h(0)=0),给定的参数如下:(1) 低通滤波器(2) 采样频率F S为48kHz,滤波器F C为10、8kHz(3) 输入序列位宽为9位(最高位为符号位)在此利用MATLAB来完成FIR滤波器系数的确定。
1、2 打开MATLAB的FDAToolMATLAB集成了一套功能强大的滤波器设计工具FDATool(Filter Design & Analysis Tool),可以完成多种滤波器的设计、分析与性能评估。
单击MATLAB主窗口下方的“Start”按钮,如图B、1所示,选择菜单“ToolBox”→“Filter Design”→“Filter Design & Analysis Tool(FDATool)”命令,打开FDATool,如图B、2所示。
图B、1 FDATool的启动图B、2 FDATool的主界面另外,在MATLAB主命令窗口内键入“fdatool”,同样可打开FDATool程序界面。
1、3 选择Design FilterFDATool界面左下侧排列了一组工具按钮,其功能分别如下所述:●滤波器转换(TransForm Filter)●设置量化参数(Set Quantization Parameters)●实现模型(Realize Model)●导入滤波器(Import Filter)●多速率滤波器(Multirate Filter)●零极点编辑器(Pole-zero Editor)●设计滤波器(Design Filter)选择其中的按钮,进入设计滤波器界面,进行下列选择,如图B、3所示。
实验4利用FDAT ool工具设计数字滤波器目标:利用fdatool工具设计IIR数字滤波器和FIR数字滤波器。
要求:1:已知数据采样频率为1000Hz,现要设计一6阶的巴特沃斯低通滤波器,截止频率为200Hz,求其幅度响应、相位响应、脉冲响应、零极点图、滤波器系数等。
2:设计一个三阶的切比雪夫Ⅰ型数字高通滤波器,已知截止频率Wn=0.4,通带衰减Rp=1db 。
求其幅度响应、相位响应、脉冲响应、零极点图、滤波器系数等。
响应、脉冲响应、零极点图、滤波器系数等。
相位响应、脉冲响应、零极点图、滤波器系数等。
波形系数:b =Columns 1 through 60.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 7 through 120.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 13 through 180.0000 0.0000 0.0000 0.0001 0.0002 0.0003 Columns 19 through 240.0006 0.0010 0.0016 0.0022 0.0029 0.0036 Columns 25 through 300.0040 0.0042 0.0040 0.0036 0.0029 0.0022Columns 31 through 360.0016 0.0010 0.0006 0.0003 0.0002 0.0001 Columns 37 through 420.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 43 through 480.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 49 through 510.0000 0.0000 0.0000a =1.0e+004 *Columns 1 through 60.0001 -0.0010 0.0055 -0.0216 0.0664 -0.1686 Columns 7 through 120.3654 -0.6920 1.1626 -1.7535 2.3955 -2.9854 Columns 13 through 183.4129 -3.5955 3.5034 -3.1670 2.6625 -2.0859 Columns 19 through 241.5254 -1.0425 0.6666 -0.3990 0.2237 -0.1175 Columns 25 through 300.0579 -0.0267 0.0115 -0.0047 0.0018 -0.0006 Columns 31 through 360.0002 -0.0001 0.0000 -0.0000 0.0000 -0.0000Columns 37 through 420.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 Columns 43 through 480.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 Columns 49 through 510.0000 -0.0000 0.0000。
四.实验过程及结果1.使用Matlab中的Fdatool设计滤波器,设计一个采样频率为20000Hz,截止频率fL=1000Hz,fH=4000Hz的FIR 带通滤波器。
(1)在Matlab的Start菜单中选择Toolboxes -> FilterDesign -> Filter Design & Analysis Tools(fdatool),或者在命令行中输入fdatool来启动滤波器设计分析器。
启动成功后界面如下图所示。
(2)在选项中选择或输入滤波器参数,然后点击“Design Filter”按钮,完成滤波器的设计。
具体参数及设计成功后的结果如下图所示。
(3)从Matlab中导出FIR滤波器系数。
在Fdatool 中,选择Targets -> Code Composer Studio (tm) IDE。
在出现的对话框中选择输出文件类型为C header file,输出系数类型为signed 16-bit integer,如下图所示。
点击Generate按钮,选择路径,即可输出前一步设计出的FIR滤波器的系数表。
(假设生成的系数表文件为fdacoefs.h,此头文件中数组B中的数据就是滤波器系数)导出十进制的系数列表,如下图所示。
最终生成.fcf文件,为下一步的Matlab 仿真所使用。
2.利用Matlab产生噪声信号用于滤波器测试,并进行仿真将下面代码另存为M 文件,在Matlab 中运行后将会生成input.dat 文件。
该数据文件中含有500Hz、3000Hz、8000Hz 三种频率的信号,用于滤波器滤波效果测试。
用Matlab进行仿真分别如下所示。
最后运行程序后会产生一个input.dat 文件,这个文件将会在后面的CCS中被用到。
代码如下所示:11=500; %/Hzf12=3000; %/Hzf13=8000; %/Hzfs=20000; %/ 采样 HzN=200 %数据个T=1/fs; % 采样周期n= 0:N;x11=sin(2*pi*f11*n*T);x12=0.7*sin(2*pi*f12*n*T);x13=0.5*sin(2*pi*f13*n*T);x_base=(x11+x12+x13);figure(1)subplot(211)plot(x_base) ; %待滤波信号形title( '待滤波信号形');Subplot(212)yff=abs(fft(x_base));df=(1:N/2)*(fs/N);plot(df,yff(1:N/2)); %待%将 1.3 中 d. 步骤生成的文件中系数复制,并赋值给 b b=[ 0.0015488099260604208-0.000639162226711395180.00000276175440328235950.0049050931002711240.0124676214730609050.013823224770750035-0.00026535232996076602-0.027038289777890162-0.04744269065963877-0.0393776956774877780.000131327872218974470.0462401856615866150.0644421182359068280.041726101066870809-0.00021601367549392082-0.025586149487005817-0.019584633178667085-0.00128851056756914320.0000036241074212133984-0.021008366929296321-0.039658785664257422-0.030892497493987696-0.0000577033839905187980.022210135405908792-0.0018716902153898345 -0.000064100972310515318 0.029127795779719676 0.054818958402419453 0.042884583593487118 -0.00003996438375069266 -0.029259239394713532 -0.014935307528602806 0.015078402779768362 -0.000043450394824481051 -0.079516267912042804 -0.15948637498492943 -0.14273465660088808 -0.000047883173032453426 0.18167944030096761 0.26439813485415459 0.18167944030096761 -0.000047883173032453426 -0.14273465660088808 -0.15948637498492943 -0.079516267912042804 -0.000043450394824481051 0.015078402779768362 -0.014935307528602806 -0.029259239394713532 -0.00003996438375069266 0.042884583593487118 0.054818958402419453 0.029127795779719676 -0.000064100972310515318 -0.0018716902153898345 0.016335005170358768 0.022210135405908792 -0.000057703383990518798 -0.030892497493987696 -0.039658785664257422 -0.021008366929296321 0.0000036241074212133984 -0.0012885105675691432 -0.019584633178667085 -0.025586149487005817 -0.00021601367549392082 0.0417261010668708090.0462401856615866150.00013132787221897447-0.039377695677487778-0.04744269065963877-0.027038289777890162-0.000265352329960766020.0138232247707500350.0124676214730609050.0049050931002711240.0000027617544032823595-0.000639162226711395180.0015488099260604208 ];figure(2);subplot(211);xf=filter(b,1,x_base); %滤波plot(xf); % 滤波之后的信号title( '滤波之后信号形' );yfff=abs(fft(xf));df=(1:N/2)*(fs/N);Subplot(212);plot(df,yfff(1:N/2)); % 滤波之后的信号频谱title ('滤波之后的信号频谱' );%生成 input.data 文件xout=x_base/max(x_base); % 归一化xto_ccs=round(32767*xout);fid=fopen('input.dat','w'); % 打开文件fprintf(fid,'1651 1 0 \n'); % 输出文件头fprintf(fid,'%d \n',xto_ccs);% 输出fclose(fid);仿真结果如下所示:3.在CCS中编写FIR滤波器程序(1)新建一个工程,编写C语言源代码并添加到工程中,代码如下所示:(2)添加cmd文件到工程中(3)分别将"tmwtypes.h","fdacoefs.h ",rst.lib,input.dat文件添加到工程中,最后进行编译链接,成功后则可以在工程所在目录下看到一个Debug文件夹下产生.out文件。
基于FDATool的FIR滤波器设计步骤
使用FDATool设计FIR滤波器的具体步骤如下:
1.1 滤波器指标
若需要设计一个16阶的FIR滤波器(h(0)=0),给定的参数如下:
(1) 低通滤波器
(2) 采样频率F S为48kHz,滤波器F C为10.8kHz
在此利用MATLAB来完成FIR滤波器系数的确定。
1.2 打开MATLAB的FDATool
MATLAB集成了一套功能强大的滤波器设计工具FDATool(Filter Design & Analysis Tool),可以完成多种滤波器的设计、分析和性能评估。
两种打开方式:
1、可在MATLAB的命令窗口中直接打入代码FDATool,按回车键,便可打开FDATool的窗口如下图B.1所示;
2、单击MATLAB主窗口下方的“Start”按钮,如图B.1所示,选择菜单“ToolBox”→“Filter Design”→“Filter Design & Analysis Tool(FDATool)”命令,打开FDATool,如图B.2所示。
图B.1 FDATool的启动
图B.2 FDATool的主界面
Fdatool界面总共分两大部分,一部分是design filter,在界面的下半部分,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。
design filter部分主要分为:
Response Type(响应类型)选项,包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的滤波器。
根据本次作业要求,在该选项中选择Lowpass选项。
Design Method(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、Chebyshev Type i(切比雪夫i型)法、Chebyshev Type ii(切比雪夫ii 型)法、Elliptic(椭圆滤波器)法等和FIR滤波器的Equiripple法、Least-squares (最小乘方)法、Window(窗函数)法等多种方法。
Filter Order(滤波器阶数)选项,定义滤波器的阶数,包括Specify order(指
定阶数)和Minimum order(最小阶数)。
在Specify order中填入所要设计的滤波器的阶数(n阶滤波器,specify order=n-1),如果选择Minimum order则matlab 根据所选择的滤波器类型自动使用最小阶数。
Frenquency Specifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。
它的具体选项由Response Type选项和Design Metho选项决定。
我们要求的Lowpass(低通)滤波器只需要定义Fs、Fc。
采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。
Magnitude Specifications选项,可以定义幅值衰减的情况。
采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。
1.3 选择Design Filter
FDATool界面左下侧排列了一组工具按钮,其功能分别如下所述:
●滤波器转换(TransForm Filter)
●设置量化参数(Set Quantization Parameters)
●实现模型(Realize Model)
●导入滤波器(Import Filter)
●多速率滤波器(Multirate Filter)
●零极点编辑器(Pole-zero Editor)
●设计滤波器(Design Filter)
选择其中的按钮,进入设计滤波器界面,进行下列选择,如图B.3所示。
图B.3 FDATool 设计FIR 滤波器
● 滤波器类型(Filer Type )为低通(Low Pass )
● 设计方法(Design Method )为FIR ,采用窗函数法(Window )
● 滤波器阶数(Filter order )定制为16
● 窗口类型为Kaiser ,Beta 为0.5
● F S 为48kHz ,F C 为10.8kHz
最后单击Design Filter 图标,让MATLAB 计算FIR 滤波器系数并作相关分析。
其系统函数H(z)可用下式来表示:
H(z)=∑=-16
1k k k z b
显然上式可以写成:
H(z)=∑=--1501k k k
z b z
即可以看成是一个15阶的FIR滤波器的输出结果经过了一个单位延时单元1
z,所以在FDATool中,把它看成15阶FIR滤波器来计算参数。
1.4 滤波器分析
计算完FIR滤波器系数以后,往往需要对设计好的FIR滤波器进行相关的性能分析,以便了解该滤波器是否满足设计要求。
分析操作步骤如下:选择FDATool的菜单“Magnitude Response”,启动幅频响应分析如图B.4所示,x轴为频率,y轴为幅度值(单位为dB)。
图B.4 FIR滤波器幅频响应
在图的左侧列出了当前滤波器的相关信息:
●滤波器类型为Direct Form FIR(直接I型FIR滤波器)
●滤波器阶数为16
选择菜单“Phase Response”,启动相频响应分析,如图B.5所示。
由该图可以看到设计的FIR滤波器在通带内其相位响应为线性的,即该滤波器是一个线性相位的滤波器。
图B.5 滤波器相频响应
图 B.6显示了滤波器幅频特性与相频特性的比较,这可以通过菜单“Magnitude and Phase Response”来启动分析。
图B.6 滤波器幅频和相频响应
FDATool还提供了以下几种分析工具:
●选择菜单“Group Delay Response”,启动群时延分析。
群时延响应分析。
如下图
●选择菜单“Phase Delay Response”,启动相时延分析。
群时延响应分析。
如下图
●冲激响应分析(Impulse Response),如下图所示。
●阶跃响应分析(Step Response),如下图所示。
●零极点图分析(Pole/Zero Plot),如下图所示。
求出的FIR滤波器的系数可以通过选择菜单“Filter Coefficients”来观察。
如图B.10所示,图中列出了FDATool计算的15阶直接I型FIR滤波器的部分系数。
图B.10 滤波器系数
1.5 导出滤波器系数
为导出设计好的滤波器系数,选择FDATool菜单的“File”→“Export”命令,打开Export(导出)对话框,如下图所示。
1.6 导出M文件
为导出设计好的滤波器系数,选择FDATool菜单的“File”→“Generate m-file”命令,打开Export(导出)对话框,如图B.11所示。