参考
数字信号处理原理及其MATLAB实现(第3版)的7.2.4窗函数法设计步骤 (页码p186)
数字信号处理原理及其MATLAB实现(第3版)的7.3 频率抽样设计方法(页码p192)
窗函数法设计FIR
低通
%设计一个线性相位滤波器,其具备理想特性
%通带内幅度为1,阻带内幅度为0,数字截至频率为wc
%求h(n)
%低通滤波特性
clc;
close all;
clear all;
N=21;
wc=pi/4;
n=0:N-1;
r=(N-1)/2;
hdn=sin(wc*(n-r))/pi./(n-r);
if rem(N,2)~=0
hdn(r+1)=wc/pi;
end
wn1=boxcar(N);
hn1=hdn.*wn1\';
wn2=hamming(N);
hn2=hdn.*wn2\';
%------绘制矩形窗设计的h(n)
subplot(2,2,1);
stem(n,hn1,\'.\');
line([0,20],[0,0]);
title(\'矩形窗设计的h(n)\');
xlabel(\'n\');ylabel(\'h(n)\');
%------绘制hamming窗设计的h(n)
subplot(2,2,3);
stem(n,hn2,\'.\');
line([0,20],[0,0]);
title(\'hamming窗设计的h(n)\');
xlabel(\'n\');ylabel(\'h(n)\');
hn11=fft(hn1,512);
w=2*[0:511]/512;
%------绘制矩形窗设计的幅度特性
subplot(2,2,2)
plot(w,20*log10(abs(hn11)))
grid;
axis([0,2,-80,5]);
title(\'幅度特性\');
xlabel(\'w/pi\');ylabel(\'幅度(dB)\');
%------绘制hamming窗设计的幅度特性
hn22=fft(hn2,512);
subplot(2,2,4);
plot(w,20*log10(abs(hn22)));
grid;
axis([0,2,-80,5]);
title(\'幅度特性\');
xlabel(\'w/pi\');ylabel(\'幅度(dB)\');
高通
%设计一个线性相位滤波器,其具备理想特性
%通带内幅度为1,阻带内幅度为0,数字截止频率为wc
%求h(n)
%高通滤波特性
clc;
close all;
clear all;
N=21;%h(n)长度
wc=3*pi/4;
n=0:N-1;
r=(N-1)/2;
hdn=-sin(wc*(n-r))/pi./(n-r);
if rem(N,2)~=0
hdn(r+1)=1-(wc/pi);
end
hn1=fir1(N-1,wc/pi,\'high\',boxcar(N));
hn2=fir1(N-1,wc/pi,\'high\',hamming(N));
subplot(2,2,1);
stem(n,hn1,\'.\');
line([0,20],[0,0]);
title(\'矩形窗设计的h(n)\');
xlabel(\'n\');ylabel(\'h(n)\');
subplot(2,2,3);
stem(n,hn2,\'.\');
line([0,20],[0,0]);
title(\'hamming窗设计的h(n)\');
xlabel(\'n\');ylabel(\'h(n)\');
hn11=fft(hn1,512);
w=2*[0:511]/512;
subplot(2,2,2);
plot(w,20*log10(abs(hn11)));
grid;
axis([0,2,-80,5]);
title(\'幅度特性\');
xlabel(\'w/pi\');ylabel(\'幅度(dB)\');
hn22=fft(hn2,512);
subplot(2,2,4);
plot(w,20*log10(abs(hn22)));
grid;
axis([0,2,-200,5]);
title(\'幅度特性\');
xlabel(\'w/pi\');ylabel(\'幅度(dB)\');
频率抽样法
低通
%用频率抽样法设计一个FIR数字低通滤波器,
%截止频率wc=0.2pi
clc;
close all;
clear all;
%取M=20(偶数)
M=20;
alpha=(M-1)/2;
l=0:M-1;
wl=(2*pi/M)*l;
Hrs=[1,1,zeros(1,17),1];
hdr=[1,1,0,0];
wdl=[0,0.2,0.2,1];
k1=0:floor((M-1)/2);
k2=floor((M-1)/2)+1:M-1;
angH=[-alpha*(2*pi)/M*k1,alpha*(2*pi)/M*(M-k2)];
HH=Hrs.*exp(j*angH);
h=real(ifft(HH,M));
[H,w]=freqz(h,1,1000,\'whole\');
H=(H(1:501))\';
w=(w(1:501))\';
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
L=M/2;
b=2*[h(L:-1:1)];
n=[1:1:L];
n=n-0.5;
w=[0:1:500]\'*pi/500;
Hr=cos(w*n)*b\';
figure(1);
%221位置的图
subplot(2,2,1);
plot(wl(1:11)/pi,Hrs(1:11),\'o\',wdl,hdr);
title(\'频率样本:M=20\');
ylabel(\'|Hd|\');
axis([0,1,-0.1,1.1]);
set(gca,\'XTickMode\',\'manual\',\'XTick\',[0,0.2,0.3,1]);
set(gca,\'YTickMode\',\'manual\',\'YTick\',[0,1]);
grid;
%222位置的图
subplot(2,2,2);
stem(l,h);
title(\'冲激响应\');
xlabel(\'n\');
ylabel(\'h(n)\');
axis([0,M,-0.1,0.3]);
%223位置的图
subplot(2,2,3);
plot(w/pi,Hr,wl(1:11)/pi,Hrs(1:11),\'o\');
title(\'振幅响应,没取绝对值\');
xlabel(\'频率(单位:pi)\');
ylabel(\'H(k)\');
axis([0,1,-0.2,1.1]);
set(gca,\'XTickMode\',\'manual\',\'XTick\',[0,0.2,0.3,1]);
set(gca,\'YTickMode\',\'manual\',\'YTick\',[0,1]);
grid;
%224位置的图
subplot(2,2,4);
plot(w/pi,abs(Hr));
title(\'幅度响应,取绝对值后的\');
set(gca,\'XLim\',[0,1],\'XTick\',0:0.2:1,\'XTickLabel\',0:0.2:1);
set(gca,\'YLim\',[0,1],\'YTick\',0:0.2:1,\'YTickLabel\',0:0.2:1);
grid;
xlabel(\'频率(单位:pi)\');
ylabel(\'幅度\');
axis([0,1,0,1.2]);
滤波器性能的改善
由例7.3可以看出,FIR滤波器频率响应的幅度特性振荡很大,为了使设计出的滤波器具有较好的性能,可采用以下两种方法。
- 增加过渡带抽样点
- 增加抽样点密度
频率抽样设计法特别适用于设计窄带选频滤波器,因为这时只有少效儿个非零值的H(k),因而设计计算量小。
二维FIR数字滤波器设计也包括窗函数设计法、频率抽样设计法以及麦克莱兰变换法。
请发表评论