您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 有限冲击响应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-nfir1函数的使用格式有以下几种: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、汇编源文件.global_fir,_init,_B,_outdata_firbsetfrctamov#_B,xdpmov#_B,cdpmovt0,ac0sub#1,ac0movac0,mmap(csr)addac0,ar0mov#0,ac0rptcsrmacmz*ar0-,*cdp+,ac0movhi(ac0),t0ret_initmovmmap(t0),ac0sub#1,ac0movac0,ar7rptzac0,ar7movac0,*ar0+ret_outdatamovt1,ac0sub#2,ac0movac0,mmap(csr)addac0,ar0rptcsrdelay*ar0-mar*ar0+movt0,*ar0ret2、C源文件externintfir(int*,int);externintinit(int*,int#includes.h#includemath.h#definesignal_1_f200#definesignal_2_f620#definesignal_sample_f2000#definepi3.1415926#definecoff_L23#definebufer_L256intdata_in[bufer_L];intout[bufer_L];intfirout;intx[coff_L+1];intk=0;intbufer=bufer_L;);externintoutdata(int*,int,int);voidinputwave();voidmain(){inputwave();init(x,BL);while(1){x[0]=data_in[k];firout=fir(x,BL);outdata(out,firout,bufer);k++;if(k=bufer_L){k=0;}}}voidinputwave(){floatwt1;floatwt2;inti;for(i=0;i=bufer_L;i++){wt1=2*pi*i*signal_1_f;wt1=wt1/signal_sample_f;wt2=2*pi*i*signal_2_f;wt2=wt2/signal_sample_f;data_in[i]=(cos(wt1)+cos(wt2))/2*32768;}}3、命令文件-stack0x500-sysstack0x500-heap0x1000-c-u_Reset-lrts55.libMEMORY{PAGE0:RAM(RWIX):origin=0x000100,length=0x01ff00ROM(RIX):origin=0x020100,length=0x01ff00VECS(RIX):origin=0xffff00,length=0x000200PAGE2:IOPORT(RWI):origin=0x000000,length=0x020000}SECTIONS{.textROMPAGE0.dataROMPAGE0.bssRAMPAGE0.constRAMPAGE0.sysmemRAMPAGE0.stackRAMPAGE0.sysstackRAMPAGE0.switchRAMPAGE0.cinitRAMPAGE0.pinitRAMPAGE0.vectorsVECSPAGE0.ioportIOPORTPAGE2}九实验结果及分析1、设置波形时域观察窗口,得到其滤波前后波形变化图滤波前的波形输入滤波前的波形输出2、设置频域观察窗口,得到其滤波前后频谱变化图滤波前频谱图滤波后频谱图十设计总结通过这次DSP课程设计,我初步掌握和熟悉了数字滤波器的设计过程、其DSP实现原理与CCS的使用方法。数字滤波是语音处理、图像处理、模式识别、频谱分析等应用的基本处理算法。用DSP实现FIR数字滤波,具有稳定性好、准确度高、灵活性好、不受环境影响等优点。这次DSP课程设计,加强了我动手、思考和解决问题的能力。在设计过程中,经常会遇到各种各样的情况,但通过思考、查阅资料等方法,克服了各种问题。课程设计同时也使我的课本知识得到巩固和加强,平时看课本时,有些问题老是弄不懂,做完课程设计后,那些问题迎刃而解了。
本文标题:有限冲击响应FIR滤波器的设计
链接地址:https://www.777doc.com/doc-2375743 .html