基于时域特征的语音信号端点检测
作者: 罗海涛
摘要:语音由发音器官发出,通过声电传感器,语音可以转化连续的模拟电信号;随着电子技术和计算机技术的进一步发展,语音信号的处理得到了飞速的发展;语音信号分析处理包括时域分析和频域分析两大类;语音的时域分析包括短时能量分析、短时过零率分析、短时相关分析,时域分析目的是提取语音时域特征,据此进行语音端点检测。
关键词:语音信号;时域分析;帧能量;帧过零率;端点检测
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2022)13-0096-03
语言是人类特有的能力,是人们相互交流的重要工具。语音由发音器官发出,通过声电传感器,语音可以转化连续的模拟电信号,例如电话机就属于这样一种转换,这就是最早的语音信号处理。通过声电和电声的转换,实现语音和电信号之间的相互转换,达到远距离传输的目的。随着电子技术和计算机技术的进一步发展,语音信号的处理得到了飞速的发展。
对语音信号进行分析和处理,一直是研究的热门。通常首先需要对连续的模拟语音信号进行采样和量化,转换为离散的数字信号,形成音频文件,便于计算机处理。用计算机进行语音信号处理,极大地提高了语音信号处理的效率。
语音信号分析处理包括时域分析和频域分析两大类。分析前通常需要先对语音信号进行分帧,即把语音信号分解为很多相对短时间的、固定时长的一段信号,称为帧。每一帧语音信号可以视为短时平稳的随机信号。时域分析用于分析和提取语音的时域特征,是最简单、直观的分析手段。语音的时域特征包括短时能量分析、短时过零率分析、短时相关分析等。这里短时指的是一帧语音。频域分析用于分析和提取语音的频域特征,这些特征包括语音的频谱、倒谱、复倒谱、功率谱等。分析方法有离散傅里叶变换、带通滤波器组,以及线性预测等[1]。
本文对语音信号进行时域分析,分析其帧能量,帧过零率等时域特征,并对语音进行端点检测。
1 语音采样数据的获取
目前很多用于语音处理的语音库文件都采用wav格式,这种文件格式是一种重要的数字音频文件格式。wav格式的文件没有对语音数据进行压缩,所以其文件比其他格式如MP3、MP4、RAM等格式的音频文件更大。但也正因为没有采用压缩技术,wav文件中声音的采样数据很容易被读出来,便于做其他处理。wav格式是微软公司开发的一种声音文件格式,也叫波形文件,是最早的数字音频文件格式,它具有RIFF(Resource Interchange File Format)格式。RIFF格式的wav文件由若干个Chunk(块)组成,按顺序为RIFF WAVE Chunk、Format Chunk、Fact Chunk(可选)和Data Chunk。每个块都有固定而且类似的格式,第1部分是块的ID,作为标识,4个字节,紧跟其后的是该块的大小,也是用4个字节表示,低字节表示低位,高字节表示高位;第3部分略有差异[2]。
笔者用C++编程,首先读取Web语音文件,为此,定义了四种结构体,分别对应上述4种块。再定义文件指针,并打开文件:
FILE *wav_in;
wav_in=fopen(filename,"rb");
wav文件是二进制文件,所以用参数"rb"。再结合文件位置指针进行读取:
file_pos=ftell(wav_in);
由于wav格式存储的语音数据是整数,因此定义了整型数组pcm_data来存储。存储在wav文件中的每个音频数据为16位,因此数组pcm_data是16位。
2 语音信号的端点检测
端点检测的目的是检测和确定语音信号的开始和结束端点,进而把非语音信号部分舍弃,只保留语音信号部分的数据,以减少数据量,节约计算机处理时间,从而提高处理速度。如果语音信号没有噪音,端点检测比较容易处理。可以简单通过语音信号的短时(帧)过零率,和短时(帧)能量检测到端点,因为语音信号都有一定的能量和过零率,而静音状态下的语音信号能量很小,几乎为0,过零率也没有。计算出每帧语音的能量和过零率,并比较相邻帧的能量和过零率,就这样可以确定语音的端点。
如果语音信号混合了噪音,端点检测过程比较复杂。除了帧能量和过零率之外,还需要结合其他的参数,才能确定语音的端点[3]。例如,可以结合频谱来分析端点,有些噪音的频率高于正常的语音信号,因此,可以把频谱中频率高的部分认为是噪音。也可以采取措施先消除噪声,例如用小波消除噪声[4]。小波变换是一个时间和频率的局部变换[5]。
先对语音信号进行分帧,帧长统一采用20ms,相邻两帧没有交叉重叠。
FrmLength=(unsigned short int)20.0*fmt_block.wavFormat.dwSamplesPerSec/1000;
其中dwSamplesPerSec是每秒采样点数,即采样率。上述语句把帧长由20ms时间转换为离散点数。
计算帧的数量:
nFrm=nSamples/FrmLength;
其中nSamples是采样点总数。
接下来通过一个循环计算每帧能量和过零率,其中,计算帧能量时,采用归一化的幅值的平方和。而过零率计算,则判断前后两个幅值,如果是异号,则过零率加2;如果是同号,则过零率不变。
(1) 置每帧能量初值为0,每帧过零率初值为0;
(2) 在一帧内,循环计算每个点的能量值,累加到本帧的能量中;判断前后两个语音点的幅值,如果是异号,则过零率加2;如果是同号,则过零率不变;
(3) 判断是否所有帧都计算机完毕,如果没有,则转(1),计算下一帧;如果所有帧都已经计算完毕,则循环结束,进入下面的端点检测。
端点检测就是确定语音信号的开始和结束端点,本文假设语音信号都是没有噪音的,因此,在没有语音的部分,信号幅值几乎等于零。大致步骤是:先确定端点所在帧,为此,设定一个阈值,再按顺序检测每一帧的能量。当检测到某一帧的能量大于等于阈值时,可以确定端点在这一帧。考虑到计算一帧语音的能量时,用的是归一化后的幅值的平方和,帧语音能量的绝对值不大,因此,设定阈值为1。具体步骤如下:
(1) 置帧号为1;
(2) 读取该帧语音能量;
(3) 判断其能量值是否大于等于1,若大于等于1,则该帧号就是起始端点所在帧,结束循环;否则帧号加1,转(2)。
确定结束端点所在帧时,从最后一帧语音开始,逆序向前检测每一帧语音的能量值,判断其是否大于等于阈值。具体步骤如下:
(1) 置帧号为帧数量,即最后一帧;
(2) 读取该帧语音能量;
(3) 判断其能量值是否大于等于1,若大于等于1,则该帧号就是结束端点所在帧,结束循环;否则帧号减1,转(2)。
确定端点所在帧之后,再在该帧语音内进一步确定具体哪个位置,才是语音的开始和结束端点。为此,也设定一个阈值0.05。之所以设置比较小的一个数,是因为用的是归一化后的幅值。在该帧范围内,从第一个点按顺序检测。当某个点的幅值归一化值大于等于0.05时,可以确定该点就是语音的端点。具体步骤如下:
(1) 置循环初值j=1;
(2) 由起始点所在语音帧号spFrm,以及j,由下式计算得到实际的语音采样点顺序号k,
k=(spFrm-1)*FrmLength+j;
(3) 获取该采样点的归一化幅值;
(4) 判断其幅值是否大于等于0.05,若大于等于0.05,则该采样点编号k就是起始端点的真实语音采样点号sp,结束循环;否则j+1,检测下一个采样点,转(2)。
确定语音结束端点的过程如下:
(1) 置循环初值j为帧长,即从结束端点所在帧的最后一个点开始,逆序往前逐个检测;
(2) 由结束点所在语音帧号epFrm,以及j,由下式计算得到实际的语音采样点顺序号k,
k=(epFrm-1)*FrmLength+j;
(3) 获取该采样点的归一化幅值;
(4) 判断其幅值是否大于等于0.05,若大于等于0.05,则该采样点编号k就是结束端点的真实语音采样点号ep,结束循环;否则j+1,检测下一个采样点,转(2)。
3 运算结果
本文录制了几个英文单词,音频文件全部为wav格式,用全面介绍的方法进行了预处理,包括分帧和端点检测,并且用图形把结果显示出来,如图1所示为英文单词“important”的语音波形及短时能量和短时过零率波形。
从图2可知,英文单词important的波形文件是双声道音频文件,第5行起是具体的双声道的采样数据。
从图3可以看出,端点检测结果是语音起始端点号为1797,该点采样数据位于第3帧。语音结束端点号为41453,该点采样数据位于第47帧。端点检测前采样点数为图2的46739,经过端点检测,去掉起始端点前,和结束端点后无语音部分采样点数据,剩余采样点数为图3的39657,其数据量减少为原来的84%,为后续处理减少了数据量。
图4所示为英文单词“dictionary”的语音波形及短时能量和短时过零率波形。
从图5可知,英文单词dictionary的波形文件也是双声道音频文件,第5行起是具体的双声道的采样数据。
从图6可以看出,端点检测结果是语音起始端点号为7676,该点采样数据位于第9帧。语音结束端点号为41222,该点采样数据位于第47帧。端点检测前采样点数为图5的47184,经过端点检测,去掉起始端点前,和结束端点后无语音部分采样点数据,剩余采样点数为图6的33547,其数据量减少为原来的71%。
其余计算结果也说明,端点检测是减少语音采样数据量的很有效的方法。
4 结语
随着计算机技术的发展,计算机语音处理技术获得了广泛的应用。其应用领域包括人工智能、虚拟现实、智能服务、智能家居等。语音信号处理实际上涉及多个学科领域,包括语音学、语言学、认知科学,以及心理学等多个学科。语音端点检测是检测和确定语音的实际起始端点和结束端点。明确了端点,就可以把端点以外的采样点数据舍弃,进而减少数据量,为后续处理提高效率。
参考文献:
[1] 赵力.语音信号处理[M].3版北京:机械工业出版社,2016.
[2] 罗海涛.wav格式与数据获取[J].电脑知识与技术,2016,12(27):211-213.
[3] 罗海涛.含噪语音信号端点检测[J].计算机时代,2017(10):8-10.
[4] Luo H T.Local thresholding de-noise speech signal[C]//SPIE Proceedings,Fifth International Conference on Digital Image Processing (ICDIP 2013).Beijing,China.SPIE,2013.
[5] 罗海涛.用小波消除语音噪声[J].福建电脑,2017,33(8):119-120.
【通联编辑:梁书】