一、实验目的 1. 掌握FIR 滤波器的各种实现形式。 2. 了解FIR 滤波器的各种实现形式之间的转化。 3. 学会用MATLAB 工具实现FIR 滤波器 二、实验原理 FIR 滤波器的结构特点是没有环路,它的单位脉冲响应的长度是有限的,设它的长度为N,它的系统函数为
FIR 滤波器的结构稳定,且比IIR 滤波器容易实现。它包括:直接型,级联型,线性相位型和频率采样型。 1. 直接型 FIR 直接型的系统函数为
FIR 滤波器的直接型结构由行向量b 表示,分母向量a 置1。MATLAB 中用filter 函数实现这个结构。 2. 级联型 FIR 级联型的系统函数为具有实系数的二阶节的积,每个二阶节均用直接型实现,然后整个滤波器就是所有二阶节的级联。系统函数为:
级联型 FIR 滤波器可以用MATLAB 函数dir2cas 从直接型转化而来。 3.线性相位型 对于一个具有在[0 , M-1] 区间上的脉冲相应的因果 FIR 滤波器来说, 满足h(n) = h(M − 1 − n) 的脉冲响应称为对称脉冲响应,满足h(n) = −h(M − 1 − n) 的脉冲响应称为反对称脉冲响应。线性相位型的结构就是利用这些对称条件。在 MATLAB 中线性相位结构的实现是等效于直接型的。 4.频率采样型 由于 FIR 滤波器的系数为实数,利用 H (k ) 和W −ᵏ
根据(4),(5)两式,可以自己编写函数dir2fs 实现从直接型转化为频率采样型。 三、实验内容 1. 参看教材第五章有关内容,并阅读本实验原理。 2. 若FIR 滤波器的直接型结构为b=[1 3 5 3 1],把它转化级联型结构。(提示:可以直接调用函数dir2cas) 3. 编写MATLAB 函数dir2fs,存入库函数,然后直接调用该函数将直接型FIR 滤波器转化为频率采样型。设h=[1,3,5,-3,-1]/9。 参考流程图
四、思考题 (1) FIR 滤波器的直接实现形式有什么缺点? (2) FIR 滤波器的级联形式在那些方面比直接形式有改进?为此它付出了什么代价? (3) 频率采样结构有什么优缺点?为了克服它的缺点,可以采用什么改进方法? 五、实验报告要求 1. 简述实验目的及原理。
2. 整理好经过运行并证明是正确的实验程序并加上注释。绘出相应的图形。
3. 简要回答思考题。
代码语言:javascript复制b=[1,3,5,3,1];
a=[1];
[b0,B,A]=dir2cas(b,a);
b0,B,A
调用的函数:dir2cas.m
function[b0,B,A]=dir2cas(b,a)
b0=b(1);b=b/b0; a0=a(1);a=a/a0; b0=b0/a0;
M=length(b);N=length(a);
if N>M
b=[b,zeros(1,N-M)]; elseif M>N
a=[a,zeros(1,M-N)];N=M;
end
K=floor(N/2);B=zeros(K,3);A=zeros(K,3);
if K*2==N
b=[b 0];
a=[a 0];
end
broots=cplxpair(roots(b)); aroots=cplxpair(roots(a)); for i=1:2:2*K
Brow=broots(i:1:i 1,:); Brow=real(poly(Brow)); B(fix((i 1)/2),:)=Brow;
Arow=aroots(i:1:i 1,:); Arow=real(poly(Arow)); A(fix((i 1)/2),:)=Arow;
end
结果:
代码语言:javascript复制b0 =
1
B =
1.0000 2.2435 2.9656
1.0000 0.7565 0.3372
A =
1 0 0
1 0 0
程序:
代码语言:javascript复制h=[1,3,5,-3,-1]/9;
[N,Hk,wk]=dir2fs(h)
调用的函数:dir2fs.m
function[N,Hk,wk]=dir2fs(b);
N=length(b); Hk=fft(b); k=0:N-1;
wk=exp(2*pi*i/N).^k;
结果:
代码语言:javascript复制N =
5
Hk =
Columns 1 through 4
0.5556 -0.0000 - 0.9452i 0.0000 0.5841i 0.0000 - 0.5841i
Column 5
-0.0000 0.9452i
wk =
Columns 1 through 4
1.0000 0.3090 0.9511i -0.8090 0.5878i -0.8090 - 0.5878i
Column 5
0.3090 - 0.9511i