《2022年课程方案MatlabFIR滤波器方案与仿真》由会员分享,可在线阅读,更多相关《2022年课程方案MatlabFIR滤波器方案与仿真(13页珍藏版)》请在金锄头文库上搜索。
1、个人资料整理仅限学习使用基于 Matlab 的 FIR 滤波器设计与仿真实验地点:实验日期: 7 月 13 日至 7月 18日一、实验目的1、掌握基本的MATLAB 编程方法;2、理解 FIR 滤波器的设计原理;3、学会用MATLAB 来编程实现FIR 滤波器;4、掌握基本的simulink交互式仿真,并对FIR 滤波器模型并进行仿真;5、学会对所得的结果进行分析。二、实验内容1、制作数据源:用电脑采集或用软件截取5 至 10 秒的语音 2、信号中混入随机噪声( 注意信噪比,噪声强度不要太大:事先取一个参考值为0,再取噪声的方差,方差的取值是根据原始语音的幅度取的噪声,噪声强度不宜过大或过小,
2、适中即可。然后通过 randn(size(a .* sqrt(noise_var + noise_mu。语句产生与原始语音长度相同的随机噪声,最后把这个噪声添加到原始语音中,得到加噪语音信号。3、设计一个FIR 滤波器对前面的混合信号进行处理、降低噪声,并对性能进行分析:有限长单位冲激响应( FIR 数字滤波器具有严格的线性相位, 又具有任意的幅频特性。同时 FIR 系统只有零点, 系统是稳定的, 因而容易实现线性相位和允许实现多通道滤波器。只要经过一定的延时, 任何非因果有限长序列都能变成因果的有限长序列, 因而总能用因果系统来实现。FIR 滤波器由于单位冲激响应是有限长的, 可以用快速傅立
3、叶变换( FFT 算法来实现过滤信号, 从而大大提高运算效率。由于FIR 滤波器具有以上优点, 在信号处理和数据传输中得到了广泛的应用。运用窗函数设计滤波器是FIR 数字滤波器设计的主要方法之一 , 由于运算简单, 又有闭合形式的公式可循 , 因而很实用。有限长 FIR数字滤波器的设计方法主要是窗函数设计法。常用的窗函数有以下几种, 矩形窗 , 三角窗, 汉宁窗 , 海明窗 , 布拉克曼窗 , 凯泽窗( =7. 865 ,各种窗函数基本参数比较如下表1 。由表1 得矩形窗虽然简便,但存在明显的吉布斯效应,主瓣和第一旁瓣之比只有13dB,为了克服这些缺陷,设计时可根据给定的滤波器技术指标,选择滤
4、波器长度M 和窗函数w(n,精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 13 页个人资料整理仅限学习使用使其具有最窄宽度的主瓣和最小旁瓣4、用 Simulink设计 FIR 滤波器模型并进行仿真,所得结果进行分析:Simulink创建模型并寻找解决实际问题的方法,可以用它轻松地搭建一个系统模型,并设置模型参数和仿真参数。由于Simulink是交互式的应用程序,因此在仿真过程中,可以在线修改仿真参数,并立即观察到改变后的仿真结果。本文将介绍在Simulink环境下应用数字滤波器设计模块进行信号处理滤波)的可视化设计技术。由于调用了Ma
5、tlab 高度集成化和可视化的计算机仿真环境,用户可以不用编写任何程序语句,仅仅通过鼠标拖放和点击操作,就可完成复杂的数字滤波器的设计工作。下面通过一个应用示例介绍这种基于可视化的信号滤波技术,用数字滤波器设计模块 。% 读入语音a=a(:,1。从中我们知道fs 语音的采样频率。2、信号中混入随机噪声:noise_mu = 0 。noise_var =0.005。a0= randn(size(a .* sqrt(noise_var + noise_mu。a1=a+a0。事先取一个参考值为0,再取噪声的方差为0.005 ,0.005是根据原始语音的幅度取的噪声 , 噪 声 强 度 不 宜 过 大
6、 或 过 小 , 适 中 即 可 。 然 后 通 过randn(size(a .* sqrt(noise_var + noise_mu。语句产生与原始语音长度相同的随机噪声,最后把这个噪声添加到原始语音中,得到a1 是信号中混入随机噪声的的语音。3、设计一个FIR 滤波器:3.1 、FIR 滤波器设计的原理:先对原始语音进行FFT 变换,从FFT 图中得到passband 和 stopband 从中我们可以知道了 FIR 滤波器的截止频率。确定我们选择是用低通,高通还是带通来处理加噪语音。然后我们通过:fedge=input(Band edges in Hz=。mval=input(Desir
7、ed magnitude values in each band=。dev=input(Desired ripple in each band=。FT=input(Sampling frequency in Hz=。输入从 FFT上得到的数据,passband 和 stopband ,低通或高通,带通,通带纹波和阻带纹波,以及从wavread 函数中得到的采样频率fs 。通过:N,fpts,mag,wt=remezord(fedge,mval,dev,FT。b=remez(N,fpts,mag,wt。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第
8、2 页,共 13 页个人资料整理仅限学习使用产生滤波器的阶数N和滤波器的系数b。然后把加噪的语音a1 与 b 进行卷积: a11=conv(b,a1 得到的是滤波后的语音信号。3.2 、FIR 滤波器设计的程序:a,fs=wavread(现在语音处理技术.wav 。% 读入宁波大学语音a=a(:,1。FS=length(a 。f=0:fs/FS:(FS-1*fs/FS。% 进行 FFT变换x=fft(a。figure(1 plot(f,abs(x。 title(原始信号 a 的 fft图 。axis(0 45000 0 1000。xlabel(f。ylabel(abs(x。grid on。%
9、设置 FIR 滤波器format long fedge=input(Band edges in Hz=。mval=input(Desired magnitude values in each band=。dev=input(Desired ripple in each band=。FT=input(Sampling frequency in Hz=。N,fpts,mag,wt=remezord(fedge,mval,dev,FT。b=remez(N,fpts,mag,wt。disp(FIR Filter Coefficients。disp(b h,w=freqz(b,1,256。% 画出幅频特
10、性figure(2 subplot(2,1,1。plot(w/pi,20*log10(abs(h。title(幅频特性 。xlabel(omega/pi。ylabel(Gain,dB。grid on。% 画出相频特性subplot(2,1,2 pha=angle(h 。 %得到相位plot(w/pi,pha。 title(相频特性 。xlabel(omega/pi。ylabel(phase(Rad。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 13 页个人资料整理仅限学习使用% 原始语音信号图ts=1/fs。ta=(length(a-
11、1/fs。t=0:ts:ta。figure(3 subplot(3,1,1。plot(t,a。 title(原始信号a 。xlabel(t。ylabel(a。grid on。% 添加随机噪声noise_mu = 0 。noise_var =0.005。a0= randn(size(a .* sqrt(noise_var + noise_mu。a1=a+a0。% 在原始信号上加随机噪声的信号图subplot(3,1,2。plot(t,a1。title(在原始信号上加上噪声信号a1 。xlabel(t。ylabel(a1。grid on。% 求卷积a11=conv(b,a1 。% 经过滤波器后的信
12、号图M=(length(a11-1/fs。m=0:ts:M 。subplot(3,1,3。plot(m,a11。title(经过滤波器后的信号a11 。xlabel(m。ylabel(a11。grid on。3.3 、FIR 滤波器设计的结果及分析:3.31. 读入原始语音:a,fs=wavread(现代语音处理技术.wav 。% 读入语音a=a(:,1。fs 结果: fs = 44100 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 13 页个人资料整理仅限学习使用3.32. 运行以上程序,得到图形以及数据如下:Figure1 :原
13、始语音信号的FFT图:从中我们知道passband Fp=2000,stopband Fs=5000,我们采用低通滤波器1 0,已知 fs=44100 ,则我们可以在命令窗口输入以下数据,并按回车键结束。Band edges in Hz=2000 5000 Desired magnitude values in each band=1 0 Desired ripple in each band=0.015 0.01 Sampling frequency in Hz=44100Figure2:Figure2 :FIR 滤波器的幅频特性和相频特性图:精选学习资料 - - - - - - - - -
14、 名师归纳总结 - - - - - - -第 5 页,共 13 页个人资料整理仅限学习使用Figure3 :原始语音 a,加噪语音 a1,滤波语音 a11 的图形:输出的滤波器的系数如下:FIR Filter Coefficients Columns 1 through 4 0.00620663342537 -0.00299477157558 -0.00753465899428 -0.01357686587944 Columns 5 through 8 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 13 页个人资料整理仅限学习使用 -
15、0.01888688837353 -0.02058093395962 -0.01577417564722 -0.00239398901676 Columns 9 through 12 0.02001592066194 0.04984757639435 0.08342687932906 0.11568130477741 Columns 13 through 16 0.14112694375638 0.15514195779351 0.15514195779351 0.14112694375638 Columns 17 through 20 0.11568130477741 0.083426879
16、32906 0.04984757639435 0.02001592066194 Columns 21 through 24 -0.00239398901676 -0.01577417564722 -0.02058093395962 -0.01888688837353 Columns 25 through 28 -0.01357686587944 -0.00753465899428 -0.00299477157558 0.00620663342537从上面的滤波效果来看,这个低通滤波器的效果还不错,基本上能把原始语音的滤波出来,虽然不能做到很好的把噪声滤除,但是在语音的听觉效果上分辩不出与原始语
17、音有何差别,效果还是不错的。4、用 Simulink设计 FIR 滤波器模型并进行仿真,所得结果进行分析因为滤波器的阶数是N=27阶,则我通过Simulink设计了一个27 阶的滤波器,其图形如下,下图是simulink总的设计模型,其中我们可以看到示波器可以显示三路的波形,第一路是原始语音信号的波形,第二路是加噪语音信号的波形,第三路是加噪语音信号进过滤波后的语音信号输出,通过三路波形的同时显示我们可以很好的比较原始语音信号与滤波后的语音信号之间的差别,从而可以判断滤波器的滤波效果是否合格。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,
18、共 13 页个人资料整理仅限学习使用上图的 Filter滤波器是下图所示的子系统封装得到的,该子系统设计了阶数为27 阶的 FIR 滤波器,其中的滤波器系数是上面用MATLAB 实现滤波器设计得到的滤波器的系数,共有 28 个。我设计的simulink模型如下图所示:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 13 页个人资料整理仅限学习使用精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 13 页个人资料整理仅限学习使用原始语音的 from workspace设置如下:其中D
19、ata 为t ,a,Sample time为ts, 并且当数据处理完后,其最后的输出数据置零。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 13 页个人资料整理仅限学习使用加噪原始语音的from workspace设置如下:其中Data 为t ,a1,Sample time 为 ts, 并且当数据处理完后,其最后的输出数据置零。在运行 simulink之前,我对 simulink的参数设置如下:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 13 页个人资料整理仅限学习使用
20、用 simulink进行仿真的结果如下:从仿真的结果我们可以看到,原始语音,加噪语音,以及滤波后的语音。从中我们可以看出 FIR 滤波器对加噪语音有一定的滤波效果,滤波出的语音与原始语音比较接近,如果从听觉角度去分析,我们很难分辩这两种语音之间的差别,所以这个FIR 滤波器在一定程度上对语音的滤波效果是不错的。四、实验体会:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 13 页个人资料整理仅限学习使用本次实验我在对MATLAB 了解的基础上更好的,更熟练的应用MATLAB 来编程实现FIR 滤波器设计,以及学会用simulink来设
21、计 FIR 滤波器,仿真实现滤波效果。这个实验一开始我只具备基本的MATLAB 知识和相关的FIR 滤波器的设计原理。开始用MATLAB 来编程实现对我来说还是有点难度的,但是通过查看相关资料以及认真的阅读老师提供的资料,我慢慢的对实现FIR 滤波器设计有了初步的程序轮廓,然后我花了将近一天的时间来编程,中间出现过很多困难,都是自己对函数的使用不熟悉,但在老师的帮助下我都逐个解决了,并最后实现FIR 滤波器功能,对加噪语音进行滤波,输出的语音与原始语音在听觉效果上分辨不出有何差别,很好的实现了滤波效果。用MATLAB 来编程实现滤波器之后,我通过阅读老师提供的资料掌握了Simulink交互式设计的方法,用Simulink来设计FIR 滤波器模型并进行仿真,滤波出的语音与原始语音比较接近,从听觉角度去分析,我们很难分辩这两种语音之间的差别,所以这个FIR 滤波器在一定程度上对语音的滤波效果是不错的。这次实验让我感觉收获很多,我希望下个实验我更努力,收获更多。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 13 页