基于Matlab编写的语音端点检测

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Matlab编写的语音端点检测

专业:

班级:

姓名:

指导教师:

2011 年6月18 日

一、实验目的

1.学会MATLAB的使用,掌握MATLAB的程序设计方法;

3.掌握语音处理的基本概念、基本理论和基本方法;

4.掌握基于MATLAB编程实现带噪语音信号端点检测;

5.学会用MATLAB对信号进行分析和处理。

二、实验内容简介:

可利用时域分析(短时能量、短时过零率、短时自相关)方法的某一个特征或某几个特征的结合,判定某一语音信号的端点,尤其在有噪声干扰时,如何准确检测语音信号的端点,这在语音处理中是富有挑战性的一个课题。

要求:(1)录制语音,读入文件,绘制波形

(2)分帧,绘制能量曲线和短时过零率曲线

(3)根据上述端点检测原理,实现端点检测

(4)界面

三.课程设计原理

端点检测是语音信号处理过程中非常重要的一步,它的准确性直接影响到语音信号处理的速度和结果,因此端点检测方法的研究一直是语音信号处理中的热点。本设计使用传统的短时能量和过零率相结合的语音端点检测算法利用短时过零率来检测清音.用短时能量来检测浊音,两者相配合便实现了信号信噪比较大情况下的端点检测。

算法对于输入信号的检测过程可分为短时能量检测和短时过零率检测两个部分。算法以短时能量检测为主,短时过零率检测为辅。根据语音的统计特性,可以把语音段分为清音、浊音以及静音(包括背景噪声)三种。在本算法中,短时能量检测可以较好地区分出浊音和静音。对于清音,由于其能量较小,在短时能量检测中会因为低于能量门限而被误判为静音;短时过零率则可以从语音中区分出静音和清音。将两种检测结合起来,就可以检测出语音段(清音和浊音)及静音段

1、短时能量计算

定义n 时刻某语音信号的短时平均能量n E 为:

∑∑--=+∞-∞=-=-=

n N n m m n m n w m x m n w m x E )1(22)]()([)]()([

式中N 为窗长,可见短时平均能量为为一帧样点值的甲醛平方和。特殊地,当窗函数为矩形窗时,有

∑--==

n N n m n m x E )1(2)(

2、短时过零率

过零就是指信号通过零值。过零率就是每秒内信号值通过零值的次数。

对于离散时间序列,过零则是指序列取样值改变符号,过零率则是每个样本的改变符号的次数。对于语音信号,则是指在一帧语音中语音信号波形穿过横轴(零电平)的次数。可以用相邻两个取样改变符号的次数来计算。 如果窗的起点是n=0,短时过零率Z 为

波形穿过横轴(零电平)的次数

短时过零可以看作信号频率的简单度量

浊音的短时平均幅度最大,无声的短时平均幅度最小,清音的短时过零率最大,无声居中,浊音的短时过零率最小。

3、短时自相关函数

1、是偶函数;

2、s(n)是周期的,那么R(k)也是周期的;

3、可用于基音周期估计和线性预测分析

4、判断语音信号的起点和终点

利用短时平均幅度和短时过零率可以判断语音信号的起点和终点。语音端点检测方法可采用测试信号的短时能量或短时对数能量、联合过零率等特征参数,并采用双门限判定法来检测语音端点,即利用过零率检测清音,用短时能量检测浊音,两者 配合。首先为短时能量和过零率分别确定两个门

∑-=--=1

00))1(())((21N n w w n S Sgn n S Sgn Z ∑--=+=1

0)

()()(k N n w w w k n s n s k R ⎩⎨⎧<-≥=0

,10,1)sgn(x x x

限,一个是较低的门限数值较小,对信号的变化比较敏感,很容易超过;另一个是比较高的门限,数值较大。低门限被超过未必是语音的开始,有可能是很短的噪声引起的,高门限被超过并且接下来的自定义时间段内的语音超

首先,可根据浊语音情况下短时平均幅度M的概率密度函数P(M/V)确定一个阈值参数MH, MH的值定得比较高。当一帧输入信号的M值超过MH 时,就可以十分肯定该帧语音信号不是无声,而有相当大的可能性是浊音由N1’向前和N2’向后继续用短时过零率Z进行搜索。根据无声情况下短时过零率Z的均值,设置一个参数Z0,如果由N1’向前搜索时Z始终大于Z0的3倍,则认为这些信号仍属于语音段,直至Z突然下降到低于3Z0值时,这时可以确定语音的精确起点(为了保证可靠,由N1’向前搜索时间不超过25ms)。对终点做同样的处理。采取这一算法的原因在于,N1’以前可能是一段清辅音段(如f,s),它的能量相当弱,依靠能量不可能把他们与无声段区别开,而他们的过零率明显高于无声,因而能用这个参数来精确的判断二者的分割点,也就是语音真正的起点。

四、实验步骤及分步结果

1.界面设计

2.程序设计(1).

①打开语音文件

function openbutton_Callback(hObject, eventdata, handles) clc;

axes(handles.wavaxes);cla reset;box

on;set(gca,'XTickLabel',[],'YTickLabel',[]);

axes(handles.Energeaxes);cla reset;box

on;set(gca,'XTickLabel',[],'YTickLabel',[]);

axes(handles.Zerorateaxes);cla reset;box

on;set(gca,'XTickLabel',[],'YTickLabel',[]);

set(handles.T1edit,'string',0);

set(handles.T2edit,'string',0);

set(handles.T3edit,'string',0);

%´ò¿ª´ý´¦ÀíµÄÓïÒôÎļþ

[filename,pathname]=uigetfile({'*.wav','All Wav

Files'},'Ñ¡ÔñÓïÒôÎļþ');

if filename == 0

return;%Èç¹ûûÓÐÑ¡ÔñеÄÎļþ£¬Ôò·µ»Ø

end

file=fullfile(pathname,filename);%ÎļþÃû

[signal,fs,bit]=wavread(file);%¶ÁÈ¡Ñ¡ÔñµÄÓïÒôÊý¾Ý

axes(handles.wavaxes)

plot(signal)%ÏÔʾ²¨ÐÎ

相关文档
最新文档