disp(['线性相位斜率为',num2str(beta)]) delta_w=2*pi/1000;
w_kai=(kaiser(M,beta)); %调用窗函数 wc=(ws+wp)/2; r=(M-1)/2; n=[0:1:(M-1)]; m=n-r+eps;
hd=sin(wc*m)./(pi*m);%求理想脉冲响应 h=hd.*w_kai';%加窗 stem(n,w_kai); title('凯泽窗 '); axis([0 M-1 0 1.1]); ylabel('w(n)');
2.3.3 结果截图 IIR DF设计
FIR DF设计
11
2.4 数字滤波 2.4.1 说明
利用步骤3得到的滤波系数,对测试信号进行数字滤波。 (3)IIR DF:要求通过差分过程迭代实现滤波(未知初值置零处理);
(4)FIR DF:要求通过快速卷积实现滤波(对于长序列,可以选择使用重叠相加或重叠保留法进行卷积运算)。 用双线性变换法设计无限脉冲响应数字滤波器(IIF DF)时,先把数字滤波器指标转换成模拟滤波器的指标,然后根据模拟滤波器的指标设计模拟滤波器,再经过线性变换把模拟滤波器转换成数字滤波器。该系统要能够设计巴特沃兹型低通、带通、高通滤波器,并能够输入数字滤波器的性能指标,显示出滤波器的阶数和系数。该系统的关键部分是滤波器的设计部分,按照双线性变换法设计滤波器的步骤进行设计即可。
2.4.2 源代码
%IIR DF设计:
%Step1:产生含有3个正弦分量的信号
Fs=20000; t=(1:100)/Fs; %抽样频率、时间轴
s1=100*sin(2*pi*t*2000);s2=100*sin(2*pi*t*5000);s3=sin(2*pi*t*8000); s=s1+s2+s3; subplot(511); %组成信号、指定图形位置 plot(t,s);title(' 原始信号');
xlabel('时间(s)' ); ylabel('信号波形' ); %Step2:产生一个4阶IIR带通滤波器 %通带为100Hz到200Hz,并得出其幅频响应
[b,a]=ellip(2,0.5,20,[1000,2500]*2/Fs); %得到滤波器的系数矩阵
12
[H,w]=freqz (b,a,512); %H为滤波器的系统函数 subplot(512); plot(w*Fs/(2*pi),abs(H)); title('IIR带通滤波器幅频响应' );
xlabel(' 频率(Hz)' );ylabel(' 幅度' ); axis([0 10000 0 1.5]); %Step3:对原始信号进行滤波
sf=filter(b,a,s); %用设计的滤波器过滤原始信号 subplot(513);plot(t,sf); title(' 滤波后的信号波形' );
xlabel(' 时间(s)' ); ylabel(' 信号波形' ); axis([0 0.001 -150 150]);
%Step4:绘出信号滤波前、后的幅频图
S=fft(s,512); %求出原始信号的傅立叶变换 SF=fft(sf,512); %求出过滤后信号的傅立叶变换 w=(0:255)/256*(Fs/2); subplot(514);
plot(w,abs([S(1:256)' ,SF(1:256)' ])); title(' 滤波前、后的幅频图' ); xlabel(' 频率(Hz)' ); ylabel(' 幅度' ); grid;
legend({' 滤波前的幅频' ,' 滤波后的幅频' }) subplot(515);
plot(w,angle([S(1:256)' ,SF(1:256)' ])); title(' 滤波前、后的相频图' ); xlabel(' 频率(Hz)' ); ylabel(' 相位' ); grid;
legend({' 滤波前的相频' ,' 滤波后的相频' })
%FIR DF设计: As=70;
ws=0.2* pi; wp=0.3* pi; tr_width=wp-ws;
M=ceil((As-7.95)*2*pi/14.36./tr_width+1)+1; disp(['滤波器的长度为',num2str(M)]); beta=0.1102*(As-8.7); n=[0:1:M-1];
disp(['线性相位斜率为',num2str(beta)]) delta_w=2*pi/1000;
w_kai=(kaiser(M,beta)); %调用窗函数 wc=(ws+wp)/2; r=(M-1)/2; n=[0:1:(M-1)];
13
m=n-r+eps;
hd=sin(wc*m)./(pi*m);%求理想脉冲响应 h=hd.*w_kai';%加窗 stem(n,w_kai); title('凯泽窗 '); axis([0 M-1 0 1.1]); ylabel('w(n)');
fs=1000;
t=0:1/20000:2;
x=100*sin(2*pi*2000*t)+100*sin(2*pi*5000*t)+100*sin(2*pi*8000*t); x1=filter(h,2,x);%对信号进行滤波 figure;
n=5000:5100; subplot(211); t=n/fs;
plot(t,x(n));
title('原始信号'); subplot(212); plot(t,x1(n));
title('滤波后的信号');
2.4.3 结果截图 IIR DF
14
FIR DF
15