一、实验目的 1. 掌握用频率采样法设计线性相位 FIR 数字滤波器的方法。 2. 熟悉频率取样理论,熟悉内插函数及其应用。 3. 了解 FIR 数字滤波器的频率特性和相位特性,观察过渡带取样点对滤波器幅频特性的影响。 4.如何由线性相位条件决定采样值。
二、实验原理 1.前面介绍的窗函数法设计 FIR 滤波器是一种从时域出发的方法,而频率采样法则是一种从频域出发,对所给定的理想频率响应 H (e ʲw ) 进行等间隔采样以后,用有限的采样点来设计所期望的滤波器(在频域内采用插值的办法逼近)。
取采样点为 M=20,画出所得滤波器的幅频响应,并检验阻带的最小衰减,编写 MATLAB 程 序实现。 提示:在进行频率采样时用到的 MATLAB 语句 A=[ones(1,M1 1),zeros(1,M2),ones(1,M1)]; 这种通带和阻带之间没有过渡值的方法称为朴素设计法。 3.将采样点改为 M=60,重复实验内容 2,比较两者的差异。 参考流程图:
4. 采用在通带和阻带之间插过渡点的方法,重复实验内容 2,3。并比较在进行插值后, 滤波器的性能的改进。并改变过渡点的值观察变化。 提示:插值的 MATLAB 语句 A=[ones(1,M1 1),T1,zeros(1,M2-2),T2,ones(1,M1)]; 参考流程同上,只是在根据采样点数设计频率响应时应在过渡区间内加上一定数量的过渡点值,并分别加入不同数量或不同的数值,比较设计结果并分析。 四、思考题 ①用频率采样法在选定频率样本的幅度和相位特性时应遵循什么条件? ②在频率采样法设计 FIR 滤波器时,为提高阻带衰减采取了什么方法? ③自己编程实验在过渡带内插入多个过渡点,重复实验内容,比较设计结果有何变化。
五、实验报告要求 1.简述实验目的及原理。 2.整理好经过运行并证明是正确的实验程序并加上注释。 3.试述频率采样法的优缺点。 4.简要回答思考题。
代码语言:javascript复制M=20;alpha=(M-1)/2;l=0:M-1;wl=(2*pi/M)*l; Hrs=[1,1,1,zeros(1,15),1,1];
Hdr=[1,1,0,0];wdl=[0,0.25,0.25,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)];
H=Hrs.*exp(j*angH);h=real(ifft(H,M));
[db,mag,pha,grd,w]=freqz_m(h,1);
[Hr,ww,a,L]=Hr_Type2(h); subplot(221);
plot(wl(1:11)/pi,Hrs(1:11),'o',wdl,Hdr);
axis([0,1,-0.1,1.1]);title('Frequency Samples:M=20')
xlabel('frequency in pi units');ylabel('Hr(k)') subplot(222);stem(l,h);axis([-1,M,-0.1,0.3])
title('impulse response');xlabel('n');ylabel('h(n)');
subplot(223);plot(ww/pi,Hr,wl(1:11)/pi,Hrs(1:11),'o');
axis([0,1,-0.2,1.2]);title('amplitude response') xlabel('frequency in pi units');ylabel('Hr(w)')
subplot(224);plot(w/pi,db);axis([0,1,-60,10]);grid
title('magnitude response');xlabel('frequency in pi units');ylabel('Decibels');
子函数:
function [Hr,w,b,L] = Hr_Type2(h);
% Computes Amplitude response of Type-2 LP FIR filter
%
% [Hr,w,b,L] = Hr_Type2(h)
% Hr = Amplitude Response
% w = frequencies between [0 pi] over which Hr is computed
% b = Type-2 LP filter coefficients
% L = Order of Hr
% h = Type-2 LP impulse response
%
M = length(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';
代码语言:javascript复制M=60;alpha=(M-1)/2;l=0:M-1;wl=(2*pi/M)*l;
Hrs=[1,1,1,1,1,1,1,zeros(1,47),1,1,1,1,1,1];
Hdr=[1,1,0,0];wdl=[0,0.25,0.25,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)];
H=Hrs.*exp(j*angH);h=real(ifft(H,M));
[db,mag,pha,grd,w]=freqz_m(h,1);
[Hr,ww,a,L]=Hr_Type2(h);
subplot(221);plot(wl(1:31)/pi,Hrs(1:31),'o',wdl,Hdr);
axis([0,1,-0.1,1.1]);
title('Frequency Samples:M=20') xlabel('frequency in piunits');ylabel('Hr(k)') subplot(222);stem(l,h);axis([-1,M,-0.1,0.3])
title('impulse response');
xlabel('n');ylabel('h(n)');
subplot(223);
plot(ww/pi,Hr,wl(1:31)/pi,Hrs(1:31),'o');
axis([0,1,-0.2,1.2]);
title('amplitude response') xlabel('frequency in piunits');ylabel('Hr(w)')
subplot(224);
plot(w/pi,db);axis([0,1,-60,10]);grid
title('magnitude response');xlabel('frequency in piunits');ylabel('Decibels');