《专业课程设计》说明书-基于Matlab含噪声语音信号处理设计.docx_第1页
《专业课程设计》说明书-基于Matlab含噪声语音信号处理设计.docx_第2页
《专业课程设计》说明书-基于Matlab含噪声语音信号处理设计.docx_第3页
《专业课程设计》说明书-基于Matlab含噪声语音信号处理设计.docx_第4页
《专业课程设计》说明书-基于Matlab含噪声语音信号处理设计.docx_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学专业课程设计说明书目 录1软件介绍22语音信号的采集23语音信号的时频与加噪分析23.1 语音信号的时频分析23.2 语音信号的加噪分析24 fir和iir数字滤波器设计24.1 iir数字滤波器设计24.1.1 iir低通滤波器设计24.1.2 iir带通滤波器设计24.1.3 iir高通滤波器设计24.2 fir滤波器设计24.2.1 fir低通滤波器设计24.2.2 fir带通滤波器设计24.2.3 fir高通滤波器设计25 gui设计及滤波结果分析25.1 gui设计25.1.1 控件及界面设计25.1.2 设置回调函数25.2 滤波结果及分析25.2.1 滤波结果图25.2.2 结果分析26 心得体会27 参考文献2351软件介绍matlab是矩阵实验室(matrixlaboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。matlab的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用matlab来解算问题要比用c,fortran等语言完相同的事情简捷得多.当前流行的matlab 5.3/simulink 3.0包括拥有数百个内部函数的主包和三十几种工具包(toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充matlab的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类.开放性使matlab广受用户欢迎.除内部函数外,所有matlab主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其他语言的特点,正如同fortran和c等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为第四代计算机语言的matlab,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。matlab最突出的特点就是简洁。matlab用更直观的,符合人们思维习惯的代码,代替了c和 fortran语言的冗长代码。matlab给用户带来的是最直观,最简洁的程序开发环境。以下简单介绍一下matlab的主要特点。语言简洁紧凑,使用方便灵活,库函数极其丰富。matlab程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。可以说,用matlab进行科技开发是站在专家的肩膀上。2语音信号的采集利用pc 机上的声卡和windows 操作系统可以进行数字信号的采集。将话筒输入计算机的语音输入插口上,启动录音机。按下录音按钮,接着对话筒说话“语音信号处理”,说完后停止录音,屏幕左侧将显示所录声音的长度。点击放音按钮,可以实现所录音的重现。以文件名“555”保存入d: matlab work 中。可以看到,文件存储器的后缀默认为. wav ,这是windows 操作系统规定的声音文件存的标准。3语音信号的时频与加噪分析3.1 语音信号的时频分析matlab软件平台下,利用wavread函数对语音信号进行采样,记住采样频率和采样点数wavread 函数调用格式如下:y=wavread(file)%读取file 所规定的wav 文件,返回采样值放在向量y中。y,fs,nbits=wavread(file) %采样值放在向量y 中,fs 表示采样频率,nbits 表示采样位数。y=wavread(file,n)%读取钱n 点的采样值放在向量y 中。y=wavread(file,n1,n2)%读取从n1 到n2 点的采样值放在向量y 中。对语音信号555.wav 进行采样其程序如下:y,fs,nbits=wavered (555); %把语音信号进行加载入matlab仿真软件平台fs =8000nbits =16首先画出语音信号的时域波形,然后对语音信号进行频谱分析。在matlab中利用fft 对信号进行快速傅里叶变换,得到信号的频谱特性。其程序如下:y,fs,nbits=wavread (555);sound(y,fs,nbits); %回放语音信号n = length (y) ; %求出语音信号的长度y=fft(y,n); %傅里叶变换subplot(2,1,1);plot(y);title(原始信号波形);subplot(2,1,2);plot(abs(y);title(原始信号频谱)程序结果图如下:图 1 原始信号波形与频谱图3.2 语音信号的加噪分析利用matlab中的随机函数(rand或randn)产生噪声加入到语音信号中模仿语音信号被污染并对其频谱分析。其程序如下:y,fs,nbits=wavread (123); n = length (y) ; %求出语音信号的长度 noise=0.07*randn(n,2); %随机函数产生噪声 s=y+noise; %语音信号加入噪声 sound(s,fs,nbits); wavwrite(s,fs,nbits,addnoise) subplot(2,1,1); plot(s);title(加噪语音信号的时域波形); s=fft(s); %傅里叶变换 subplot(2,1,2); plot(0:length(s)-1)/length(s)*8000,abs(s);title(加噪语音信号的频域波形);程序结果图如下:图 2 加噪语音信号波形与频谱图4 fir和iir数字滤波器设计根据语音信号的特点给出有关滤波器的新能指标: 低通滤波器的性能指标fp=1000hz,fc=1200hz,as=100db ,ap=1db 高通滤波器的性能指标fp=4800hz,fc=5000hz,as=100db,ap=1db 带通滤波器的性能指标fp1=1200hz,fp2=3000hz,fc1=1000hz,fc2=3200hz,as=100db,ap=1db在matlab 中,可以利用函数fir1 设计fir 滤波器,利用函数butter,cheby1和ellip 设计iir 滤波器,利用matlab 中的函数freqz 画出各步步器的频率响应。分析如下:函数fir1 默认的设计滤波器的方法为窗函数法其中可选的窗函数有rectangular barlrtt hamming hann blackman 窗其相应的都有实现函数。函数butter,cheby1 和ellip 设计iir 滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。4.1 iir数字滤波器设计4.1.1 iir低通滤波器设计ft=8000;fp=1000;fs=1200;wp=2*pi*fp/ft;ws=2*pi*fs/ft;fp=2*ft*tan(wp/2);fs=2*fs*tan(wp/2);n11,wn11=buttord(wp,ws,1,50,s); %求低通滤波器的阶数和截止频率b11,a11=butter(n11,wn11,s); %求s 域的频率响应的参数num11,den11=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应s 域到z 域的变换h,w=freqz(num11,den11); %根据参数求出频率响应plot(w*8000*0.5/pi,abs(h);legend(用butter 设计);grid图3 iir低通滤波器4.1.2 iir带通滤波器设计fp1=1200;fp2=3000;fs1=1000;fs2=3200;ft=8000;wp1=tan(pi*fp1/ft); %带通到低通滤波器的转换wp2=tan(pi*fp2/ft);ws1=tan(pi*fs1/ft);ws2=tan(pi*fs2/ft);w=wp1*wp2/ws2;bw=wp2-wp1;wp=1;ws=(wp1*wp2-w.2)/(bw*w);n12,wn12=buttord(wp,ws,1,50,s); %求低通滤波器阶数和截止频率b12,a12=butter(n12,wn12,s); %求s 域的频率响应参数num2,den2=lp2bp(b12,a12,sqrt(wp1*wp2),bw);%将s 域低通参数转为带通的num12,den12=bilinear(num2,den2,0.5);%双线性变换频率响应s到z域转换h,w=freqz(num12,den12);%根据参数求出频率响应plot(w*8000*0.5/pi,abs(h);axis(0 4000 0 1.5);grid;图4 iir带通4.1.3 iir高通滤波器设计ft=8000;fp=4000;fs=3500;wp1=tan(pi*fp/ft);%高通到低通滤波器参数转换ws1=tan(pi*fs/ft);wp=1;ws=wp1*wp/ws1;n13,wn13=cheb1ord(wp,ws,1,50,s); %求模拟低通滤波器阶数和截止频率b13,a13=cheby1(n13,1,wn13,s); %求s 域的频率响应的参数num,den=lp2hp(b13,a13,wn13);%将s 域低通参数转为高通的num13,den13=bilinear(num,den,0.5); %双线性变换频率响应s 到z 域转换h,w=freqz(num13,den13);plot(w*21000*0.5/pi,abs(h);title(iir 高通滤波器);axis(0 12000 0 1.5);grid;图5 iir高通滤波器4.2 fir滤波器设计4.2.1 fir低通滤波器设计用窗函数设计低通滤波器的程序如下:ft=8000;fp=1000;fs=1200;wp=2*fp/ft;ws=2*fs/ft;rp=1;rs=50;p=1-10.(-rp/20); %通带阻带波纹s=10.(-rs/20);fpts=wp ws;mag=1 0;dev=p s;n21,wn21,beta,ftype=kaiserord(fpts,mag,dev);b21=fir1(n21,wn21,kaiser(n21+1,beta); %由fir1 设计滤波器h,w=freqz(b21,1); %得到频率响应plot(w/pi,abs(h);title(fir 低通滤波器);grid;图6 fir低通滤波器4.2.2 fir带通滤波器设计fp1=1200;fp2=3000;fs1=1000;fs2=3200;ft=8000;wp1=tan(pi*fp1/ft); %带通到低通滤波器参数转换wp2=tan(pi*fp2/ft);ws1=tan(pi*fs1/ft);ws2=tan(pi*fs2/ft);w=wp1*wp2/ws2;bw=wp2-wp1;wp=1;ws=(wp*wp2-w.2)/(bw*w);n22,wn22=buttord(wp,ws,1,50,s); %求低通滤波器阶数和截止频率b22,a22=butter(n22,wn22,s); %求s 域的频率响应的参数num2,den2=lp2bp(b22,a22,sqrt(wp1*wp2),bw); %将s 域低通参数转为带通num22,den22=bilinear(num2,den2,0.5);%双线性变换实现s 域到z 域的转换h,w=freqz(num22,den22); %根据参数求出频率响应plot(w*8000*0.5/pi,abs(h);axis(0 4000 0 1.5);grid图7 fir带通滤波器4.2.3 fir高通滤波器设计ft=8001;fp=4000;fs=3500;wp=2*fp/ft;ws=2*fs/ft;rp=1;rs=50;p=1-10.(-rp/20); %通带阻带波纹s=10.(-rs/20);fpts=ws wp;mag=0 1;dev=p s;n23,wn23,beta,ftype=kaiserord(fpts,mag,dev);b23=fir1(n23,wn23,high,kaiser(n23+1,beta); %由fir1 设计滤波器h,w=freqz(b23,1); %得到频率响应plot(w*12000*0.5/pi,abs(h);title(fir 高通滤波器);axis(3000 6000 0 1.2);grid图8 fir高通滤波器5 gui设计及滤波结果分析5.1 gui设计5.1.1 控件及界面设计在控件布局设计区放置3个panel控件、7个axes控件、7个text控件、5个pushbutton控件、2个radiobutton控件、1个checkbox控件。界面设置如下:图9 控件版面设计5.1.2 设置回调函数保存后,在gui主窗口点击m-file editor,进入设置回调函数的界面。这里,虽然gui自动生成了回调函数,但是它们都是空的,需要进一步的定义说明。这里需要对5个pushbutton控件的回调函数进行定义说明,将控件的回调函数定义完毕后,整个gui基本设计完毕。% - executes on button press in pushbutton3.低通滤波器设置function pushbutton3_callback(hobject, eventdata, handles)if get(handles.radiobutton1,value) ft=8000; fp=1000; fs=1200; wp=2*pi*fp/ft; ws=2*pi*fs/ft; fp=2*ft*tan(wp/2); fs=2*fs*tan(wp/2); n11,wn11=buttord(wp,ws,1,50,s); %求低通滤波器的阶数和截止频率 b11,a11=butter(n11,wn11,s); %求s 域的频率响应的参数 num11,den11=bilinear(b11,a11,0.5); %双线性变换频率响应s到z域 h,w=freqz(num11,den11); %根据参数求出频率响应 axes(handles.axes7);plot(w*8000*0.5/pi,abs(h);endif get(handles.radiobutton2,value) ft=8000; fp=1000; fs=1200; wp=2*fp/ft; ws=2*fs/ft; rp=1; rs=50; p=1-10.(-rp/20); %通带阻带波纹 s=10.(-rs/20); fpts=wp ws; mag=1 0; dev=p s; n21,wn21,beta,ftype=kaiserord(fpts,mag,dev); b21=fir1(n21,wn21,kaiser(n21+1,beta); %由fir1 设计滤波器 h,w=freqz(b21,1); %得到频率响应 axes(handles.axes7); plot(w/pi,abs(h);endif get(handles.radiobutton1,value) y,fs,nbits=wavread (555); n = length (y) ; %求出语音信号的长度 noise=0.07*randn(n,2); %随机函数产生噪声 s=y+noise; %语音信号加入噪声 s=fft(s); %傅里叶变换 z11=filter(num11,den11,s); if get(handles.checkbox1,value) else sound(z11); end m11=fft(z11); %求滤波后的信号 axes(handles.axes6);plot(abs(m11),r); axes(handles.axes5);plot(z11);endif get(handles.radiobutton2,value) y,fs,nbits=wavread (555); n = length (y) ; %求出语音信号的长度 noise=0.07*randn(n,2); %随机函数产生噪声 s=y+noise; %语音信号加入噪声 s=fft(s); %傅里叶变换 z21=fftfilt(b21,s); if get(handles.checkbox1,value) else sound(z21); end m21=fft(z21); %求滤波后的信号 axes(handles.axes6);plot(abs(m21),r); axes(handles.axes5);plot(z21);end% - executes on button press in pushbutton4.高通滤波器设计function pushbutton4_callback(hobject, eventdata, handles) if get(handles.radiobutton1,value) ft=8000; fp=4000; fs=3500; wp1=tan(pi*fp/ft);%高通到低通滤波器参数转换 ws1=tan(pi*fs/ft); wp=1; ws=wp1*wp/ws1; n13,wn13=cheb1ord(wp,ws,1,50,s); %模拟低通滤波器阶数和截止频率 b13,a13=cheby1(n13,1,wn13,s); %求s 域的频率响应的参数 num,den=lp2hp(b13,a13,wn13);%将s 域低通参数转为高通的 num13,den13=bilinear(num,den,0.5); %双线性变换频率响应s到z域 h,w=freqz(num13,den13); axes(handles.axes7);plot(w*21000*0.5/pi,abs(h);endif get(handles.radiobutton2,value) ft=8001; fp=4000; fs=3500; wp=2*fp/ft; ws=2*fs/ft; rp=1; rs=50; p=1-10.(-rp/20); %通带阻带波纹 s=10.(-rs/20); fpts=ws wp; mag=0 1; dev=p s; n23,wn23,beta,ftype=kaiserord(fpts,mag,dev); b23=fir1(n23,wn23,high,kaiser(n23+1,beta); %由fir1 设计滤波器 h,w=freqz(b23,1); %得到频率响应 axes(handles.axes7);plot(w*12000*0.5/pi,abs(h);endif get(handles.radiobutton1,value) y,fs,nbits=wavread (555); n = length (y) ; %求出语音信号的长度 noise=0.07*randn(n,2); %随机函数产生噪声 s=y+noise; %语音信号加入噪声 s=fft(s); %傅里叶变换 z13=filter(num13,den13,s); if get(handles.checkbox1,value) else sound(z13); end m13=fft(z13); %求滤波后的信号 axes(handles.axes6);plot(abs(m13),r); axes(handles.axes5);plot(z13);endif get(handles.radiobutton2,value) y,fs,nbits=wavread (555); n = length (y) ; %求出语音信号的长度 noise=0.01*randn(n,2); %随机函数产生噪声 s=y+noise; %语音信号加入噪声 s=fft(s); %傅里叶变换 z23=fftfilt(b23,s); if get(handles.checkbox1,value) else sound(z23); end m23=fft(z23); %求滤波后的信号 axes(handles.axes6);plot(abs(m23),r); axes(handles.axes5);plot(z23);end% - executes on button press in pushbutton5.带通滤波器设计function pushbutton5_callback(hobject, eventdata, handles) if get(handles.radiobutton1,value) fp1=1200; fp2=3000; fs1=1000; fs2=3200; ft=8000; wp1=tan(pi*fp1/ft); %带通到低通滤波器的转换 wp2=tan(pi*fp2/ft); ws1=tan(pi*fs1/ft); ws2=tan(pi*fs2/ft); w=wp1*wp2/ws2; bw=wp2-wp1; wp=1; ws=(wp1*wp2-w.2)/(bw*w); n12,wn12=buttord(wp,ws,1,50,s); %求低通滤波器阶数和截止频率 b12,a12=butter(n12,wn12,s); %求s 域的频率响应参数 num2,den2=lp2bp(b12,a12,sqrt(wp1*wp2),bw);% s 域低通参数转带通 num12,den12=bilinear(num2,den2,0.5);%双线性变换频率响应s到z域 h,w=freqz(num12,den12);%根据参数求出频率响应 axes(handles.axes7);plot(w*8000*0.5/pi,abs(h);endif get(handles.radiobutton2,value) fp1=1200; fp2=3000; fs1=1000; fs2=3200; ft=8000; wp1=tan(pi*fp1/ft); %带通到低通滤波器参数转换 wp2=tan(pi*fp2/ft); ws1=tan(pi*fs1/ft); ws2=tan(pi*fs2/ft); w=wp1*wp2/ws2; bw=wp2-wp1; wp=1; ws=(wp*wp2-w.2)/(bw*w); n22,wn22=buttord(wp,ws,1,50,s); %求低通滤波器阶数和截止频率 b22,a22=butter(n22,wn22,s); %求s 域的频率响应的参数 num2,den2=lp2bp(b22,a22,sqrt(wp1*wp2),bw); % s 域低通参数转带通 num22,den22=bilinear(num2,den2,0.5);%双线性变换频率响应s到z域 h,w=freqz(num22,den22); %根据参数求出频率响应 axes(handles.axes7);plot(w*8000*0.5/pi,abs(h);endif get(handles.radiobutton1,value) y,fs,nbits=wavread (555); n = length (y) ; %求出语音信号的长度 noise=0.07*randn(n,2); %随机函数产生噪声 s=y+noise; %语音信号加入噪声 s=fft(s); %傅里叶变换 z12=filter(num12,den12,s); if get(handles.checkbox1,value) else sound(z12); end m12=fft(z12); %求滤波后的信号 axes(handles.axes6);plot(abs(m12),r); axes(handles.axes5);plot(z12);endif get(handles.radiobutton2,value) y,fs,nbits=wavread (555); n = length (y) ; %求出语音信号的长度 noise=0.07*randn(n,2); %随机函数产生噪声 s=y+noise; %语音信号加入噪声 s=fft(s); %傅里叶变换 z23=fftfilt(b22,s); if get(handles.checkbox1,value) else sound(z23); end m23=fft(z23); %求滤波后的信号 axes(handles.axes6);plot(abs(m23),r); axes(handles.axes5);plot(z23);end% - executes on button press in radiobutton1.function radiobutton1_callback(hobject, eventdata, handles)set(handles.radiobutton1,value,1);set(handles.radiobutton2,value,0);% - executes on button press in radiobutton2.function radiobutton2_callback(hobject, eventdata, handles) set(handles.radiobutton1,value,0);set(handles.radiobutton2,value,1);% - executes on button press in pushbutton1.原始信号function pushbutton1_callback(hobject, eventdata, handles) y,fs,nbits=wavread (555); if get(handles.checkbox1,value) else sound(y,fs,nbits); end n = length (y) ; y=fft(y,n); axes(handles.axes1);plot(y); axes(handles.axes2);plot(abs(y);% - executes on button press in pushbutton2.加噪信号function pushbutton2_callback(hobject, eventdata, handles) y,fs,nbits=wavread (555); n = length (y) ; noise=0.07*randn(n,2);s=y+noise; wavwrite(s,fs,nbits,addnoise);if get(handles.checkbox1,value) else sound(s,fs,nbits); ends=fft(s,n); axes(handles.axes3);plot(s); axes(handles.axes4);plot(abs(s);5.2 滤波结果及分析5.2.1 滤波结果图图10 iir低通滤波结果图11 iir高通滤波结果图12 iir带通滤波结果图13 fir低通滤波结果图14 fir高通滤波结果图15 fir带通滤波结果5.2.2 结果分析首先,先看高通滤波的结果。无论是iir还是fir滤波器,滤波后信号时频均与原信号相差很远,耳机中也没有原音。滤波效果极差。其次,到带通滤波的结果。同样的,无论是iir与fir滤波器,滤波后信号十分杂乱,丝毫没有滤出原始信号。最后,是低通滤波结果。从信号波形上看,滤波后波形基本上接近原

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论