基于MATLAB的语音信号的清、浊音分析.doc
目录1 语音信号概述11.1 语音信号的基本组成11.2 语音信号的“短时谱”11.3 基音周期21.4 短时分析技术22 语音信号的采集及清浊音分析22.1 语音信号的采集22.2 采样分帧32.3短时能量和短时平均幅度42.4短时过零率62.5短时自相关函数83 心得体会10主要参考资料10附录111 语音信号概述1.1 语音信号的基本组成语音信号的基本组成单位是音素。音素可分成“浊音”和“清音”两大类。如果将不存在语音而只有背景噪声的情况称为“无声”。那么音素可以分成“无声”、“浊音”、“清音”三类。一个音节由元音和辅音构成。元音在音节中占主要部分。所有元音都是浊音。在汉语普通话中,每个音节都是由“辅音一元音”构成的。在信号处理中,语音按其激励形式的不同可分为2 类:(1)浊音当气流通过声门时,如果声带的张力刚好使声带发生张弛振荡式的振荡,产生一股准周期的气流,这一气流激励声道就产生了浊音。这种语音信号是1 种激励信号,它是由规则的全程激励产生的,其时域波形具有准周期性,语音频率集中在比较低的频率范围内,短时能量较高,由于语音信号中的高频成分有高的过零率而低频有低的过零率,因此浊音的过零率低。通常,浊音信号可以由周期激励通过线性滤波器合成。(2)清音当气流通过声门时,如果声带不振动,而在某处收缩,迫使气流高速通过这一收缩部分而产生湍流,就得到清音。清音是由不规则的激励产生的,发清音时声带不振动,其时域波形不具有周期性, 自相关函数没有很强的自相关周期峰,其语音频率集中在较高的范围内,短时能量较低,因而过零率较高。通常,清音信号可由白噪声通过线性滤波器合成。1.2 语音信号的“短时谱”对于非平稳信号,它是非周期的,频谱随时间连续变化,因此由傅里叶变换得到的频谱无法获知其在各个时刻的频谱特性。如果利用加窗的方法从语音流中取出其中一个短段,再进行傅里叶变换,就可以得到该语音的短时谱。1.3 基音周期浊音信号的周期称为基音周期,它是声带振动频率的倒数,基音周期的估计称为基音检测。基音检测是语音处理中的一项重要技术,它在有调语音辨意、低速率语音编码、说话人识别等方面起着非常关键的作用。但在实现过程中,由于声门激励波形不是一个完全的周期脉冲串,再加上声道影响去除不易、基音周期定位困难、背景噪声影响强烈等一系列因素,基音检测面临着很大的困难。现在已有很多性能优越的基音检测算法,自相关基因检测算法就是一种基于语音时域分析理论较好的算法,在这里基于声音文件比较稳定的基础上,使用观察法获取基音周期。1.4 短时分析技术语音信号具有时变特性,但在一个短时间范围内(一般认为在1030ms的短时间内),其特性基本保持不变,即相对稳定,因而可以将其看作是一个准稳态过程,即语音信号具有短时平稳特性。任何语音信号的分析和处理必须建立在“短时”的基础上。即进行“短时分析”,将语音信号分段来分析其特征参数,其中每一段称为一“帧”,帧长一般取为1030ms。这样,对于整体的语音信号来讲,分析出的是由每一帧特征参数组成的特征参数时间序列。2 语音信号的采集及清浊音分析2.1 语音信号的采集该设计以本人的声音为分析样本。在MATLAB中使用Wavread函数。可得出声音的采样频率为22050Hz,且声音是单通道的。利用sound函数,可清晰地听到读音为:“电子信息工程”的音频信号。采集数据并画出波形图如下所示,fs 为采样频率,x为采样数据,接下来对采样数据作傅里叶变换y=fft(x)并画出频谱图如图1所示:图1 原始语音信号波形及频谱图由频谱图可清楚地看到样本声音主要以低频为主。人的语音信号频率一般集中在200 kHz到45 kHz之间,从声音频谱的包络来看,样本声音的能量集中在01pi(1 1025Hz)以内,04pi以外的高频部分很少。所以信号宽度近似取为1.1kHz,由采样定理可得fs >2fo=2xl 102.5=2205Hz。2.2 采样分帧这里的采样是指从语音信号中选取一段样本, 一般取样点数为帧长的整数倍。 每秒钟的采样样本数叫做采样频率,分帧主要完成将取样模块中获得的语音样值点分为若干个语音帧,语音是不平稳的时变信号,在时间足够短的情况下,可以近似认为是平稳的,短时分析将语音流分为一段一段来处理, 每一段就被称为一帧。分帧时需对语音信号进行加窗操作, 即用一个有限长度的窗序列截取一段语音信号来进行分析,该窗函数可以按时间方向滑动, 以便分析任一时刻附近的信号。常见的窗函数有: 方窗、Hamming 窗及Hannig 窗。如果把窗函数理解成为某个滤波器的单位冲激响应,由于窗函数一般是中间大两头小的光滑函数,因此该滤波器具有低通特性。窗口长度的选择非常重要,窗长过短会使分析窗内没有包含足够的数据点来进行周期判断, 且短时能量变化剧烈窗长过长, 短时能量是一段长时间的平均,不但不能反映语音信号基频的细节变化部分,而且使得计算量增大,窗口长度至少要大于基音周期的两倍。浊音的短时谱有两个特点:(1)有明显的周期性起伏结构,这是因为浊音的激励源为周期脉冲气流。(2)频谱中明显地有凸出点,即“共振峰”,它们的出现频率与声道的谐振频率相对应。清音的短时谱则没有这两个特点。它十分类似于一段随机噪声的频谱。2.3 短时能量和短时平均幅度能量是语音的一个重要特性,由于语音信号的能量随时间变化,清音和浊音之间的能量差别相当显著,清音的能量较小,浊音的能量较大。因此对语音的短时能量进行分析,可以描述语音的这种特征变化情况。短时能量定义为:其中,W(n)是窗函数,N是窗长。特殊地,当采用矩形窗时,可简化为: 由此表明,窗口加权短时平均能量En 相当于将“语音平方”信号通过一个单位函数响应为h( n) 的线性滤波器的输出。本次语音信号的短时平均能量和短时平均幅度如下图2所示:图2 短时平均能量和短时平均幅度由上图发现,语音浊音段的短时平均能量远远大于清音段的短时平均能量。因此,短时平均能量En 的计算给出了区分清音段与浊音段的依据,即En (浊) > En (清)。根据En 由高到低的跳变可定出浊音变为清音语音的时刻, En 由低向高的跳变可定出清音变为浊音语音的时刻,而只有浊音才有基音周期,清音的基音周期为零。故清浊音判断是基音检测的第一步。该算法中窗口选择汉明窗,其定义为:w ( n) = 0154 - 0146cos (2n/ ( N - 1) ) ;0 n N - 10 ; 其他选择汉明窗的理由是窗函数的选取原则为窗函数截取后的x ( n) 尽量是中间大两头小的光滑函数,冲激响应对应的滤波器具有低通特性。从汉明窗的构成及频率响应特性上看, 汉明窗具有这种特性, 而矩形窗及汉宁窗则稍逊之。汉明窗虽然主瓣最高(带宽大) ,但旁瓣最低(通带外的衰减大) , 可以有效地克服泄露现象,具有更好的低通特性。故选择汉明窗而不选择别的窗函数,能使短时平均能量En 更能反映语音信号的幅度变化。短时能量函数的应用:1)可用于区分清音段与浊音段。En值大对应于浊音段,En值小对应于清音段。2)可用于区分浊音变为清音或清音变为浊音的时间(根据En值的变化趋势)。3)对高信噪比的语音信号,也可以用来区分有无语音(语音信号的开始点或终止点)。无信号(或仅有噪声能量)时,En值很小,有语音信号时,能量显著增大。2.4 短时过零率过零率可以反映信号的频谱特性。对于连续语音信号,可以考察其时域波形通过时间轴的情况。对于离散时间信号,如果相邻两个样点的正负号相异时,我们称之为“过零”,即此时信号的时间波形穿过了零电平的横轴。由此可以计算过零数,过零数就是样本改变符号的次数,统计单位时间内样点值改变符号的次数就可以得到平均过零率。短时过零分析通常用在端点检测,特别是用来估计清音的起始位置和结束位置。短时平均过零率定义为: 其中为符号函数,在矩形窗条件下,可以简化为 短时过零率可以粗略估计语音的频谱特性。由语音的产生模型可知,发浊音时,声带振动,尽管声道有多个共振峰,但由于声门波引起了频谱的高频衰落,因此浊音能量集中于3KZ以下。而清音由于声带不振动,声道的某些部位阻塞气流产生类白噪声,多数能量集中在较高频率上。高频率对应着高过零率,低频率对应着低过零率,那么过零率与语音的清浊音就存在着对应关系。.音频为“电子信息工程”的短时过零率的波形图如下图3所示:图图3 短时平均过零率分析可知:清音的短时能量较低,过零率高,浊音的短时能量较高,过零率低。清音的过零率为0.5左右,浊音的过零率为0.1左右,两但者分布之间有相互交叠的区域,所以单纯依赖于平均过零率来准确判断清浊音是不可能的,在实际应用中往往是采用语音的多个特征参数进行综合判决。短时过零率的应用:1)区别清音和浊音。清音的过零率高,浊音的过零率低。此外,清音和浊音的两种过零分布都与高斯分布曲线比较吻合。2)从背景噪声中找出语音信号。语音处理领域中的一个基本问题是,如何将一串连续的语音信号进行适当的分割,以确定每个单词语音的信号,亦即找出每个单词的开始和终止位置。3)在孤立词的语音识别中,可利用能量和过零作为有话无话的鉴别。2.5 短时自相关函数自相关函数用于衡量信号自身时间波形的相似性。清音和浊音的发声机理不同,因而在波形上也存在着较大的差异。浊音的时间波形呈现出一定的周期性,波形之间相似性较好;清音的时间波形呈现出随机噪声的特性,样点间的相似性较差。因此,我们用短时自相关函数来测定语音的相似特性。短时自相关函数定义为: 清音的短时自相关函数波形和浊音的短时自相关函数波形如下图4所示:图4 清音的短时自相关函数波形和浊音的短时自相关函数波形由短时自相关函数波形分析可知:清音接近于随机噪声,清音的短时自相关函数不具有周期性,也没有明显突起的峰值,且随着延时k的增大迅速减小;浊音是周期信号,浊音的短时自相关函数呈现明显的周期性,自相关函数的周期就是浊音信号的周期,根据这个性质可以判断一个语音信号是清音还是浊音,还可以判断浊音的基音周期。浊音语音的周期可用自相关函数中第一个峰值的位置来估算。所以在语音信号处理中,自相关函数常用来作以下两种语音信号特征的估计:1)区分语音是清音还是浊音;2)估计浊音语音信号的基音周期。3 心得体会经过一周时间的忙碌,终于完成了本次的课程设计基于MATAB语音信号的清、浊音分析。在这段时间内我发现自己还有很多基础知识没有掌握,设计起来非常吃力,并且在开始的几天之中,因为没有头绪,做起来毫无目的。通过上网,去图书馆查询资料,并通过和老师、同学们进行讨论,最后终于完成了本次的课程设计。经过这段时间的课程设计,我明白了每个人不可能掌握很多知识或技能,但是我们可以通过查询资料或向老师,同学请教。虽然开始觉得很吃力但是培养了自己的独立学习能力。当每次课程设计中,遇到问题,最好的办法就是查阅相关资料,因为每个人掌握情况不一样,一个人不可能做到处处都懂,集合多个人的思想,复杂的事情就会变得很简单。通过问题的不断解决,自己就会积累很多实用的知识,这一点我深有体会。在这段时间里,我认识到自己在MATLAB编程及语音信号处理方面的知识还有所欠缺,自身还存在很多不足。一周的语音信号课程设计即将结束,回顾这一周真是收益匪浅。以前对知识的了解仅限于理论知识,而且有的仅能够理解,有的只是停留在似懂非懂的状态。对于有些函数不知道有什么功能,也就不懂怎样使用,但是,经过这一周之后,我对MATLAB软件有了新的认识,掌握的也更加熟练。主要参考资料1 赵力著,语音信号处理(第2版)M,机械工业出版社,2010.2 胡航著,语音信号处理(第四版)M,哈尔滨工业大学出版社,2009.3 张雄伟等著,现代语音处理技术及应用M,机械工业出版社,2009.附录fs=22050; %抽样频率x=wavread('yin.wav');sound(x1,22050); %读取语音信号“电子信息工程”figure(1)subplot(211)plot(x) %做原始语音信号的时域图形title('原始语音信号波形');xlabel('样点数'); %x轴的名字是“样点数”ylabel('幅值 '); %y轴名字是“幅值”grid on; N=128;n=0:N-1;y=fft(x); %对x进行傅里叶变换mag=abs(y); %求幅值f=(0:length(y)-1)'*fs/length(y); %进行对应的频率转换figure(1)subplot(212)plot(f,mag); %做原始语音信号的频谱图xlabel('频率(Hz)'); ylabel('幅值');title('原始信号频谱图');grid on;N=240;Y=wavread('yin.wav');L=length(Y); LL=length(Y)/N; figure(2)Em=zeros(1,(LL-1)*240); for ii=1:(LL-1)*240, temp=Y(ii:ii+240); Em(ii)=sum(temp.*temp); endjj=1:(LL-1)*240; subplot(211)plot(jj, Em,'b'); %绘制短时平均能量曲线xlabel('帧数');ylabel('短时能量');title('短时平均能量');grid on;% axis(12000,16000,0.15,0.4)%短时平均幅度Mn=sum(abs(Y)/NMn=zeros(1,(LL-1)*240);for ii=1:(LL-1)*240, temp=Y(ii:ii+240); Mn(ii)=sum(abs(temp)/N;endfigure(2)jj=1:(LL-1)*240; subplot(212)plot(jj, Mn,'b'); %绘制短时平均幅度曲线xlabel('帧数');ylabel('短时平均幅度');title('短时平均幅度');grid on; %短时过零率 Zn=zeros(1,(LL-1)*240);for ii=2:(LL-1)*240, temp1=sign(Y(ii:ii+240); temp=sign(Y(ii-1:ii+240-1); Zn(ii)=sum(abs(temp1-temp);endfigure(3)jj=1:(LL-1)*240;plot(jj, Zn,'b'); %绘制短时过零率函数曲线xlabel('帧数');ylabel('短时过零率');title('短时过零率');grid on;%浊音,取13270-13510个点%短时自相关函数temp=Y(13271:13510);Rn1=zeros(1,240); for nn=1:240, for ii=1:240-nn, Rn1(nn) =Rn1(nn)+ temp(ii)*temp(nn+ii); endend figure(4)subplot(211)jj=1:240;plot(jj, Rn1,'b'); % 绘制浊音短时自相关函数曲线xlabel('帧数');ylabel('短时自相关函数');title('浊音短时自相关函数');grid on;%清音,取12120-12360个点%短时自相关函数temp=Y(12121:12360);Rn2=zeros(1,240); for nn=1:240, for ii=1:240-nn, Rn2(nn) =Rn2(nn)+ temp(ii)*temp(nn+ii); endendfigure(4)subplot(212)jj=1:240;plot(jj, Rn2,'b'); % 绘制浊音短时自相关函数曲线xlabel('帧数');ylabel('短时自相关函数');title('清音短时自相关函数');grid on;15