您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 《基于matlab的语音信号的加噪》课程设计
1《信号与系统》课程设计技术报告精简版题目:基于matlab的语音信号的加噪院系:信息工程学院专业:电子信息工程班级:12电本(1)班答辩人:袁明晨队员:彭郑陈东风吴后伟张星宇王俊计太顺2014年6月19日2基于matlab的语音信号的加噪目录1引言················································································31.1、MATLAB简介1.2、背景及意义2设计的目的及内容······························································32.1、设计目的2.2、研究内容2.3、开发环境3设计原理··········································································43.1、语言的录入及处理3.2、时域信号的FFT分析4设计过程及调试分析···························································54.1语音信号的采集及时域图和频谱图图形5遇到的问题及解决方法························································76结束语·············································································77附录:语音加噪源程序························································7参考文献·············································································73一、引言1.1、MATLAB简介Matlab是一套高性能的数值计算和可视化软件,它集数值分析、矩阵计算、信号处理和图形显示于一体,构成了方便、友好的用户界面环境。MATLAB提供的信号处理(signalprocessing)工具箱函数,为数字滤波器的设计和语音信号的处理提供了强有力的工具。Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。信号处理是Matlab重要应用的领域之一。1.2、背景及意义语音信号处理是一门比较实用的电子工程的专业课程,语音是人类获取信息的重要来源和利用信息的重要手段。通过语言相互传递信息是人类最重要的基本功能之一。语言是人类特有的功能,它是创造和记载几千年人类文明史的根本手段,没有语言就没有今天的人类文明。语音是语言的声学表现,是相互传递信息的最重要的手段,是人类最重要、最有效、最常用和最方便的交换信息的形式。语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科,它是一门新兴的学科,同时又是综合性的多学科领域和涉及面很广的交叉学科。二、设计的目的及内容2.1、设计目的4(1)启动和退出matlab;(2)读取语音信号;(3)对语音信号加不同的噪声;(4)显示加噪前后语音时域图和频谱图。2.2、研究内容本论文主要介绍的是的语音信号的简单处理。本论文针对以上问题,运用数字信号学基本原理实现语音信号的处理,在matlab7.1环境下综合运用信号提取,幅频变换以及傅里叶变换、滤波等技术来进行语音信号处理。本文利用windows下的录音机录制一段自己的话音,时间在3s内左右。然后在matlab软件平台下,对语音信号进行加噪之后,设计滤波器进行滤波处理。2.3、开发环境开发环境主要介绍了本系统采用的操作系统、开发语言。(1)操作系统:Windows7(2)开发环境:Matlab2010三、设计原理3.1、语言的录入及处理在MATLAB软件平台下,利用函数wavread()对语音信号采集,并记录采样频率和采样点数。将语音信号转换成计算机能够运算的有限长序列。用FFT(傅里叶变换)对其作谱分析。对信号添加噪声,然后通过窗函数法设计滤波器滤掉该语音信号的噪声,对比滤波前后的语音波形和频谱。3.2、时域信号的FFT分析FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。函数FFT用于序列快速傅立叶变换,其调用格式为y=fft(x),其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,5y是x的FFT且和x相同长度;若x为一矩阵,则y是对矩阵的每一列向量进行FFT。如果x长度是2的幂次方,函数fft执行高速基-2FFT算法,否则fft执行一种混合基的离散傅立叶变换算法,计算速度较慢。函数FFT的另一种调用格式为y=fft(x,N),式中,x,y意义同前,N为正整数。函数执行N点的FFT,若x为向量且长度小于N,则函数将x补零至长度N;若向量x的长度大于N,则函数截短x使之长度为N;若x为矩阵,按相同方法对x进行处理。四、设计过程及调试分析4.1、语音信号的采集及时域图和频谱图图形我利用了Windows下的录音机,时间在2-3s左右。然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。通过wavread函数的使用,学生很快理解了采样频率、采样位数等概念。采集完成后在信号中加入一个单频噪声,设计的任务即为从含噪信号中滤除单频噪声,还原原始信号[5]。源代码如下:[x,fs,bits]=wavread('yuanyin.wav');sound(x,fs,bits);N=length(x);%计算信号x的长度fn=3000;t=0:1/fs:(N-1)/fs;%计算时间范围,样本数除以采样频率x=x(:,1);x=x';y=x+0.1*sin(fn*2*pi*t);sound(y,fs,bits);%应该可以明显听出有尖锐的单频啸叫声之后对录制的语音信号进行频谱分析,用绘图命令分别画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,再画出加噪前后信号的时域和频域波形。X=abs(fft(x));Y=abs(fft(y));%对原始信号和加噪信号进行fft变换6X=X(1:length(X)/2);Y=Y(1:length(Y)/2);%截取前半部分deltaf=fs/2/length(X);%计算频谱的谱线间隔f=0:deltaf:fs/2-deltaf;%计算频谱频率范围从而得到原始语音信号图、原始语音信号幅度谱图、加入噪声后原始语音信号图以及加入噪声后语音信号幅度谱图,如图:0510-1-0.500.51时间(t)幅度原始语音信号0123x10405001000频率(f)幅度谱原始语音信号幅度谱0510-2-1012时间(t)幅度加干扰后的语音信号0123x104050001000015000频率(f)幅度谱加干扰后的语音信号幅度五、遇到的问题及解决方法在课程设计过程中遇到了很多问题,对整个设计影响最大的既是语音调用到MATLAB中,起初因为格式问题,不能被MATLAB所调用,最后找到问题所在,下载了Audacity软件,对语音进行格式的转换,最终能被MATLAB所调用。六结束语在这次的课程设计中,犯了些错误,发现自己还不够认真不够细心以前的知识学习的不是很牢固,但是这次课程设计,不但巩固了以前学的知识,还学习了新内7容,收获颇丰。原来滤去语音中的噪声我们运用自己学到的知识能做到,并更加巩固了MATLAB软件的使用。熟练掌握MATLAB软件的使用是非常重要的,整个课程设计过程中,我们都要用到它。在这个课程设计中我们须利用MATLAB设计各种滤波器。这次做的滤波器要滤去双音频信号中的噪声,觉得很有意思,做了2次的课程设计了,发现什么事当没做之前都会觉得很简单,但是当自己亲自来做的时候就会发现事情并不是想象中的那么简单的。其实用MATLAB软件做实验是要细心的,因为很多的语法和常量变量的定义我们都要仔细,一个不小心看错了或者输入不认真是容易出错误。在发现错误时,问了很多同学也问了老师,当发现错误原因时,很多次都是因为自己的不细心造成。但经过思考并仔细检查,最后得以编译成功。在做实验是一定要小心谨慎,也许一个小小的语法错误和常量变量的定义的错误就造成整个程序出现问题,得不到所需的波形,导致实验结果不正确。这次的设计中老师指出的几个问题,在百度搜索和同学的帮助下解决了,当然也少不了自己的努力和思考。能将自己平时学到的东西能运用到实际中,让理论和实际得以结合还是很不错的。也让我在课程设计中找到了动手的乐趣和思考的快乐,很有成就感。我从这次的课程设计中体会到,什么事都要我们真真正正用心去做了,才会使自己更加成长,没有学习就不可能有实践的机会,没有自己的实践就不会有所突破,希望这次的经历能让我们在以后的学习生活中不断成长。最后,在此衷心地感谢老师和同学对我的帮助,也感谢学校给我们的机会,让我们能够将自己学到的知识运用到实际中。参考文献:《信号与系统》上册高等教育出版社郑君里七附录语音加噪源程序:[x,fs,bits]=wavread('yuanyin.wav');sound(x,fs,bits);N=length(x);%计算信号x的长度fn=3000;8t=0:1/fs:(N-1)/fs;%计算时间范围,样本数除以采样频率x=x(:,1);x=x';y=x+0.1*sin(fn*2*pi*t);sound(y,fs,bits);%应该可以明显听出有尖锐的单频啸叫声X=abs(fft(x));Y=abs(fft(y));%对原始信号和加噪信号进行fft变换X=X(1:length(X)/2);Y=Y(1:length(Y)/2);%截取前半部分deltaf=fs/2/length(X);%计算频谱的谱线间隔f=0:deltaf:fs/2-deltaf;%计算频谱频率范围subplot(2,2,1);plot(t,x);xlabel('时间(t)');ylabel('幅度');title('原始语音信号');subplot(2,2,2);plot(f,X);xlabel('频率(f)');ylabel('幅度谱');title('原始语音信号幅度谱');subplot(2,2,3);plot(t,y);xlabel('时间(t)');ylabel('幅度');title('加干扰后的语音信号');subplot(2,2,4);plot(f,Y);xlabel('频率(f)');ylabel('幅度谱');title('加干扰后的语音信号幅度');
本文标题:《基于matlab的语音信号的加噪》课程设计
链接地址:https://www.777doc.com/doc-5726583 .html