foreo买mini还是标准:用窗函数设计FIR滤波器
来源:百度文库 编辑:偶看新闻 时间:2024/05/05 23:11:16
一、
1、根据阻带的衰减,选择合适的窗:
矩形窗
汉宁窗
海明窗
布莱克曼窗
2、根据窗函数得到的序列经过firl或fir2得到一个滤波器传输函数系数的序列。
1)fir1
2)fir2
3)为了观测到设计出来的滤波器的特性,我们可以用impz得到它的脉冲响应,用freqz得到频率响应。
二、实例
%%第一题、通带截止频率为0.2pi,阻带截止频率为0.3pi,阻带衰减不小于50dB,通带衰减不大于3dB,设计一个FIR滤波器,并验证。
wp=0.2*pi; ws=0.3*pi;
wdelta=ws-wp;
M=ceil(3.32*pi/wdelta);
N=2*M+1;
wc=(ws+wp)/2;
win=hamming(N);
b=fir1(N-1,wc/pi,win);
n=0:1:N;
[hi t]=impz(b,1,n);%得到脉冲响应
[hf w]=freqz(b,1,512);
figure(1);
subplot(3,1,1); stem(n,hi);
xlabel('n'); ylabel('Magnitude'); title('impulse response');
subplot(3,1,2); plot(w/pi,20*log10(abs(hf)));
xlabel('Frequency(Hz)'); ylabel('Magnitude(dB)');
title('Frequency response');
subplot(3,1,3); plot(w/pi,180/pi*unwrap(angle(hf)));
xlabel('Frequency(Hz)'); ylabel('Phase(degrees)');
title('Frequency response');
%验证:
nn=0:50;
x1=sin(nn*0.2*pi); x2=sin(nn*0.8*pi);%假设两个信号,低频和高频
in=x1+x2; out=filter(b,1,in); %滤波过程
figure(2);
subplot(2,2,1); stem(x1);
xlabel('n'); ylabel('Magnitude');
title('x1'); axis([0 50 -1 1]);
subplot(2,2,2); stem(x2);
xlabel('n'); ylabel('Magnitude');
title('x2'); axis([0 50 -1 1]);
subplot(2,2,3); stem(in);
xlabel('n'); ylabel('Magnitude');
title('x1+x2 before filter'); axis([0 50 -2 2]);
subplot(2,2,4); stem(out);
xlabel('n'); ylabel('Magnitude');
title('x1+x2 after filter'); axis([0 50 -1 1]);
在这题要主要的是求分贝的公式:20*log10(abs(hf)),还有解卷绕函数的调用180/pi*unwrap(angle(hf))。
从上面的程序可以得到图:
%第二题,取1中相同的滤波器类型和阶数,通带和阻带的临界频率也相同,分别用矩形窗,汉宁窗,海明窗和布莱克曼窗设计滤波器,并分析它们的性能。
wp=0.2*pi;
ws=0.3*pi;
wdelta=ws-wp;
M1=ceil(0.92*pi/wdelta);
M2=ceil(3.11*pi/wdelta);
M3=ceil(3.32*pi/wdelta);
M4=ceil(5.56*pi/wdelta);
N1=2*M1+1;
N2=2*M2+1;
N3=2*M3+1;
N4=2*M4+1;
wc=(ws+wp)/2;
win1=boxcar(N1);
win2=hanning(N2);
win3=hamming(N3);
win4=blackman(N4);
b1=fir1(N1-1,wc/pi,win1);
b2=fir1(N2-1,wc/pi,win2);
b3=fir1(N3-1,wc/pi,win3);
b4=fir1(N4-1,wc/pi,win4);
[h1 w1]=freqz(b1,1,512);
[h2 w2]=freqz(b2,1,512) ;
[h3 w3]=freqz(b3,1,512) ;
[h4 w4]=freqz(b4,1,512) ;
figure(3);
subplot(4,2,1); plot(w1/pi,20*log10(abs(h1)));
ylabel('Magnitude');
subplot(4,2,2); plot(w1/pi,180/pi*unwrap(angle(h1)));
ylabel('Phase(degrees)');
subplot(4,2,3); plot(w2/pi,20*log10(abs(h2)));
ylabel('Magnitude'); title('Hanning Window');
subplot(4,2,4); plot(w2/pi,180/pi*unwrap(angle(h2)));
ylabel('Phase');
subplot(4,2,5); plot(w3/pi,20*log10(abs(h3)));
ylabel('Magnitude'); title('Hamming Window');
subplot(4,2,6); plot(w3/pi,180/pi*unwrap(angle(h3)));
ylabel('Phase');
subplot(4,2,7); plot(w4/pi,20*log10(abs(h4)));
ylabel('Magnitude'); title('Blankman Window');
subplot(4,2,8); plot(w4/pi,180/pi*unwrap(angle(h4)));
ylabel('Phase');
这题只是单纯的重复4次滤波器的设计,设计的方法同第一题一样。得到的图如下:
从上可以观察到,
1、衰减:从上到下,衰减依次增大,以布莱克曼窗的为最优,矩形窗最差。
2、过渡带:从上到下,过渡带逐渐增宽,以矩形窗的为最优,布莱克曼窗最差。
其实,改善阻带衰减的一种办法是加宽过渡带宽,以牺牲过渡带换取阻带衰减的增加。也就是以增加主瓣宽度为代价来降低旁瓣。
所以,我们在设计滤波器的时候,要根据不同的指标,性能,需求去选择合适的窗来进行设计。