0


MATLAB处理DSP使用窗函数法设计FIR数字滤波器

1.实验目的

(1) 熟悉矩形窗、汉宁窗、海明窗等常用窗函数。

(2) 掌握用上述窗函数法设计FIR数字滤波器的原理和方法。

(3) 熟悉线性相位FIR数字滤波器特性。

(4) 了解窗函数类型及窗口长度对滤波器特性的影响。

2.实验原理

    如果所希望的滤波器的理想频率响应函数为![](https://img-blog.csdnimg.cn/422aee33b03f427a8a06e7f926cb6805.png), 则其对应的单位冲激响应为

用窗函数w(n)将hd(n)截断, 得到:

h(n)就作为实际设计的FIR数字滤波器的单位冲激响应序列, 其频率响应函数为:

如果要求线性相位特性, 则h(n)还必须满足:

根据上式中的正、负号和长度N取为奇数或偶数又将线性相位FIR滤波器分成四类。 要根据所设计的滤波特性正确选择其中一类。

3.运行结果

图1 N=15时不同FIR滤波器特的性曲线

图2 N=33时不同FIR滤波器特的性曲线

4.结果分析

从实验结果来看,对于低通滤波器来说,过渡带宽大小关系为:海明窗 > 汉宁窗 > 矩形窗;阻带最小衰减绝对值大小关系为:海明窗 > 汉宁窗 > 矩形窗。实验结果符合理论预期。

对比N = 15和 N = 33这两种窗口长度, 我们可以发现N =33时,窗的主瓣宽度减小,过渡带变窄。然而,增大窗口长度对阻带最小衰减的影响不大,且加大阻带衰减会导致过渡带的加宽。故应该根据实际要求,选择合适的窗函数以满足阻带衰减指标,然后选择N满足过渡带宽指标;

窗口长度对过渡带有影响,但减少带内波动以及加大阻带的衰减只能从窗函数的形状上找解决方法,因此合理选择窗函数以及长度N才能设计出理想的FIR滤波器。

附:程序代码

function dspwind(wc,N)

wc=pi/4;

N=33; %可改为15

hd=ideallp(wc,N);

wd_1=rectwin(N);

wd_2=hann(N);

wd_3=hamming(N);

*h_1=hd.wd_1';

[H_1,w_1]=freqz(h_1,1,1000,'whole');

mag_1=abs(H_1);

db_1=20log10((mag_1+eps)/max(mag_1));*

angle_1=unwrap(angle(H_1));

subplot(321);

plot(w_1/pi,db_1);

axis([0,1,-120,1]);

xlabel('\omega/\pi');

ylabel('20log|H(e^j^\omega/|(dB)');

title('矩形窗幅度响应(dB)');

subplot(322);

plot(w_1/pi,angle_1);

axis([0,1,-30,0]);

xlabel('\omega/\pi');

ylabel('\theta/(e^j^\omega/)');

title('矩形窗相位响应');

*h_2=hd.wd_2';

[H_2,w_2]=freqz(h_2,1,1000,'whole');

mag_2=abs(H_2);

db_2=20log10((mag_2+eps)/max(mag_2));*

angle_2=unwrap(angle(H_2));

subplot(323);

plot(w_2/pi,db_2);

axis([0,1,-120,1]);

xlabel('\omega/\pi');

ylabel('20log|H(e^j^\omega/|(dB)');

title('汉宁窗幅度响应(dB)');

subplot(324);

plot(w_2/pi,angle_2);

axis([0,1,-30,0]);

xlabel('\omega/\pi');

ylabel('\theta/(e^j^\omega/)');

title('汉宁窗相位响应');

*h_3=hd.wd_3';

[H_3,w_3]=freqz(h_3,1,1000,'whole');

mag_3=abs(H_3);

db_3=20log10((mag_3+eps)/max(mag_3));*

angle_3=unwrap(angle(H_3));

subplot(325);

plot(w_3/pi,db_3);

axis([0,1,-120,1]);

xlabel('\omega/\pi');

ylabel('20log|H(e^j^\omega/|(dB)');

title('海明窗幅度响应(dB)');

subplot(326);

plot(w_3/pi,angle_3);

axis([0,1,-30,0]);

xlabel('\omega/\pi');

ylabel('\theta/(e^j^\omega/)');

title('海明窗相位响应');


本文转载自: https://blog.csdn.net/hitliuyi17/article/details/127980875
版权归原作者 渔人老刘 所有, 如有侵权,请联系我们删除。

“MATLAB处理DSP使用窗函数法设计FIR数字滤波器”的评论:

还没有评论