《有限冲击响应FIR滤波器的设计.doc》由会员分享,可在线阅读,更多相关《有限冲击响应FIR滤波器的设计.doc(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流有限冲击响应FIR滤波器的设计.精品文档.一 设计题目 有限冲击响应FIR 滤波器的设计二 设计目的1掌握数字滤波器的设计过程;2了解FIR 的原理和特性;3熟悉设计FIR 数字滤波器的原理和方法;4 学习FIR 滤波器的DSP 实现原理;5 学习使用ccs 的波形观察窗口观察输入、输出信号波形和频谱变化情况。三 设计内容 1 通过MATLAB 来设计一个低通滤波器,对它进行模拟仿真确定FIR 滤波器系数;2 用DSP 汇编语言及C 语言进行编程,实现FIR 运算,对产生的合成信号,滤除信号中高频成分,观察滤波前后的波型变化四 设计原理 滤波
2、器就是在时间域或频域内,对已知激励产生规定响应的网络使其能够从信号中提取有用的信号,抑制并衰减不需要的信号,滤波器的设计实质上就是对提出的要求给出相应的性能指标再通过计算,使物理可实现的实际滤波器响应特性逼近给出的频率响应特性。 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 滤波器在保证幅度特性满足技术要求的
3、同时,易做到严格的线性相位特性。为了使滤波器满足线性相位条件,要求其单位脉冲响应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 结构将乘法器数目减少一半。 应用MATL
4、AB 设计FIR 滤波器的主要任务就是根据给定的性能指标设计一个H(z) ,使其逼近这一指标,进而计算并确定滤波器的系数b ( n ) ,再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化,设计完成之后将得到FIR 滤波器的单位冲激响应序列h ( n )的各个参数值。五 MATLAB 设计FIR 滤波器的方法 FIR 滤波器最大的优点就是在满足幅频特性的同时,还可以获得严格的线性相位特性,这使得它在语音处理、图像处理等要求高保真的数字信号处理中显得十分重要。设计FIR 滤波器主要有窗函数法、最优化设计法及约束最小二乘法等设计方法。用MATLAB 设计F
5、IR 数字滤波器方法有很多种,最常用的有窗函数设计方法、最优化设计方法等。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
6、 fir1 函数的使用格式有以下几种:b=fir(n,Wn),可得到低通滤波器;参数n 为滤波器的阶数;Wn 为滤波器的截止频率:其中,0Wn 1 , Wn=1 相当于0.5fs 当Wn=W1 W2时,为带通滤波器,其通带为wl Ww2,w1.w2分别为通带的下限频率和上限频率b=fir1(n,Wn,ftype),当ftype=high 时,可设计高通滤波器;当ftype=stop时,可设计带阻滤波器b = firl (n,Wn window ) ,参数window 用来指定的窗函数类型,默认值为hamming 窗,参数可以使用的窗口函数有boxcar、hamming 、blackman 、k
7、asier 和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.5 fs.矢量f 按升序排列,且第一个元素必须为0 ,最后一个必须为
8、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 一M
9、cclellan 算法设计线性相位FIR 滤波器,Parks 一Mcclellan 算法使用Remez 交换算法和chebyshev 逼近理论来设计最优拟合滤波器,这种滤波器使期望频率响应与实际频率响应之间的最大误差最小,使其频率响应呈现出等波形特性,因此有时也称为等波纹滤波器。由于这种滤波器具有等波纹特性,因此在其冲激响应的头部和尾部会表现出不连续性。remez 函数的使用格式有以下几种:b=remez(n,f,a),可得到一个n 阶FIR 讯数字滤波器,其幅频特胜由f 和a 指定f 是频带边缘频率矢量,且f 属于0 , 1 ,当f=1 时相当于n(Nyquist 频率)。矢量f 按升序排列
10、,且第一个元素必须为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 )
11、 ,可找到近似的阶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 设置波形时域观察窗口,得到其滤波
12、前后波形变化图;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、汇编源文件.global _fir,_init,_B,_outdata_fir bset frct amov #_B,xdp mov #_B,cdp mov t
13、0,ac0 sub #1,ac0 mov ac0,mmap(csr) add ac0,ar0 mov #0,ac0 rpt csr macmz *ar0-,*cdp+,ac0 mov hi(ac0),t0 ret_init mov mmap(t0),ac0 sub #1,ac0 mov ac0,ar7 rptz ac0,ar7 mov ac0,*ar0+ ret_outdata mov t1,ac0 sub #2,ac0 mov ac0,mmap(csr) add ac0,ar0 rpt csr delay *ar0- mar *ar0+ mov t0,*ar0 ret2、C 源文件exter
14、n int fir(int *,int);extern int init(int *,int#include s.h#include math.h#define signal_1_f 200#define signal_2_f 620#define signal_sample_f 2000#define pi 3.1415926#define coff_L 23#define bufer_L 256int data_inbufer_L;int outbufer_L ;int firout;int xcoff_L+1;int k=0;int bufer=bufer_L;extern int ou
15、tdata(int *,int,int);void inputwave();void main()inputwave();init(x,BL);while(1)x0=data_ink;firout=fir(x,BL);outdata(out,firout,bufer);k+;if(k=bufer_L)k=0;void inputwave()float wt1;float wt2;int i;for(i=0;iROM PAGE 0 .data ROM PAGE 0 .bss RAM PAGE 0 .const RAM PAGE 0 .sysmem RAM PAGE 0 .stack RAM PA
16、GE 0 .sysstack RAM PAGE 0 .switch RAM PAGE 0 .cinit RAM PAGE 0 .pinit RAM PAGE 0 .vectors VECS PAGE 0 .ioport IOPORT PAGE 2九 实验结果及分析1、设置波形时域观察窗口,得到其滤波前后波形变化图滤波前的波形输入滤波前的波形输出2、设置频域观察窗口,得到其滤波前后频谱变化图滤波前频谱图滤波后频谱图十 设计总结通过这次DSP课程设计,我初步掌握和熟悉了数字滤波器的设计过程、其DSP实现原理与CCS的使用方法。数字滤波是语音处理、图像处理、模式识别、频谱分析等应用的基本处理算法。用
17、DSP 实现FIR数字滤波,具有稳定性好、准确度高、灵活性好、不受环境影响等优点。这次DSP课程设计,加强了我动手、思考和解决问题的能力。 在设计过程中,经常会遇到各种各样的情况,但通过思考、查阅资料等方法,克服了各种问题。课程设计同时也使我的课本知识得到巩固和加强,平时看课本时,有些问题老是弄不懂,做完课程设计后,那些问题迎刃而解了。经过努力,在老师和同学的帮助下,我基本上完成了设计任务。通过这次课程设计,我充分认识到了自学的重要性,以及学以致用的道理,也体会到自己完成一件事,成功解决困难的乐趣。我查阅了大量的资料,在今后的学习过程中,我会多看一些专业方面的书籍,以丰富自己的知识。这次课程设计也使我加深了对DSP技术的理解和应用。