有限冲击响应FIR滤波器的设计.docx
《有限冲击响应FIR滤波器的设计.docx》由会员分享,可在线阅读,更多相关《有限冲击响应FIR滤波器的设计.docx(11页珍藏版)》请在冰豆网上搜索。
有限冲击响应FIR滤波器的设计
一设计题目有限冲击响应FIR滤波器的设计
二设计目的
1掌握数字滤波器的设计过程;
2了解FIR的原理和特性;
3熟悉设计FIR数字滤波器的原理和方法;
4学习FIR滤波器的DSP实现原理;
5学习使用ccs的波形观察窗口观察输入、输出信号波形和频谱变化情况。
三设计内容
1通过MATLAB来设计一个低通滤波器,对它进行模拟仿真确定FIR滤波器系数;
2用DSP汇编语言及C语言进行编程,实现FIR运算,对产生的合成信号,滤除信号中高频成分,观察滤波前后的波型变化.
四设计原理
滤波器就是在时间域或频域内,对已知激励产生规定响应的网络.使其能够从信号中提取有用的信号,抑制并衰减不需要的信号,滤波器的设计实质上就是对提出的要求给出相应的性能指标.再通过计算,使物理可实现的实际滤波器响应特性逼近给出的频率响应特性。
FIR数字滤波器是一种非递归系统,其传递函数为:
H(z)=Y(Z)/X(Z)=∑b(n)z-n
由此可得到系统的差分方程为:
y(n)=∑h(i)x(n-i)
其激响应h(n)是有限长序列,它其实就是滤波器系数向量b(n),N为FIR滤波器的阶数.
在数字信号处理应用中往往需要设计线性相位的滤波器,FIR滤波器在保证幅度特性满足技术要求的同时,易做到严格的线性相位特性。
为了使滤波器满足线性相位条件,要求其单位脉冲响应h(n)为实序列,且满足偶对称或奇对称条件,即h(n)=h(N-1-n)或h(n)=h(N-1-n)。
这样,当N为偶数时,偶对称线性相位F讯滤波器的差分方程表达式为
Y(n)=∑h(i)(x(n-i)+x(N-1-n-i))
由上可见,FIR滤波器不断地对输入样本x(n)延时后,再做乘法累加算法,将滤波器结果y(n)输出。
因此,FIR实际上是一种乘法累加运算。
而对于线性相位FIR而言,利用线性相位FIR滤波器系数的对称特性,可以采用结构精简的FIR结构将乘法器数目减少一半。
应用MATLAB设计FIR滤波器的主要任务就是根据给定的性能指标设计一个H(z),使其逼近这一指标,进而计算并确定滤波器的系数b(n),再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化,设计完成之后将得到FIR滤波器的单位冲激响应序列h(n)的各个参数值。
五MATLAB设计FIR滤波器的方法
FIR滤波器最大的优点就是在满足幅频特性的同时,还可以获得严格的线性相位特性,这使得它在语音处理、图像处理等要求高保真的数字信号处理中显得十分重要。
设计FIR滤波器主要有窗函数法、最优化设计法及约束最小二乘法等设计方法。
用MATLAB设计FIR数字滤波器方法有很多种,最常用的有窗函数设计方法、最优化设计方法等。
1窗函数设计方法
窗函数法一般是基于直接程序设计法来设计标准频率响应的,可实现加窗线性相位FIR数字滤波器设计。
Fir1是用来设计标准频率响应的基于窗函数的FIR滤波器函数,可实现加窗线性相位FIR数字滤波器的设计,使用firl函数可设计标准的低通、高通、带通和带阻四种滤波器;fir2是用来设计有任意频率响应的各种加窗FIR滤波器函数。
利用firl和fir2两种函数可以设计有任意频率响应的各种加窗FIR滤波器.滤波器系数包含在返回值b中,可表示为
b(z)=b
(1)+b
(2)z-n+…+b(n+1)z-n
fir1函数的使用格式有以下几种:
b=fir(n,Wn),可得到低通滤波器;参数n为滤波器的阶数;Wn为滤波器的截止频率:
其中,0<Wn<1,Wn=1相当于0.5fs.当Wn=[W1W2]时,为带通滤波器,其通带为wl<W<w2,w1.w2分别为通带的下限频率和上限频率.
b=fir1(n,Wn,’ftype’),当ftype=high时,可设计高通滤波器;当ftype=stop时,可设计带阻滤波器‘
b=firl(n,Wnwindow),参数window用来指定的窗函数类型,默认值为hamming窗,参数可以使用的窗口函数有boxcar、hamming、blackman、kasier和chebwin.
b=firl(n,wn,ftype,window),ftype参数用来决定滤波器的类型:
参数window用来指定所使用的窗函数类型
这里需要注意的是,用firl函数设计高通和低通池波器时,所使用的阶数n为偶数,当输入的阶数n为奇数时.firl函数会自动将阶数增加1形成偶数。
fir2函数的使用格式有以下几种:
b=fir2(n,f,m},参数n为滤波器的阶数.
b=fir2(n,f,m,window),参数f为频率点矢量,f属于[0,l],对应于0.5fs.矢量f按升序排列,且第一个元素必须为0,最后一个必须为l,并可以包含重复的频率点
b=fir2(n,f,m,npt),参数m为幅度点矢量,在矢量m中包含了与f相对应的期望得到的滤波器幅度
b=fir2(n,f,m,npt,window),参数window用来指定所使用的窗函数类型,其默认为汉明(hamming)窗.
b=fir2(n,f,m,npt,lap),参数npt用来指定fir2函数对频率响应进行内插的点数.
b=fir2(n,f,m,npt,lap,window),参数laP用来指定fir2函数在重复频率点附近插入的区域大小.
2最优化设计法
Remez函数可采用Parks一Mcclellan算法设计线性相位FIR滤波器,Parks一Mcclellan算法使用Remez交换算法和chebyshev逼近理论来设计最优拟合滤波器,这种滤波器使期望频率响应与实际频率响应之间的最大误差最小,使其频率响应呈现出等波形特性,因此有时也称为等波纹滤波器。
由于这种滤波器具有等波纹特性,因此在其冲激响应的头部和尾部会表现出不连续性。
remez函数的使用格式有以下几种:
b=remez(n,f,a),可得到一个n阶FIR讯数字滤波器,其幅频特胜由f和a指定.f是频带边缘频率矢量,且f属于[0,1],当f=1时相当于n(Nyquist频率)。
矢量f按升序排列,且第一个元素必须为0。
最后一个必须为1。
a是频率矢量f处的期望幅值响应。
f和a的长度必须相等,而且为偶数。
b=remez(n,f,a,w),可利用加权矢量w对各频率段的误差进行加权处理,w的长度是f和a长度的一半,用以指定各频率段的权值。
b=remez(n,f,a,’ftype’)和b=remez(n,f,a,w,’ftype’),可指定滤波器的类型,当ftype=hilbert时,设计的滤波器为奇对称的线性相位滤波器(Ⅲ型和Ⅳ型).当ftype=differentiator时,采用了特殊的加权技术设计Ⅲ型和Ⅳ型滤波器。
[n,f0,a0,w]=remezord(f,a,dev),可找到近似的阶n,归一化频带边缘矢量f0、频带内辐值响应矢量匀及加权矢量w,使由remez函数构成的滤波器满足f,a及dev指定的性能要求。
其中f和a分别指定频段的边缘矢量与相应的幅值响应,dev用于指定各频带允许的偏差
[n,f0,a0,w]=remezord(f,a,dev,fs),可指定取样频率fs,fs的缺省值为2Hz.
六设计步骤
1利用MATLAB来确定FIR滤波器的参数
2启动CCS,在CCS中建立一个汇编源文件、建立一个C源文件和一个命令文件,并将这三个文件添加到工程,再编译并装载程序
3设置波形时域观察窗口,得到其滤波前后波形变化图;
4设置频域观察窗口,得到其滤波前后频谱变化图。
七利用MATLAB来确定FIR滤波器的参数
用双线性法设计低通滤波器,并确定FIR滤波器的参数:
fp=1000;
fc=1200;
as=100;
ap=1;
fs=22000;
wp=2*fp/fs;
wc=2*fc/fs;
[n,wn]=ellipord(wp,wc,ap,as);
[b,a]=ellip(n,ap,as,wn);
freqz(b,a,512,fs);
八源程序
1、汇编源文件
.title"FIR.ASM"
.mmregs
.bssy,1
K_FIR_BFFR.set40
PA0.set0
PA1.set1
FIR_COFF_TABLE.usect"FIR_COFF",40
D_DATA_BUFFER.usect"FIR_BFR",40
.data
COFF_FIR_START:
.word-7*32768/10000,3*32768/10000
.word14*32768/10000,10*32768/10000
.word-16*32768/10000,-38*32768/10000
.word-8*32768/10000,64*32768/10000
.word81*32768/10000,-30*32768/10000
.word-169*32768/10000,-118*32768/10000
.word162*32768/10000,353*32768/10000
.word83*32768/10000,-515*32768/10000
.word-689*32768/10000,247*32768/10000
.word2051*32768/10000,3523*32768/10000
.word3523*32768/10000,2051*32768/10000
.word247*32768/10000,-689*32768/10000
.word-515*32768/10000,83*32768/10000
.word353*32768/10000,162*32768/10000
.word-118*32768/10000,-169*32768/10000
.word-30*32768/10000,81*32768/10000
.word64*32768/10000,-8*32768/10000
.word-38*32768/10000,-16*32768/10000
.word10*32768/10000,14*32768/10000
.word3*32768/10000,-7*32768/10000
.text
.defFIR_INIT
.defFIR_TASK
FIR_INIT:
SSBXFRCT
STM#FIR_COFF,AR5
RPT#K_FIR_BFFR-1
MVPD#COFF_FIR_START,*AR5+
STM#D_DATA_BUFFER,AR4
RPTZA,#K_FIR_BFFR-1
STLA,*AR4+
STM#(D_DATA_BUFFER+K_FIR_BFFR-1),AR4
STM#(FIR_COFF_TABLE+K_FIR_BFFR-1),AR5
STM#-1,AR0
LD#D_DATA_BUFFER,DP
PORTRPA1,@D_DATA_BUFFER
FIR_TASK:
STM#K_FIR_BFFR,BK
RPTZA,#K_FIR_BFFR-1
MAC*AR4+0%,*AR5+0%,A
STHA,@y
PORTW@y,PA0
BDFIR_TASK
PORTRPA1,*AR4+0%
.end
3、命令文件
/*solutionfileforfir.cmd*/
vectors.obj
fir.obj
-ofir.out
-mfir.map
-efir_init
MEMORY
{
PAGE0:
EPROM:
org=0E000Hlen=3000H
VECS:
org=00000Hlen=0080H
PAGE1:
SPRAM:
org=0060Hlen=0020H
DARAM:
org=0080Hlen=1380H
}
SECTIONS
{
.text:
>EPROMPAGE0
.vectors:
>VECSPAGE0
.data:
>EPROMPAGE0
.bss:
>SPRAMPAGE1
FIR_BFR:
align(128){}>DARAMpage1
FIR_COFF:
align(128){}>DARAMpage1
}
九实验结果及分析
1、设置波形时域观察窗口,得到其滤波前后波形变化图
滤波前的波形输入
滤波前的波形输出
2、设置频域观察窗口,得到其滤波前后频谱变化图
滤波前频谱图
滤波后频谱图
十设计总结
通过这次DSP课程设计,我初步掌握和熟悉了数字滤波器的设计过程、其DSP实现原理与CCS的使用方法。
数字滤波是语音处理、图像处理、模式识别、频谱分析等应用的基本处理算法。
用DSP实现FIR数字滤波,具有稳定性好、准确度高、灵活性好、不受环境影响等优点。
这次DSP课程设计,加强了我动手、思考和解决问题的能力。
在设计过程中,经常会遇到各种各样的情况,但通过思考、查阅资料等方法,克服了各种问题。
课程设计同时也使我的课本知识得到巩固和加强,平时看课本时,有些问题老是弄不懂,做完课程设计后,那些问题迎刃而解了。
经过努力,在老师和同学的帮助下,我基本上完成了设计任务。
通过这次课程设计,我充分认识到了自学的重要性,以及学以致用的道理,也体会到自己完成一件事,成功解决困难的乐趣。
我查阅了大量的资料,在今后的学习过程中,我会多看一些专业方面的书籍,以丰富自己的知识。
这次课程设计也使我加深了对DSP技术的理解和应用。