选择合适的窗函数设计一个FIR数字低通滤波器,要求:通带截至频率为w =0.2 ,R =0.25dB;阻带截至频率为w =0.3 ,A =50dB。求脉冲响应并描绘一张滤波器的频率响应图。
MATLAB程序如下:
wp=0.2*pi;ws=0.3*pi;
%输入设计指标
tr_width=ws-wp;
%计算过渡带的宽度
M=ceil(6.6*pi/ tr_width)+1; %由海明窗的过渡带宽度选择合适的阶数
n=[0:1:M-1]; wc=(ws+wp)/2;
%理想低通的截止频率(取平均值)
hd=ideal_lp(wc,M);
%理想低通滤波器冲激响应
w_ham=(hamming(M))'; h=hd .* w_ham;
%给理想低通加海明窗
[db,mag,pha,grd,w]= freqz_m(h,[1]);
%求出幅频响应
delta_w=2*pi/1000; Rp=-(min(db(1:1:wp/delta_w+1)));
%检验通带波动
As=-round(max(db(ws/delta_w+1:1:501)));%检验最小阻带衰减
% plots(绘图)
subplot(2,2,1),stem(n,hd); title(Ideal Impulse Response');
axis([0 M-1 -0.1 0.3]);xlabel('n');ylabel('hd(n)');
subplot(2,2,2);stem(n,w_ham);title('Hamming Window') ;
axis([0 M-1 0.1 1]); xlabel('n');ylabel('w(n)');
subplot(2,2,3);stem(n,h); title('Actual Impulse Response');
axis([0 M-1 -0.1 0.3]); xlabel('n');ylabel('h(n)');
subplot(2,2,4);plot(w/pi,db);title('Magnitude Response in dB');grid
axis([0 1 -100 10]); xlabel('frequency in pi units'); ylabel('Decibels');
其中自定义的两个函数
1)函数freqz_m,输出信号的幅频特性和相频特性,db为分贝幅频响应,mag为实际幅度响应,pha为相频特性。
function[db,mag,pha,w]=freqz_m(b,a);
[H,w]=freqz(b,a,1000,'whole');
H=(H(1:1:501))'; w=(w(1:1:501))';
mag=abs(H); db=20*log10((mag+eps)/max(mag)); pha=angle(H);
2)函数ideal_lp
function hd = ideal_lp(wc,M);
% Ideal LowPass filter computation
% --------------------------------
% [hd] = ideal_lp(wc,M)
% hd = ideal impulse response between 0 to M-1
% wc = cutoff frequency in radians
% M = length of the ideal filter
alpha = (M-1)/2; n = [0:1:(M-1)];
m = n - alpha + eps; hd = sin(wc*m) ./ (pi*m);
请问大大们:这个程序的海明窗该怎么定义子函数?
[ 本帖最后由 ChaChing 于 2009-5-27 14:46 编辑 ] |