matlab课程设计 2.docx
《matlab课程设计 2.docx》由会员分享,可在线阅读,更多相关《matlab课程设计 2.docx(21页珍藏版)》请在冰豆网上搜索。
matlab课程设计2
课程设计任务书
学生姓名:
专业班级:
指导教师:
刘新华工作单位:
信息工程学院
题目:
运用MATLAB对语音信号的清音、浊音进行分析
1要求完成的主要任务:
对录制的语音信号进行读取,绘制其频谱,区分出清音、浊音
1.课程设计的目的:
课程设计的目的之一是为了巩固课堂理论学习,并能用所学理论知识正确分析信号处理的基本问题和解释信号处理的基本现象。
课程设计的目的之二是通过设计具体的语音信号变换掌握语音信号处理的方法和步骤。
时间安排:
序
号
阶段内容
所需时间
1
方案设计
2天
2
软件设计
3天
3
系统调试
2天
4
答辩
1天
合计
8天
指导教师签名:
年月日
系主任(或责任教师)签字:
年月日
目录
摘要I
AbstrctII
1引言-1-
2语音信号的采集-2-
2.1语音采集的准备工作-2-
2.2语音信号的预处理工作-2-
3利用MATLAB进行语音信号的分析处理-3-
3.1利用软件进行声音文件的读取-3-
3.2清音浊音的区分处理-5-
4心得体会-12-
参考文献:
-13-
附件:
MATLAB程序-14-
摘要
语音信号处理是研究数字信号处理技术对语音信号进行处理的一门学科。
而MATLAB又是分析语音信号的有力工具。
语音信号处理与我们的生活息息相关,本设计运用MATLAB对语音信号的清音、浊音进行分析。
利用MATLAB提供的各种强大的功能,可以很方便的对语音信号进行分析处理,极大的方便了我们的学习研究,本文就自己如何运用MATLAB进行语音信号分析处理进行说明。
语音是人类最重要、最有效、最常用和最方便的交换信息的方式。
通过语音我们可以很方便的进行交流,但是就单单语音的传输就是很不方便的,需要对语音信号进行分析和处理,以便于信号的后期处理。
本课程设计就语音信号的清音、浊音进行分析,使用MATLAB的一些功能,对录制的语音信号进行读取,绘制其频谱,区分出清音、浊音,其中用到了预加重处理,加窗处理,以及短时能量、短时过零率、短时自相关函数和短时平均幅度差函数等函数,利用这些,可以很方便的区分出所录制语音信号中的清音和浊音成分。
关键字:
语音信号处理读取绘制
Abstrct
Speechsignalprocessingisasubjectofstudyontheprocessingtechnologyfordigitalsignalprocessingofspeechsignal.MATLABisapowerfultoolfortheanalysisofspeechsignal.Speechsignalprocessingiscloselylinkedwithourlife,theuseofMATLABdesignofspeechsignal,andvoicedanalysis.MATLABfortheuseofpowerfulfunctions,whichisconvenientfortheanalysisprocessingofspeechsignals,greatlyfacilitatethelearningofourresearch,thisarticleitselfhowtouseMATLABforspeechsignalanalysisandprocessingaredescribed.
Speechistheexchangeofinformationthemostimportant,themosteffective,themostcommonlyusedandmostconvenientway.Throughthevoicewecaneasilycommunicate,butonlythevoicetransmissionisveryinconvenient,theneedforanalysisandprocessingofspeechsignalprocessing,inordertofacilitatesignal.Thiscourseisdesignedtoanalyzethespeechsignalsurd,dullness,somefunctionsusingMATLAB,readthespeechsignalrecording,renderingthespectrum,distinguishessurd,dullness,whichusesthepre-emphasis,windowing,andshort-timeenergy,short-timezero-crossingrate,short-timeautocorrelationfunctionandaveragemagnitudedifferencefunctionandotherfunctions,theuseofthese,caneasilydistinguishtherecordedsoundandspeechfromspeechsignal.
Keywords:
speechsignalprocessingtoreaddrawing
1引言
MATLAB是矩阵实验室(MatrixLaboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
2语音信号的采集
2.1语音采集的准备工作
进行语音处理首先要进行信号的采集工作,本次语音信号的采集工作是用MP3进行录音的,采集到的语音格式为WAV格式的,但由于采集的信号有较高的采样率,不能直接被MATLAB处理,需要进行转换,其具体的流程图如下图2-1所示:
图2-1
如上图所示,先是音源发去声音,被设备的拾音处采集,但不可避免的拾音头出拾取环境噪音,但是经内部电路处理后,可以把环境噪音很好的抑制(MP3内部有去噪电路),最后得到较为理想的音频文件。
2.2语音信号的预处理工作
上面所说的,MP3采集到的语音信号不能直接被MATLAB直接识别,需要先转换,这里使用软件对其进行转换,使用的是一款全能音频转换软件,转换后可以直接识别(对于本次命名为1.WAV),但是要注意录制语音信号的长度,过长也
不能很好的识别,做完这些工作后,再在桌面上建立一个工作文件夹,将所录制的语音信号放入其中,以便后续MATLAB软件的读取。
下面再分析一下语音信号的特点,通过对大量语音信号的观察和分析发现,语音信号主要有下面两个特点:
1)在时域内,语音信号具有“短时性”的特点,即在总体上,语音信号的特征是随着时间而变化的,但在一段较短的时间间隔内,语音信号保持平稳。
在浊音段表现出周期信号的特征,在清音段表现出随机噪声的特征。
2)在频域内,语音信号的频谱分量主要集中在300~3400Hz的范围内。
利用这个特点,可以用一个防混叠的带通滤波器将此范围内的语音信号频率分量取出,然后按8kHz的采样率对语音信号进行采样,就可以得到离散的语音信号。
而对于语音信号的时域分析,它是分析和提取语音信号的时域参数。
进行语音分析时,最先接触到并且也是最直观的是它的时域波形。
语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的以中国分析方法,这种方法直接利用语音信号的时域波形。
时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理、大分等。
这种分析方法的特点是:
1)表示语音的信号比较直观、物理意义明确。
2)实现起来比较简单、运算量少。
3)可以得到语音的一些重要参数。
语音信号的时域参数有短时能量、短时过零率、短时自相关函数和短时平均幅度差函数等,这是语音信号的一组最基本的短时参数,在各种语音信号数字处理技术中都有应用。
在计算这些参数时使用的一半是方窗或汉明窗。
短时能量和短时平均幅度函数的主要用途有:
可以区分浊音段和清音段,因为浊音时能量值比清音时大的多。
短时过零率是信号波形经过零点的机率,对于浊音主要集中在低频,而清音在频率较高的频段,这样一来对于清音来说有较高的过零率,这可以用来区分清音浊音
3利用MATLAB进行语音信号的分析处理
3.1利用软件进行声音文件的读取
对于上面的准备好的文件便可以用MATLAB进行处理了,首先是声音的读取,及所录声音的回放。
具体这一段程序如下所示:
[x,fs]=wavread('F:
\DMDownLoad\1.wav');%读取语音信号的数据,
sound(x,fs);%播放语音信号
N=128;
n=0:
N-1;
X=fft(x);
magX=abs(X);%求幅值
figure
(1);
subplot(2,1,1);
plot(x);%画原始信号波形图
xlabel('样点数');
ylabel('幅值');
title('原始语音信号波形');
gridon;
subplot(2,1,2);
plot(magX);%画原始信号频谱图
axis([0,70000,-5,500]);
xlabel('频率(Hz)');
ylabel('幅值');
title('原始语音信号频谱');
gridon;
所得得波形如图3-1所示:
图3-1
3.2清音浊音的区分处理
进行清音浊音的分析,首先对语音信号分析一下。
语音信号是一种非平稳的时变信号,它携带着各种信息。
在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。
语音信号分析的目的就在于方便有效的提取并表示语音信号所携带的信息。
首先预加重处理,预加重的目的是为了提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,以便于频谱分析或声道参数分析。
通俗的说,预加重部分就是设计数字滤波器,常采用的是:
H(z)=1-u/z其中,u取接近于1的值,常取0.9~1之间的值。
图3-2
为了便于处理,需要对语音信号进行加窗,通过对发声机理的认识,语音信号可以认为是短时平稳的。
在5~50ms的范围内,语音频谱特性和一些物理特
性参数基本保持不变。
我们将每个短时的语音称为一个分析帧。
一般帧长取
10~30ms。
我们采用一个长度有限的窗函数来截取语音信号形成分析帧。
通常会
采用矩形窗和汉明窗。
图3-3给出了这两种窗函数在帧长N=50时的时域波形。
图3-3矩形窗和Hamming窗的时域波形
矩形窗的定义:
一个N点的矩形窗函数定义为如下
;
hamming窗的定义:
一个N点的hamming窗函数定义为如下
;
这两种窗函数都有低通特性,通过分析这两种窗的频率响应幅度特性可以发现(如图3-4):
矩形窗的主瓣宽度小(4*pi/N),具有较高的频率分辨率,旁瓣峰值大(-13.3dB),会导致泄漏现象;汉明窗的主瓣宽8*pi/N,旁瓣峰值低(-42.7dB),可以有效的克服泄漏现象,具有更平滑的低通特性。
因此在语音频谱分析时常使用汉明窗,在计算短时能量和平均幅度时通常用矩形窗。
最后的表格对比了这两种窗函数的主瓣宽度和旁瓣峰值。
图3-4矩形窗和Hamming窗的频率响应
下表为矩形窗和hamming窗的主瓣宽度和旁瓣峰值
窗函数
主瓣宽度
旁瓣峰值
矩形窗
4*pi/N
-13.3dB
hamming
8*pi/N
-42.7dB
还有一个比较好的区分清音浊音的方法——过零率。
过零率可以反映信号的频谱特性。
当离散时间信号相邻两个样点的正负号相异时,我们称之为“过零”,即此时信号的时间波形穿过了零电平的横轴。
统计单位时间内样点值改变符号的次数具可以得到平均过零率。
定义短时平均过零率:
n[x[m]]-sgn[x(m-1)]|w(n-m);
其中
为符号函数,
,在矩形窗条件下,可以简化为
短时过零率可以粗略估计语音的频谱特性。
由语音的产生模型可知,发浊音时,声带振动,尽管声道有多个共振峰,但由于声门波引起了频谱的高频衰落,因此浊音能量集中于3KZ以下。
而清音由于声带不振动,声道的某些部位阻塞气流产生类白噪声,多数能量集中在较高频率上。
高频率对应着高过零率,低频率对应着低过零率,那么过零率与语音的清浊音就存在着对应关系。
.
图3-5为这次语音在矩形窗条件下求得的短时平均过零率。
可知清音的短时能量较低,过零率高,浊音的短时能量较高,过零率低。
清音的过零率为0.5左右,浊音的过零率为0.1左右,但两者之间有相互交叠的区域,所以单纯依赖于平均过零率来准确判断清浊音也是不太实际的,在实际应用中往往是采用语音的多个特征参数进行综合判决。
图3-5
另外语音信号的能量随时间变化,清音和浊音之间的能量差别也是相当显著的。
因此用此对语音的短时能量进行分析,可以描述语音的这种特征变化情况。
定义短时能量为:
=
;
其中N为窗长。
特殊地,当采用矩形窗时,可简化为:
;
在用短时能量反映幅度变化时,不同的窗函数以及相应窗的长短均有影响。
汉明窗的效果比矩形窗略好。
但是,窗的长短影响起决定性作用。
窗过大(N很大),等效于很窄的低通滤波器,不能反映幅度En的变化;窗过小(N很小),
短时能量随时间急剧变化,不能得到平滑的能量函数。
在44100Hz左右的采样频率下,N选为400~800比较合适。
图3-6
图3-7
除了上面的预加重处理,加窗处理,短时过零率,短时平均能量函数外,短时幅度函数,还有自相关函数可以反映清音浊音的区别。
下面对自相关函数的作用机理进行一下说明,自相关函数用于衡量信号自身时间波形的相似性。
清音和浊音的发声机理不同,因而在波形上也存在着较大的差异。
浊音的时间波形呈现出一定的周期性,波形之间相似性较好;清音的时间波形呈现出随机噪声的特性,样点间的相似性较差。
因此,我们用短时自相关函数来测定语音的相似特性。
短时自相关函数定义为:
;
令m=n+m,并且w(-m)=w(m),则可以得到:
;
4心得体会
经过几天的忙碌,终于完成这次课程设计,感觉到有些东西不亲自弄一下是不能真正了解的,就像有些概念,刚开始感觉就应该是这样理解的,真正到弄的时候才知道原来自己的想法是有偏差的。
脑子里想的始终和实际的有一定差距的,这次设计中没少翻书,上网查资料,对好多知识的理解还是不到位,掌握的还是不牢靠,得在今后的学习中更加深一步,及对以前学过的内容做好复习工作才能更好的拥有知识。
这期间和同学讨论过在程序编写中如何实现某些功能,通过几次讨论又学到了不少知识,深刻领会到讨论问题的重要性。
总的来说,经过这次课程设计对不少知识都有了一个新的认识,对以前的知识也是一个很好的巩固,同时也了解到不少新知识。
通过这次课程设计收获很多。
参考文献:
[1]赵力著.语音信号处理(第2版)[M].机械工业出版社.2010.
[2]胡航著.语音信号处理(第四版)[M].哈尔滨工业大学出版社.2009.
[3]张雄伟等著.现代语音处理技术及应用[M].机械工业出版社.2009.
附件:
MATLAB程序
[x,fs]=wavread('F:
\DMDownLoad\1.wav');%读取语音信号的数据,赋给变量x1,
%sound(x,fs);%播放语音信号
N=128;
n=0:
N-1;
X=fft(x);%进行fft变换
magX=abs(X);%求幅值
figure
(1);
subplot(2,2,1);
plot(x);%画原始信号波形图
xlabel('样点数');
ylabel('幅值');
title('原始语音信号波形');
gridon;
subplot(2,2,2);
plot(magX);%画原始信号频谱图
axis([0,70000,-5,500]);
xlabel('频率(Hz)');
ylabel('幅值');
title('原始语音信号频谱');
gridon;
%************语音信号的预处理***************
xx=double(x);
xx=filter([1-0.98],1,xx);%一阶FIR滤波器来实现预加重处理
%sound(xx,fs);%播放预加重处理后的语音信号
subplot(2,2,3);
plot(xx);%画预加重处理后信号波形图
xlabel('样点值');
ylabel('幅值');
title('加重语音信号波形图');
gridon;
y=fft(xx);%进行fft变换
mag=abs(y);%求幅值
subplot(2,2,4);
plot(mag);%画预加重处理后信号频谱图
axis([0,70000,-2,100]);
xlabel('频率(Hz)');
ylabel('幅值');
title('加重语音信号频谱图');
gridon;
%*************短时平均能量分析****************
s=fra(800,400,x);%对输入信号进行分帧
s2=s.^2;%一帧内各样点能量
enery=sum(s2,2);%一帧能量
figure
(2);
subplot(4,1,1);
plot(x);%画原始信号波形图
xlabel('样点数');
ylabel('幅值');
title('原始语音信号波形');
gridon;
subplot(4,1,2);
plot(enery);%画N=800时的语音能量谱
xlabel('帧数');
ylabel('短时能量E');
title('短时平均能量');
gridon;
%************短时平均幅度函数****************
s=fra(800,400,x);%对输入信号进行分帧
s3=abs(s);;
avap=sum(s3,2);
subplot(4,1,3);
plot(avap);%画N=800时短时平均幅度函数
xlabel('帧数');
ylabel('短时能量E');
title('短时平均能量');
gridon;
%***********短时平均过零率分析***************
s=fra(800,400,x);%对输入信号进行分帧
zcr=zcro(s);%求过零率
%subplot(4,1,4);
plot(zcr);%画N=440时的语音信号过零率
xlabel('帧数');
ylabel('过零次数');
title('信号的过零率');
gridon;
%浊音,取13270--13510个点
%短时自相关函数
temp=x(13271:
13510);
Rn1=zeros(1,240);
fornn=[1:
240],
forii=[1:
240-nn],
Rn1(nn)=Rn1(nn)+temp(ii)*temp(nn+ii);
end
end
figure
(2)
set(2,'Position',[400,35,350,650])
subplot(4,1,1)
jj=[1:
240];
plot(jj,Rn1,'b');
grid%短时平均幅度差函数
Yn1=zeros(1,240);
fornn=[1:
240],
forii=[1:
240-nn],
Yn1(nn)=Yn1(nn)+abs(temp(ii)-temp(nn+ii));
end
end
figure
(2)
subplot(4,1,2)
jj=[1:
240];
plot(jj,Yn1,'b');
grid
%清音,取12120--12360个点
%短时自相关函数
temp=x(12121:
12360);
Rn2=zeros(1,240);
fornn=[1:
240],
forii=[1:
240-nn],
Rn2(nn)=Rn2(nn)+temp(ii)*temp(nn+ii);
end
end
figure
(2)
subplot(4,1,3)
jj=[1:
240];
plot(jj,Rn2,'b');
grid
%短时平均幅度差函数
Yn2=zeros(1,240);
fornn=[1:
240],
forii=[1:
240-nn],
Yn2(nn)=Yn2(nn)+abs(temp(ii)-temp(nn+ii));
end
end
figure
(2)
subplot(4,1,4)
jj=[1:
240];
plot(jj,Yn2,'b');
grid
本科生课程设计成绩评定表
姓名
性别
男
专业班级
通信1201班
题目:
运用MATLAB对语音信号的清音、浊音进行分析
答辩或质疑记录:
1.声音如何获取?
答:
先录制一份MP3格式的音频文件,然后用格式工厂软件将其转换为WAV
格式,然后用wavread函数读取其语音信号。
2.预加重处理有什么作用?
答:
为了提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个
频带中,能用同样的信噪比求频谱,以便于频谱分析或声道参数分析。
3.矩形窗和汉明窗有什么特点?
答:
矩形窗