资源描述:
《东南大学信息学院DSP实验课程第三次实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数字信号处理第三次实验报告——FIR数字滤波器的设计姓名:印友进学号:一、实验目的(1)掌握用窗函数法,频率采样法及优化设计法设计FIR滤波器的原理及方法,熟悉响应的matlab编程。(2)熟悉线性相位FIR滤波器的幅频特性和相频特性。(3)了解各种不同窗函数对滤波器性能的影响。二、实验原理(一)线性相位实系数FIR滤波器按其N值奇偶和h(n)的奇偶对称性分为四种(1)为偶对称,N为奇数;的幅值关于成偶对称。(2)为偶对称,N为偶数;的幅值关于成奇对称,不适合作高通。(3)为奇对称,N为奇数;的幅值关于成奇对称,不适合作高通和低通。(4)为奇对称,N为偶数;,不适合作低通。(二)窗口法窗函数设
2、计线性相位FIR滤波器步骤:(1)确定数字滤波器的性能要求:临界频率,滤波器单位脉冲响应长度N;(2)根据性能要求,合理选择单位脉冲响应的奇偶对称性,从而确定理想频率响应的幅频特性和相频特性;(3)求理想单位脉冲响应,在实际计算中,可对按M(M远大于N)点等距离采样,并对其求IDFT得,用代替;(4)选择适当的窗函数,根据求所需设计的FIR滤波器单位脉冲响应;(5)求,分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度N,重复上述设计过程,以得到满意的结果。窗函数的傅式变换的主瓣决定了过渡带宽。的旁瓣大小和多少决定了在通带和阻带范围内波动幅度,常用的几种窗函数有:(1)矩形窗(Recta
3、ngleWindow):(2)汉宁(Hanning)窗,又称升余弦窗:(3)汉明(Hamming)窗,又称改进的升余弦窗:(4)布莱克曼(Blankman)窗,又称二阶升余弦窗:(5)凯塞(Kaiser)窗:其中,是一个可选参数,用来选择主瓣宽度和旁瓣衰减之间的交换关系,一般说来,越大,过渡带越宽,阻带越小衰减也越大。I0(·)是第一类修正零阶贝塞尔函数。若阻带最小衰减表示为,β的确定可采用下述经验公式:(三)频率采样法频率采样法是从频域出发,将给定的理想频率响应加以等间隔采样,然后以此作为实际FIR数字滤波器的频率特性的采样值,由通过IDFT可得有限长序列,然后进行DTFT或Z变换即可得。(
4、四)FIR滤波器的优化设计FIR滤波器的优化设计是按照最大误差最小化准则,使所设计的频响与理想频响之间的最大误差,在通带和阻带范围均为最小,而且是等波动逼近的。为了简化起见,在优化设计中一般将线性相位FIR滤波器的单位脉冲响应的对称中心置于n=0处,此时,线性相位因子α=0。令N=2M+1,则如希望逼近一个低通滤波器,这里M,和固定为某个值。在这种情况下有定义一逼近误差函数:为在希望的滤波器通带和阻带内算出的误差值,为加权函数,应当等于比值,为通带波动,为阻带波动。在这种情况下,设计过程要求在区间和的最大值为最小,它等效于求最小。根据数学上多项式逼近连续函数的理论,用三角多项式逼近连续函数,在
5、一定条件下存在最佳逼近的三角多项式,而且可以证明这个多项式是唯一的。这一最佳逼近定理通常称作交替定理。在逼近过程中,可以固定,,和,而改变,按照交替定理,首先估计出(M+2)个误差函数的极值频率,i=0,1,...,M+1,共计可以写出(M+2)个方程式中表示峰值误差。一般仅需求解出,接着便可用三角多项式找到一组新的极值频率点,并求出新的峰值误差。依此反复进行,直到前、后两次值不变化为止,最小的即为所求的。这一算法通常称作雷米兹(Remez)交替算法。三、实验内容(1)N=45,计算并画出矩形窗、汉明窗、布莱克曼窗的归一化的幅度谱,并比较各自的主要特点。源程序:clc,clear;N=45;W
6、1=boxcar(N);[h1,w1]=freqz(W1,1);W2=hamming(N);[h2,w2]=freqz(W2,1);W3=blackman(N);[h3,w3]=freqz(W3,1);plot(w1/pi,20*log10(abs(h1)),'-',w2/pi,20*log10(abs(h2)),'-.',w3/pi,20*log10(abs(h3)),'--');xlabel('归一化频率/pi');ylabel('幅度/dB');grid;legend('Rectangle','Hamming','Blackman');clc,clear;N=45;W1=boxcar(N
7、);[h1,w1]=freqz(W1,1);subplot(3,1,1);plot(w1/pi,20*log10(abs(h1)));xlabel('归一化频率/pi');ylabel('幅度/dB');title('矩形窗');W2=hamming(N);[h2,w2]=freqz(W2,1);subplot(3,1,2);plot(w2/pi,20*log10(abs(h2)));xlabel