基于能量和过零率的语音端点检测
- 格式:wps
- 大小:159.69 KB
- 文档页数:6
端点检测(VAD)技术端点检测是语音识别和语音处理的一个基本环节,也是语音识别研究的一个热点领域。
技术的主要目的是从输入的语音中对语音和非语音进行区分,主要功能可以有:1.自动打断。
2.去掉语音中的静音成分。
3.获取输入语音中有效语音。
4.去除噪声,对语音进行增强。
目前,端点检测技术主要是根据语音的一些时域或频域特征进行区分。
一,时域参数时域参数端点检测是根据时域中的特征参数进行区分,一般如果信噪比较高的时候,效果至少90%以上。
1.时域能量大小。
2.时域平均过零率。
3.短时相关性分析。
相关性分析主要是利用语音的相关性比噪声强,噪声之间的相关性呈现下降的趋势,但因为噪声种类太多,因此只针对少量、特定噪声。
4.能量变化率。
也有人用这个,没有实验过。
5.对数能量。
6.子带能量。
实验表明,这个效果会比单纯的能量要好。
7.GMM假设检验。
8.其它。
其它也有一些,都是从自适应、噪声能量估计、信噪比估计等角度出发。
二,频域参数频域参数的抗噪性会比时域要好,但计算的cost也要高,下列技术是主流1.谱熵。
谱熵在频域与时域较量时,是比较优秀的,鲁棒性明显好于时域。
2.频域子带。
这种方法对于自适应类的算法来说,是比较优秀的,因为可以通过子带选择和设计,改变噪声的估计。
3.自适应子波。
这种算法通过子波的自适应,可以使得每一个相关帧的子波数和设计都不一样,如选择16个子带,选取频谱分布在250至3.5K之间,且能量不超过该帧总能量90%的子带,此时能够较好的消除噪声对端点的影响。
4.基频。
有人这样尝试,通过基频的检测,来表达声音是否真的存在,这类算法的鲁棒性很强,但对于轻音就会面临比较大的风险了。
5.其它。
自适应等思路。
三,时域和频域结合参数这类算法通过把时域和频域相结合的思路来设计算法,也是主流,因为时域计算快,可以快速检测,而频域更能表达噪声的特征。
1.自适应能量子带的谱熵检测。
把能量划分子带,结合谱熵。
一般单一的谱熵不能很好的表达噪声在帧内的加性能量噪声。
课题:基于能量和过零率的语音端点检测姓名:陈启望简盛龙颜艳丹专业:2008级电子科学与技术(2)班指导老师:胡朝炜国立华侨大学信息科学与工程学院一、前言在复杂的应用环境下,从信号流中分辨出语音信号和非语音信号,是语音处理的一个基本问题。
端点检测就是从包含语音的一段信号中确定出语音的起始点和结束点。
正确的端点检测对于语音识别和语音编码系统都有重要的意义,它可以使采用的数据真正是语音信号的数据,从而减少数据量和运算量并减少处理时间。
二.方案选择判别语音段的起始点和终止点的问题主要归结为区别语音和噪声的问题。
①短时能量——如果能够保证系统的输入信噪比很高(即使最低电平的语音的能量也比噪声能量要高),那么只要计算输入信号的短时能量就基本能够把语音段和噪声背景区别开来。
但是,在实际应用中很难保证这么高的信噪比,仅仅根据能量来判断是比较粗糙的。
②短时平均过零率——它是语音信号时域分析中的一种特征参数。
它是指每帧内信号通过零值的次数。
在离散时间语音信号情况下,如果相邻的采样具有不同的代数符号就称为发生了过零。
如果是正弦信号,其平均过零率就是信号频率的两倍除以采样频率,而采样频率是固定的。
因此过零率在一定程度上可以反映信号的频率信息。
语音信号不是简单的正弦序列,所以平均过零率的表示方法就不那么确切。
③两级判决法——在用短时能量判断的同时,还需进一步利用短时平均过零率进行判断,因为清音比噪声的短时平均过零率比背景噪声的平均过零率要高出高几倍。
即基于能量和过零率的端点检测方法,也称双门限比较法。
综上所述,选择第三种方法,更加准确,实现的程序也不是很复杂。
三、方法的理论介绍1.第一级判决a.先根据语音短时能量的轮廓选取一个较高的门限T1,进行一个粗判:语音起止点位于该门限与短时能量包络交点所对应的时间间隔之外(即AB段之外)。
b.根据背景噪声的平均能量确定一个较低的门限T2,并从A点往左、从B点往右搜索,分别找到短时能量包络与门限T2相交的两个点C和D,于是CD段就是用双门限方法根据短时能量锁判定的语音段。
基于短时能量和过零率分析的语音端点检测方法研究刘波,聂明新,向俊涛武汉理工大学信息工程学院,湖北武汉 (430070)E-mail :ngulb@摘 要:短时能量分析和过零率分析作为语音信号时域分析中最基本的方法,应用相当广泛,特别是在语音信号端点检测方面。
由于在语音信号端点检测方面这两种方法通常是独立使用的,在端点检测的时候很容易漏掉重要的信息。
本文将这两种方法结合起来,利用MATLAB 工具对其进行了分析。
实验结果表明,检测的效果好于分别使用其中一种方法的情况。
关键词:端点检测,短时能量 过零率 门限1 引言近年来,在语音信号处理领域,关于语音信号中端点检测及判定的研究越来越重要。
作为语音识别的前提工作,有效的端点检测方法不仅可以减少数据的存储量和处理时间,而且可以排除无声段的噪声干扰,使语音识别更为准确。
目前的语音信号端点检测算法比较多,有短时能量,短时过零率分析,自相关法等等,其中以短时能量和短时过零率用的最多。
大多文献和教材都是把它们分别进行介绍,由于它们各有其优缺点,分别使用作为语音端点检测的手段难免会漏掉很多有用的信息,因此,笔者将这两种方法结合起来进行分析,在判断清浊音及静音方面可以起到互补的作用,从语音信号的短时能量和过零率分析的特点出发,加以门限值来分析将两种方法相结合应用的效果,最后通过Matlab 进行了仿真。
2 语音信号短时能量和过零率的特征语音一般分为无声段,清音段和浊音段。
一般把浊音认为是一个以基音周期为周期的斜三角脉冲串,把清音模拟成随机白噪声。
由于语音信号是一个非平稳态过程,不能用处理平稳信号的信号处理技术对其进行分析处理。
但由于语音信号本身的特点,在10~30ms 的短时间范围内,其特性可以看作是一个准稳态过程,即具有短时性。
因此采用短时能量和过零率来对语音进行端点检测是可行的。
信号的短时能量定义为:设语音波形时域信号为)(l x 、加窗分帧处理后得到第n 帧语音信号为)(m x n ,则)(m x n 满足下式:10)()()(−≤≤+=N m m n x m w m x n (2-1)⎩⎨⎧=−==其他值m N m m w ,0)1(~0,1)(其中,,,2,1,0L T T n = 并且N 为帧长,T 为帧移长度。
• 28•语音端点检测是语音信号处理的一个重要环节。
在低信噪比的情况下,传统的能零比端点检测的方法正确率很低。
本文提出了基于EMD 和能零比的语音端点检测算法,它结合语音增强技术,利用EMD 分解特性,求出能零比参数,设置自适应检测阈值,实现了在低信噪比环境下的语音端点检测。
仿真实验结果表明该方法在低信噪比情况下能够提高检测的正确率和稳定性。
语音端点检测是语音信号处理中的一个非常重要的环节。
语音端点检测算法主要分为两大类:模型匹配端点检测和特征参数端点检测。
模型匹配端点检测如基于隐马尔科夫模型等,该类型检测算法过程复杂,运算量大,因此应用与发展受到了限制。
特征参数端点检测主要是根据语音信号的时域特征和频域特征,该算法简单,运算量小,但在低信噪比的情况下检测误判率高。
美籍华人N.E.H u a n g 在1998年提出了经验模态分解方法(Empirical Mode Decomposition ,EMD)。
该算法能够很好的适应于语音这种常见的非线性非平稳信号。
本文提出了基于EMD 和能零比的语音端点检测算法。
研究表明,该方法在低信噪比情况下能够提高语音端点检测的正确率和稳定性。
1 基于EMD和能零比的语音端点检测算法基于EMD 和能零比的语音端点检测算法,首先对含有白噪声的语音数据进行语音增强,这里采用谱减法进行语音增强。
再将增强后的语音进行EMD 分解,由于含白噪声的语音信号的能量主要分布在第2-5层IMF 中,因此重构语音信号选择第2-5个IMF 分量。
对于重构后的语音信号进行分帧,求出每帧的过零率,同时对每帧再次EMD 分解,求出各阶IMF 的Teager 能量,并将各阶能量求和,构成特征参数能零比,最后自适应门限求解、判决。
1.1 语音增强当信噪比下降时,噪声的能量变大,使得语音端点检测正确率下降。
为了能有效检测较低信噪比的语音信号的端点,应用语音增强技术来提高语音的信噪比,改进语音质量。
基于短时自相关及过零率的语音端点检测算
法
语音端点检测是计算机语音处理领域的一种常见应用,它主要用于语音识别、拼写校正以及声纹分析等语音处理技术中。
基于短时自相关(Short-Time Auto/orrelation, STAC)和过零率(Zero-Crossing Rate, ZCR)的语音端点检测算法是当前检测语音端点所使用的一种常用方法。
通常情况下,该算法的实现步骤如下:首先,将语音信号拆分为多小片段,每块片段的长度一般以毫秒为单位(通常取20ms),并将片段之间用某种滤波器连接;接着计算每块片段的自相关系数,并在计算结果中检测端点;最后,计算每个片段的ZCR,用相邻两个片段之间的ZCR变化来确定语音端点,其中该变化值还可以决定端点的类型—开始点或结束点。
检测完语音端点后,即可实现对语音信号的分割及识别。
现有的STAC-ZCR算法效果较为理想,其特点是计算量小、易于实现,因此深受人们的欢迎并发展至今。
实验一语音信号端点检测一、 实验目的1.学会MATLAB 的使用,掌握MATLAB 的程序设计方法;2.掌握语音处理的基本概念、基本理论和基本方法;3.掌握基于MATLAB 编程实现带噪语音信号端点检测;4.学会用MATLAB 对信号进行分析和处理。
5. 学会利用短时过零率和短时能量,对语音信号的端点进行检测。
二、 实验仪器设备及软件MATLAB三、 实验原理端点检测是语音信号处理过程中非常重要的一步,它的准确性直接影响到语音信号处理的速度和结果。
本次实验利用短时过零率和短时能量相结合的语音端点检测算法利用短时过零率来检测清音,用短时能量来检测浊音,两者相配合便实现了信号信噪比较大情况下的端点检测。
算法对于输入信号的检测过程可分为短时能量检测和短时过零率检测两个部分。
算法以短时能量检测为主,短时过零率检测为辅。
根据语音的统计特性,可以把语音段分为清音、浊音以及静音(包括背景噪声)三种。
在本算法中,短时能量检测可以较好地区分出浊音和静音。
对于清音,由于其能量较小,在短时能量检测中会因为低于能量门限而被误判为静音;短时过零率则可以从语音中区分出静音和清音。
将两种检测结合起来,就可以检测出语音段(清音和浊音)及静音段1、短时能量计算定义n 时刻某语言信号的短时平均能量En 为:∑∑--=+∞∞--=-=n N n m m n w m x m n w m x En )1(22)]()([)]()([式中N 为窗长,可见短时平均能量为一帧样点值的平方和。
特殊地,当窗函数为矩形窗时,有∑--==n N n m m x En )1(2)(2、短时过零率过零就是指信号通过零值。
过零率就是每秒内信号值通过零值的次数。
对于离散时间序列,过零则是指序列取样值改变符号,过零率则是每个样本的改变符号的次数。
对于语音信号,则是指在一帧语音中语音信号波形穿过横轴(零电平)的次数。
可以用相邻两个取样改变符号的次数来计算。
如果窗的起点是n=0,短时过零率Z 为波形穿过横轴(零电平)的次数|))1(())((|2110∑-=--=N n w w n S Sgn n S Sgn Z {00,1,1)sgn(≥<-=x x x短时过零可以看作信号频率的简单度量浊音的短时平均幅度最大,无声的短时平均幅度最小,清音的短时过零率最大,无声居中,浊音的短时过零率最小。
课题:基于能量和过零率的语音端点检测姓名:陈启望简盛龙颜艳丹
专业:2008级电子科学与技术(2)班
指导老师:胡朝炜
国立华侨大学信息科学与工程学院
一、前言
在复杂的应用环境下,从信号流中分辨出语音信号和非语音信号,是语音处理的一个基本问题。
端点检测就是从包含语音的一段信号中确定出语音的起始点和结束点。
正确的端点检测对于语音识别和语音编码系统都有重要的意义,它可以使采用的数据真正是语音信号的数据,从而减少数据量和运算量并减少处理时间。
二.方案选择
判别语音段的起始点和终止点的问题主要归结为区别语音和噪声的问题。
①短时能量——如果能够保证系统的输入信噪比很高(即使最低电平的语音的能量也比噪声能量要高),那么只要计算输入信号的短时能量就基本能够把语音段和噪声背景区别开来。
但是,在实际应用中很难保证这么高的信噪比,仅仅根据能量来判断是比较粗糙的。
②短时平均过零率——它是语音信号时域分析中的一种特征参数。
它是指每帧内信号通过零值的次数。
在离散时间语音信号情况下,如果相邻的采样具有不同的代数符号就称为发生了过零。
如果是正弦信号,其平均过零率就是信号频率的两倍除以采样频率,而采样频率是固定的。
因此过零率在一定程度上可以反映信号的频率信息。
语音信号不是简单的正弦序列,所以平均过零率的表示方法就不那么确切。
③两级判决法——在用短时能量判断的同时,还需进一步利用短时平均过零率进行判断,因为清音比噪声的短时平均过零率比背景
噪声的平均过零率要高出高几倍。
即基于能量和过零率的端点检测方法,也称双门限比较法。
综上所述,选择第三种方法,更加准确,实现的程序也不是很复杂。
三、方法的理论介绍
1.第一级判决
a.先根据语音短时能量的轮廓选取一个较高的门限T1,进行一个粗
判:语音起止点位于该门限与短时能量包络交点所对应的时间间隔之外(即AB段之外)。
b.根据背景噪声的平均能量确定一个较低的门限T2,并从A点往左、
从B点往右搜索,分别找到短时能量包络与门限T2相交的两个点C和D,于是CD段就是用双门限方法根据短时能量锁判定的语音段。
2.第二级判决
以短时平均过零率为标准,从C点往左和从D点往右搜索,找到短时平均过零率低于某个门限T3的两点E和F,这便是语音段的起
止点。
门限T3是由背景噪声的平均过零率所确定的。
这里要注意,门限T2,T3都是由背景噪声特性确定的,因此,在进行起止点判决钱,通常都要采集若干帧背景噪声并计算其平均短时能量和平均过零率,作为选择T2和T3的依据。
当让,T1,T2,T3,三个门限值的确定还应当通过多次实验。
四、基于matlab 程序实现能量与过零率的端点检测方法的步骤 ① 语音信号x(n)进行分帧处理,每一帧记为Si (n ),n=1,2,…,N ,n 为离散语音信号时间序列,N 为帧长,i 表示帧数。
② 计算每一帧语音的短时能量,得到语音的短时帧能量:
()21N
i n Ei s n
==∑。
③ 计算每一帧语音的过零率,得到短时帧过零率:
()()1sgn sgn 1N
i i n Zi s n s n ==--⎡⎤⎡⎤⎣⎦⎣⎦
∑
④ 考察语音的平均能量设置一个较高的门限T1,用以确定语音开始,然后再根据背景噪声的平均能量确定一个稍低的门限T2,用以确定第一级中的语音结束点。
T2=α*En ,En 为噪声声段的平均值。
完成第一级判决。
第二级判决同样根据背景噪声的平均过零率Zn ,设置一个门限T3,用于判断语音前端的清音和后端的尾音。
五、程序实现
%zcro.m 过零率函数 function f=zcro(x) f=zeros(size(x,1),1);
for i=1:size(x,1) z=x(i,:)
for j=1:(length(z)-1);
if z(j)*z(j+1)< 0; f(i)=f(i)+1;
end
end
end
%fra.m 分帧函数
function f=fra(len,inc,x) fh=fix(((size(x,1)-len)/inc) +1)
f=zeros(fh,len);
i=1;n=1;
while i<= fh
j=1;
while j<=len
f(i,j)=x(n);
j=j+1;n=n+1;
end
n=n-len+inc;
i=i+1;
End
主程序
%% filename: yuyin.m clear all;
clf;
clc;
[filename,pathname]=
uigetfile('*.wav','Open wave file');
file = [pathname,filename]; [x,fs,nbits]=wavread(file);
len=length(x);
y1=buffer(x(1:len-1),200,100 );
y2=buffer(x(2:len),200,100); signs = (y1.*y2)<0;
diffs = (y1-y2)>0.002;
zcr = sum(signs.*diffs,1); %y=fra(50,50,x);
y=buffer(x,50,0);
y2=y.^2;
energy=sum(y2,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%% figure(1);
subplot(411);plot(x);
title('原始信号'); xlabel('样点数'); ylabel('幅度'); subplot(412); plot(energy); xlabel('帧数'); ylabel('短时能量E'); legend('N=50'); subplot(413);plot(zcr);
xlabel('帧数'); ylabel('过零点次数'); legend('N=50');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
六、验证
打开一个“ten.wav
”的语音文件,得到的结果如下所示
七、参考文献
《数字语音处理及matlab 仿真》 张雪英 编著
《Matlab7.0从入门到精通》 刘保住 苏彦华 张宏林 编著 《语音信号处理》 (第4版) 胡航 编著。