@数字处理仿真与应用实验二:模拟低通 Butterworth 滤波器 IIR 滤波器(Matlab)
这学期数字处理仿真与应用实验的记录
不多说,进入正题吧~
实验要求
利用模拟滤波器原型设计 IIR 滤波器,即设计一模拟低通 Butterworth 滤波器,
要求:
通带截止频率: fp =5000Hz 带内最大衰减:Rp =3dB
阻带截止频率: fs =10000Hz 带内最小衰减:Rs =60dB
实验准备
设置滤波器参数
1.打开filter Designer
2.设置滤波器参数如图
3.保存文件为d.m (这个名字是自己随便命名的哦!!!)
实验代码
d为通过matlab的filter designer 设计的巴特沃斯低通滤波器生成的.m文件里面的内容
function Hd = d%D Returns a discrete-time filter object.% MATLAB Code% Generated by MATLAB(R) 9.5 and DSP System Toolbox 9.7.% Generated on: 22-May- 19:15:31% Butterworth Lowpass filter designed using FDESIGN.LOWPASS.% All frequency values are in Hz.Fs = 48000; % Sampling FrequencyFpass = 5000; % Passband FrequencyFstop = 10000; % Stopband FrequencyApass = 3; % Passband Ripple (dB)Astop = 60;% Stopband Attenuation (dB)match = 'stopband'; % Band to match exactly% Construct an FDESIGN object and call its BUTTER method.h = fdesign.lowpass(Fpass, Fstop, Apass, Astop, Fs);Hd = design(h, 'butter', 'MatchExactly', match);% [EOF]
%---------------------%%------数字信号处理仿真第二次实验------%%---------------------%%程序功能:%----------1.利用模拟滤波器原型设计 IIR 滤波器,即设计一模拟低通 Butterworth 滤波器,%------------要求: 通带截止频率: fp =5000Hz 带内最大衰减:Rp =3dB 阻带截止频率: fs =10000Hz 带内最小衰减:Rs =60dB%参考文献:《信号处理matlab》%编程人员:就酱%编程更新时间:5月22日
clc;clear all;close all;%-----------参数设置------------%N=1000;Fs=50000;T=1/Fs;Tp=N*T;t=0:T:(N-1)*T;k=0:N-1; f=k/Tp;f_1=4000; f_2=9000; xt1=3*cos(2*pi*f_1*t+0.5); xt2=4*cos(2*pi*f_2*t+0.8); %-----------原信号------------%y=xt1+xt2;subplot(421);plot(t,y,'m');grid on;title('图一:原信号的波形');xlabel('t/s');ylabel('y(t)');fxt=fft(y,N);subplot(422);stem(f,abs(fxt)/max(abs(fxt)),'m');grid on;axis([0,max(f),0,1.5]);title('图二:原信号的频谱');xlabel('f/Hz');ylabel('幅度');%-----------通过巴特沃斯低通滤波后的信号----------%y_out=filter(d,y);% 注意哦: d为通过matlab的filter designer 设计的巴特沃斯低通滤波器生成的.m文件% 注意哦: d为通过matlab的filter designer 设计的巴特沃斯低通滤波器生成的.m文件% 注意哦: d为通过matlab的filter designer 设计的巴特沃斯低通滤波器生成的.m文件subplot(423);plot(t,y_out,'m'); grid on; title('图三:巴特沃斯低通滤波后的波形');xlabel('t/s');ylabel('y.out(t)');fout = fft(y_out);subplot(424);stem(abs(fout),'m');grid on; title('图四:巴特沃斯低通滤波后的频谱');xlabel('f/Hz');ylabel('幅度');%-----------高斯白噪声------------%y1 = wgn(100,1,0);subplot(425);plot(y1,'m');grid on;title('图五:高斯白噪声的波形');YfreqDomain = fft(y1);subplot(426);stem(abs(YfreqDomain),'m');grid on;title('图六:高斯白噪声的频谱');%-----------加噪声后通过滤波器------------%y1_out=filter(d,y1);subplot(427);plot(y1_out,'m'); grid on;title('图七:加噪声滤波后波形');xlabel('t/s');ylabel('y1.out(t)');Y1_f = fft(y1_out);subplot(428);stem(abs(Y1_f),'m');grid on;title('图八:噪声滤波后的频谱');xlabel('f/Hz');ylabel('幅度');
实验结果
实验结果分析
图一为生成的原始信号波形 ,图二为原始信号的频谱,可以看出有四个突起
图三为巴特沃斯低通滤波后的波形,可以看出毛刺明显减少
图四为巴特沃斯低通滤波后的频谱,可以看到已经滤除两个高频成分
图五为高斯白噪声的波形,图六为高斯白噪声的频谱
图七为加噪声滤波后波形,可以看出平滑不少
图八为噪声滤波后的频谱,可以看出频谱的曲线与最开始设计的滤波器的幅频响应的曲线相似。
实验总结(口水话)
这次实验是耗时最久的一个实验,原因在于要克服以下几个难点
1.设计滤波器
在于刚开始没有仔细读实验指导书,没有看到是要求用matlab自带的滤波器设计器来完成对滤波器的设计,网上找了很多巴特沃斯低通滤波器的设计,已经将程序编好了。这个时候才看到指导书说要用滤波器设计器来搞,又在网上百度了很久如何使用,可是还是不会调用在.m 文件中,最后问的同学才搞定的
吸取了教训,以后先认真看了实验指导书再动手写程序,要不然做完了又重新来一道,太恼火了!
2.加高斯白噪声
这个完全是百度来的,还是用了一点时间来消化这个函数的运用的
3.细节处理
本次实验我打算用8个图像来验证,在标题呀,栅格呀,横轴坐标的表示上就需要多加仔细,需要多多注重细节。
总的来说本次实验是上学期数字信号处理的学过的内容,可是经过一学期基本都忘光了,重新看到滤波器设计的原理的时候还是回想起来一点点,然后百度一下函数怎么使用,还是可以完成本次实验的。