您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于MATLAB的语音信号分析与处理的实验报告
基于MATLAB的语音信号分析与处理的实验报告一.实验目的综合计运用数字信号处理的理论知识进行频谱分析和滤波器设计,通过理论推导得出相应的结论,培养发现问题、分析问题和解决问题的能力。并利用MATLAB作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。此外,还系统的学习和实现对语音信号处理的整体过程,从语音信号的采集到分析、处理、频谱分析、显示和储存。二.实验的基本要求1.进一步学习和巩固MATLAB的使用,掌握MATLAB的程序设计方法。2.掌握在windows环境下语音信号采集的方法。3.掌握数字信号处理的基本概念、基本理论、原理和基本方法。4.掌握MATLAB设计FIR和IIR数字滤波器的方法。5.学会用MATLAB对信号进行分析和处理。三.实验内容录制一段自己的语音信号,(语音信号声音可以理解成由振幅和相位随时间缓慢变化的正弦波构成。人的听觉对声音的感觉特征主要包含在振幅信息中,相位信息一般不起作用。在研究声音的性质时,往往把时域信息(波形图)变换得到它的频域信息(频谱),通过研究频谱和与频谱相关联的特征获得声音的特性。)并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法或者双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号发生的变化;回放语音信号。四.实验的实现(1).语音信号的采集采用windows下的录音机或者手机、其他的软件,录制一段自己的话音,时间控制在一分钟左右;然后在MATLAB软件平台下,利用函数wavread对自己的话音进行采样,记住采样的频率和采样的点数。通过实现wavread函数,理解采样的频率、采样位数等概念。下面介绍wavread的使用方法:Wavread函数调用格式如下:y=wavread(flie),读取file所规定的wav文件,返回采样值放回y中。[y,fs,nbits]=wavread(file),采样值放在向量y中,fs表示采样频率(Hz),nbits表示采样位数。y=wavread(file,N),读取前N点的采样值放在向量y中。y=wavread(file,[N1,N2]),读取从N1点到N2点的采样值放在向量y中。(2)语音信号的频谱分析首先画出语音信号的时域波形,然后对话音信号进行频谱分析。在MATLAB中,可以采用函数fft对信号进行快速傅里叶变换,得到信号的频谱特性,从而加深对频谱特性的理解。其程序如下:[y,Fs,bits]=wavread('d:\声音片段01.wav');%读出信号,采样率和采样位数Sound(y);Y=fft(y,4096);figure(1);subplot(2,2,1);plot(y);title('原时域波形');ylabel('amplitude');xlabel('n');subplot(2,2,2);plot(abs(Y));%对频域取模axis([0,4096,0,3]);%横纵坐标确定title('原频谱特性');%标题ylabel('amplitude');%Y轴显示xlabel('frequency(hz)');%X轴显示程序运行的结果如下图所示:050001000015000-1-0.500.51原时域波形amplituden010002000300040000123原频谱特性amplitudefrequency(hz)(3)设计数字滤波器和画出频率响应根据语音信号的特点给出有关滤波器的性能指标:1..低通滤波器性能指标,fp=1000Hzfc=2000HzAs=100dbAp=1db用巴特沃斯滤设计的低通滤波器的程序如下:wp=2*1200/8000;%归一化通带数字频率wpws=2*2000/8000;%归一化阻带数字截止频率wsRp=0.5;%通带波纹系数RpRs=60;%最小阻带衰减Rs[N,Wn]=buttord(wp,ws,Rp,Rs);%求阶数N和滤波器截止频率Wn[num,den]=butter(N,Rp);%传输分子和分母的系数[h,w]=freqz(num,den);%求频率响应subplot(2,1,1);%窗口分成2行1列绘图区,第1个区为当前活动区plot(w/pi,abs(h));%二维连续图形grid;%添加网格title('巴特沃思型低通滤波器的幅频响应');%加图形说明xlabel('\omega/\pi');%加X轴说明(/后表示转义字符)ylabel('振幅(幅值)');%加Y轴说明subplot(2,1,2);%窗口分成2行1列绘图区,第2个区为当前活动区plot(w/pi,20*log10(abs(h)));%二维连续图形grid;%添加网格title('巴特沃思型低通滤波器的幅频响应');%加图形说明xlabel('\omega/\pi');%加X轴说明(/后表示转义字符)ylabel('振幅(分贝)');%加Y轴说明程序运行00.10.20.30.40.50.60.70.80.9100.511.5巴特沃思型低通滤波器的幅频响应/振幅(幅值)00.10.20.30.40.50.60.70.80.91-400-2000200巴特沃思型低通滤波器的幅频响应/振幅(分贝)(4)用滤波器对信号进行滤波比较两种滤波器的性能,然后用性能较好的滤波器对采集的信号进行滤波。在MATLAB中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。应用以上滤波器对信号进行滤波:fs=8000;y=wavread('d:\jingjiangxueyuan.wav');%读取原始语音信号f=filter(num,den,y);%滤波f1=fft(f,7000);subplot(2,1,1)plot(abs(f1));%画出滤波后的时域图title('滤波后的幅度谱');grid;subplot(2,1,2)plot(angle(f1));%画出滤波后的时域图title('滤波后的相位谱');grid;wavwrite(f,fs,'d:\jingjiangxueyuan1.wav');其图形如图:01000200030004000500060007000050100150200250滤波后的幅度谱01000200030004000500060007000-4-2024滤波后的相位谱(5)比较滤波前后语音信号的波形及频谱把处理后的所有数据存储为声音文件,与原始声音进行比较比较程序如下:fs=8000;y=wavread('d:\jingjiangxueyuan.wav');%读取原始语音信号y1=wavread('d:\jingjiangxueyuan1.wav');%读取滤波后语音信号yx=fft(y);yx1=fft(y1);subplot(2,1,1)plot(20*log10(abs(yx)));title('滤波前的相对幅度谱');subplot(2,1,2);plot(20*log10(abs(yx1)));title('滤波后的相对幅度谱');滤波前后的幅度谱如下:020004000600080001000012000-100-50050滤波前的相对幅度谱020004000600080001000012000-50050滤波后的相对幅度谱说明:比较上里两个图可以看出,幅度谱走向大致一样,但滤波后的幅度明显不一样,中间频率的幅度为恒定不变,可能的原因为,滤波器设计不符合要求,或者是因为录音的时候过于偏高或者偏低;由上两图可以看出,经过滤波器后的幅度谱没有原来的清晰,原因应该是,滤波器把高频的部分滤掉了,声音比较低沉。(6)回放语音信号在MATLAB中,函数sound可以对声音进行回放。其调用格式为:sound(x,fs,bits)可以感觉滤波前后的声音的变化。五.实验总结及感想《数字信号处理》课程是一门理论性和实践性都很强,它具备高等代数、数值分析、概率统计、随机过程等计算学科的知识;要求我们学生掌握扎实的基础知识和理论基础。由数字信号处理课本中的绪论中我们可以知道这门学科又是跟其他学科密切相关,即与通信理论、计算机、微电子技术不可分,又是人工智能、模式识别、神经网络等新兴学科的理论基础之一。这次实验是用学过的数字信号理论为依据,用MATLAB代码实现,通过这几次的实验,感触特别多,也学到了很多东西。首先,为了完成这次的课程设计,在图书馆翻阅了很多有关这次设计的参考书,对这些参考书的有关内容都做了认真的分析,了解了一些函数的用法。其次,通过本次的实验,使我们对信号的采集,处理,传输,显示,存储和分析等有一个系统的掌握和理解。同时可以看到滤波器在语音处理的重要性,学到了很多滤波器的设计方法,对MATLAB这个软件有了进一步的了解,学了会用MATLAB对信号进行分析和处理。通过综合运用数字信号处理的理论知识进行频谱分析和滤波器设计,通过理论推导得出相应结论,再利用MATLAB作为编程工具进行计算机实现,从而加深了对所学知识的理解,建立概念。对以前在课本上所学的东西有了更深入的理解和掌握。同时在设计过程中遇到许多问题都是在平时的过程中所未接触到的,尤其是在使用MATLAB的相关程序对语音信号的录制和处理的函数都需要我们自己去查找资料,这加强了我们的动手能力和自觉性,巩固和运用在数字信号处理课程中所学的理论知识和实验技能,掌握最基本的数字信号处理的理论和方法,提高了自己的发现问题,分析问题和解决问题的能力。再次,在做实验的过程中会遇到很多的困难,在困难面前不要放弃,只要有细心和耐心,坚持下去会达到想要的设计结果。最后,无论做什么样的实验,都需要要有一定的理论知识作为基础,同时通过这次实验,我对于以前所学的数字信号处理知识有了更深的理解。当然这次实验也暴露了我的一些问题,比如学习程序设计教程不够快,虽然MATLAB使用的语言和语法都继承于C语言,但还是花了不少时间学习其中的函数,最后才能把实验顺利完成。我相信只要通过自己的努力,没有什么可以难倒我的。六.参考文献[1].高西金、丁玉美等《数字信号处理第三版》西安电子科技大学出版社。[2]程佩青.数字信号处理(第2版)[M].北京:清华大学出版社,2003[3]王济.MATLAB在振动信号处理中的应用.北京:中国水利水电出版社、知识产权出版社,2006[4]张志涌.精通MATLAB6.5版[M].北京:北京航空航天大学出版社,2004[5]候正信译.数字信号处理基础.北京:电子工业出版社,2003[6]南利平等.通信原理简明教程(第2版).北京:清华大学出版社.2009[7]郑君里等.信号与系统(第二版).北京:高等教育出版社.2000
本文标题:基于MATLAB的语音信号分析与处理的实验报告
链接地址:https://www.777doc.com/doc-5646452 .html