实验三 FIR滤波器的设计
一、实验目的
二、实验原理
三、程序设计
程序源代码:
窗函数法
wp=0.2^pi;
ws=0.3*pi;
deltaw=ws-wp;
N0=ceil(6.6*pi/deltaw)+1;
N=N0+mod(N0+1,2);
wdham=(hamming(N))';
wc=(ws+wp)/2;
tao=(N-1)/2;
n=[0:N-1];
m=n-tao+eps;
hd=sin(wc*m)./(pi*m);
h=hd.*wdham;
[H,w]=freqz(h,[1],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);
grd=grpdelay(h,[1],w);
dw=2*pi/1000;
Rp=-(min(db(1:wp/dw+1)));%检验通带波动
As=-round(max(db(ws/dw+1:501)));
n=0:N-1;
subplot(2,2,1);stem(n,hd,'.'),title('理想脉冲响应');
axis([0 N-1 -0.2 0.3]);ylabel('hd(n)');text(N+1,-0.1,'n')
subplot(2,2,2);stem(n,wdham,'.');title('海明窗');
axis([0 N-1 0 1.1]);ylabel('w(n)');text(N+1,0,'n');
subplot(2,2,3);stem(n,h,'.');title('实际脉冲响应')
axis([0 N-1 -0.2 0.3]);xlabel('n');ylabel('h(n)')
subplot(2,2,4);plot(w/pi,db);title('幅度响应(单位:dB)');grid on
axis([0 1 -100 10]);xlabel('频率(单位:pi)');ylabel('分贝')
set(gca,'XTickMode','manual','XTick',[0,0.4,0.6,1])
set(gca,'YTickMode','manual','YTick',[-50,0])
set(gca,'YTickLabelMode','manual','YTickLabels',['50','0'])
set(gcf,'color','w');
频率采样法
N=35;
wp=0.2*pi;
ws=0.3*pi;
wc=(wp+ws)/2;
N=N+mod(N+1,2);
N1=fix(wc/(2*pi/N));N2=N-2*N1-1;
A=[ones(1,N1+1),zeros(1,N2),ones(1,N1)];
theta=-pi*[0:N-1]*(N-1)/N;
H=A.*exp(j*theta);
h=real(ifft(H));%
wp1=2*pi/N*fix(wc/(2*pi/N)-1);ws1=wp1+8*pi/N;
[H,w]=freqz(h,[1],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);
grd=grpdelay(h,[1],w);
N=length(h);L0=(N-1)/2;L=floor(L0);
n=1:L+1;ww=[0:511]*pi/512;
if all(abs(h(n)-h(N-n+1))<1e-8)
Ar=2*h(n)*cos(((N+1)/2-n)'*ww)-mod(N,2)*h(L+1);
type=2-mod(N,2);
elseif all(abs(h(n)+h(N-n+1))<1e-8)&(h(L+1)*mod(N,2)<=1e-8)
A=2*h(n)*sin(((K+l)/2-n)'*ww);
type=4-mod(N/2);
else error('错误:这小虽线性相位滤谀器!');
end
dw=2*pi/1000;
Rp=-min(db(1:fix(wp1/dw)+1))
As=-round(max(db(fix(ws1/dw)+1:501)))
l=0:N-1;
wl=(2*pi/N)*l;
wdl=[0,wc,wc,2*pi-wc,2*pi-wc,2*pi]/pi;
Adl=[1,1,0,0,1,1];
subplot(2,2,1);plot(wl(1:N)/pi,A(1:N),'.',wdl,Adl);
axis([0,1,-0.1,1.1]);title('频率样本,')
xlabel('.');ylabel('A(k)')
set(gca,'XTickMode','manual','XTick',chop([0,0.5,1],2))
set(gca,'YTickMode','manual','YTick',[0,1]);grid
subplot(2,2,2);stem(l,h,'.');axis([-1,N,-0.1,0.5]);grid
title('脉冲响应');ylabel('h(n)');text(N+1,-0.1,'n')
subplot(2,2,3);plot(ww/pi,Ar,wl(1:N)/pi,A(1:N),'.')
axis([0,1,-0.2,1.2]);title('幅度相应')
xlabel('频牟(取位:pi)');ylabel('Ar(w)');grid
subplot(2,2,4);plot(w/pi,db);axis([0,1,-50,10]);
ylabel('分W数');grid
set(gca,'XTickMode','Manual','XTick',chop([0,0.5,1],2))
set(gca,'YTickMode','Manual','YTick',[-As;0]);
set(gca,'YTickLabelMode','manual','YTickLabels',['As';' 0'])
set(gcf,'color','w');
程序结果截图:
窗函数法
频率采样法
四、实验预习要求
五、实验报告要求
六、思考题
答:窗口法的优点是简单,有闭合的公式可用,性能及参数都有表格资料可查,计算程序简单,较为实用。缺点是当系统函数较为复杂时,hd(n)不容易由反付里叶变换求得。边界频率因为加窗的影响而不易控制。
频率取样法直接从频域进行设计,物理概念清楚直观方便;频率采样设计法对于频率响应只有少数几个非零值取样的窄带选频滤波器特别有效,但对于大型系统不适用。
答:在满足阻带衰减的前提下,尽可能选择主瓣宽度小的窗函数,减少衰减。
答:在通带和阻带间设置幅度非0过渡样本点。
因篇幅问题不能全部显示,请点此查看更多更全内容