一、实验目的
掌握 FIR 数字滤波器的结构,运用窗函数法设计 FIR 数字滤波器
熟练掌握 IIR 数字滤波器的设计方法(模拟低通滤波器,高通带通及带阻滤波器)
二、实验内容
clear;
close all;
N=21;
wc=pi/4; %理想低通滤波器参数
n=0:N-1;
r=(N-1)/2;
hdn=sin(wc*(n-r))/pi./(n-r); %计算理想低通单位脉冲响应hd(n)
if rem(N,2)~=0
hdn(r+1)=wc/pi;
end %N为奇数时,处理n=r点的0/0型
wn1=boxcar(N); %矩形窗
hn1=hdn.*wn1'; %加窗
wn2=hamming(N); %矩形窗
hn2=hdn.*wn2'; %加窗
subplot(3,2,1)
stem(n,hn1,'.') %hn1的茎秆图
line([0,20],[0,0]);
title('矩形窗设计的h(n)');
xlabel('n');ylabel('h(n)');
subplot(3,2,3)
stem(n,hn2,'.') %hn2的茎秆图
line([0,20],[0,0]);
title('hamming窗设计的h(n)');
xlabel('n');ylabel('h(n)');
hn11=fft(hn1,512); %hn1快速傅里叶变换
w=2*[0:511]/512;
subplot(3,2,2)
plot(w,20*log10(abs(hn11)))
grid;
axis([0,2,-80,5]);
title('幅度特性');
xlabel('w/pi');ylabel('幅度(dB)');
hn22=fft(hn2,512); %hn2快速傅里叶变换
subplot(3,2,4)
plot(w,20*log10(abs(hn22)))
grid; %加网格
axis([0,2,-80,5]);
title('幅度特性');
xlabel('w/pi');ylabel('幅度(dB)');
f=[0,0.6,0.6,1];m=[0,0,1,1];
b=fir2(30,f,m);n=0:30; %基于频率采样的FIR数字滤波器
subplot(3,2,5);stem(n,b,'.')
xlabel('n');ylabel('h(n)');
axis([0,30,-0.4,0.5]),line([0,30],[0,0])
[h,w]=freqz(b,1,256); %离散系统频域响应
subplot(3,2,6);plot(w/pi,20*log10(abs(h)));grid
axis([0,1,-80,0]);xlabel('w/pi');ylabel('幅度(dB)');
clear;close all;
wls=0.2*pi;wlp=0.35*pi;whp=0.65*pi;
%输入给定指标
B=wlp-wls;
N=ceil(12/0.15);
n=0:N-1;
wc=[wlp/pi-6/N,whp/pi+6/N];
hn=fir1(N-1,wc,blackman(N));%调用fir1函数进行设计
subplot(1,2,1);stem(n,hn,'.');%求hn单位脉冲响应
xlabel('n');
ylabel('h(n)');
title('单位脉冲响应');
hn11=fft(hn,512); %求设计出的滤波器频率特性
w=2*[0:511]/512;
subplot(1,2,2);plot(w,20*log10(abs(hn11))) %画对数幅频特性图
grid; %加网格
axis([0,2,-100,5]);
title('幅度特性(dB)');
xlabel('w/pi');ylabel('Magnitude(dB)');
clear;close all
% A为系统函数Ha(s)的分母多项式系数行向量
% B为系统函数Ha(s)的分子多项式系数行向量
fp=3400;fs=4000;Rp=3;As=40;
[N,fc]=buttord(fp,fs,Rp,As,'s') %计算阶数N和3dB截止频率fc
[B,A]=butter(N,fc,'s');
[hf,f]=freqs(B,A,1024);%计算模拟滤波器频率响应,freqs为工具箱函数
subplot(3,2,1);
plot(f,20*log10(abs(hf)/abs(hf(1)))) %画对数幅频特性图
grid;xlabel('f/Hz');ylabel('幅度(dB)');
axis([0,4000,-40,5])
line([0,4000],[-3,-3]);
line([3400,3400],[-40,5]);
clear;
close all
b=1000;a=[1,1000];
w=[0:1000*2*pi]; %设定模拟频率
[hf,w]=freqs(b,a,w);%计算模拟滤波器频响函数
subplot(2,3,1) %画出模拟滤波器幅频特性
plot(w/2/pi,abs(hf));
grid;
xlabel('f/(hz)');ylabel('fudu');
Fs0=[1000,500];
for m=1:2
Fs=Fs0(m); %T=0 .001s及T=0 .002s
[d,c]=impinvar(b,a,Fs); %用impinvar函数实现离散化
wd=[0:512]*pi/512; %用bilinear函数实现离散化
hw1=freqz(d,c,wd); %0设定数字归一化频率
subplot(2,3,2) %计算数字滤波器频响函数
plot(wd/pi,abs(hw1)/abs(hw1(1)));hold on;
end
%直接设计带通数字椭圆滤波器
grid;xlabel('f/(hz)');
text(0.52,0.88,'T=0.002s');
text(0.12,0.54,'T=0.001s');
for m=1:2
Fs=Fs0(m);
[f,e]=bilinear(b,a,Fs);
wd=[0:512]*pi/512;
hw2=freqz(f,e,wd);
subplot(2,3,3)
plot(wd/pi,abs(hw2)/abs(hw2(1)));hold on;
end
grid;xlabel('f/(hz)');
text(0.5,0.74,'T=0.002s');
text(0.12,0.34,'T=0.001s');
clear;close all
T=1;wch=pi/2; %T为采样间隔,wch位数字高通3dB截止频率
wlc=0.35*pi;wuc=0.65*pi; %wlc,wuc;数字高通3dB截止频率
B=1;A=[1,2.6131,3.4142,2.6131,1];
[h,w]=freqs(B,A,512); %求原归一化模拟滤波器的频率响应
subplot(3,2,1);plot(w,20*log10(abs(h)));%画模拟滤波器幅频特性
grid;axis([0,10,-90,0])
xlabel('w/pi');ylabel('模拟低通幅度(dB)')
omegach=2*tan(wch/2)/T; %预畸变求模拟高通3dB截止频率
[Bhs,Ahs]=lp2hp(B,A,omegach);%模拟域低通转换为高通系数
[Bhz,Ahz]=bilinear(Bhs,Ahs,1/T); %模拟转换位数字高通系数变量
[h,w]=freqz(Bhz,Ahz,512);%求画出数字滤波器幅频特性
subplot(3,2,3);plot(w/pi,20*log10(abs(h)));
grid;axis([0,1,-150,0])
xlabel('w/pi');ylabel('数字高通幅度(dB)')
omegalc=2*tan(wlc/2)/T; %预畸变求滤波器通带低端截止频率
omegauc=2*tan(wuc/2)/T; %预畸变求滤波器通带高端截止频率
wo=sqrt(omegalc*omegauc);Bw=omegauc-omegalc;
[Bbs,Abs]=lp2bp(B,A,wo,Bw); %模拟域低通转换为带通系数
[Bbz,Abz]=bilinear(Bbs,Abs,1/T); %模拟转换为数字带通系数变量
[h,w]=freqz(Bbz,Abz,512); %求并画出数字滤波器幅频特性
subplot(3,2,4);plot(w/pi,20*log10(abs(h)));
grid;axis([0,1,-150,0])
xlabel('w/pi');ylabel('数字带通幅度(dB)')
三、实验中遇到的问题及解决
- 使用matlab自带的fft函数,注意fft返回的一组复数,包含了频率成分和相位成分,我们要绝对值一把fft的结果。
- IIR和FIR类似,不过进入了反馈机制。即下一次的滤波输出不仅仅和上几次的输入信号有关,还和上几次的输出信号有关。IIR比FIR"效率"更高,通常用更少的系数就可以达到很好的滤波结果,但是IIR也有缺点,由于引入了反馈机制,一些特定的系数组成的IIR滤波器可能不稳定,造成输出结果崩溃。
四、实验提问
IIR 滤波器原理是什么?
输入信号为x(m). 对应的乘以每一个b系数。IIR 滤波器引入了'a' 系数反馈环节。 每一次滤波,上一次的输出也要程序对应的系数a 然后减到本次输出中:
一个三阶IIR滤波器的框图,Z-1可以理解成暂存上一次的一个结果
五、实验总结
通过完成本次实验,让我初步掌握了运用MATLAB处理数字信号,初步掌握了 FIR 数字滤波器的结构,运用窗函数法设计 FIR 数字滤波器 及IIR 数字滤波器的设计方法。
利用MATLAB的强大运算功能,基于MATLAB信号处理工具性的数字滤波器设计法可以快速有效的设计由软件组成的常规数字滤波器,设计方便、快捷,大大地减轻了工作量。在设计过程中可以对比滤波器特性,随时更改参数,以达到滤波器设计的最优化。
收获颇多,激发了我对后续学习的兴趣。