1 预加重
首先通过软件实现数字语音信号的预加重,预加重的作用是将高频提升,以弥补声音在唇部辐射时产生的高频损失。实现的方法是使用预加重数字滤波器,它一般是一阶的数字滤波器: 。μ值接近于1。(要有具体程序);
2 加窗、分帧
然后采用汉明窗对数字语音信号加窗,加窗的原因是:语音信号一般在10ms到30ms之间,我们可以把它看成是平稳的。为了处理语音信号,我们要对语音信号进行加窗,也就是一次仅处理窗中的数据。因为实际的语音信号是很长的,我们不能也不必对非常长的数据进行一次性处理。明智的解决办法就是每次取一段数据,进行分析,然后再取下一段数据,再进行分析。本文选择加汉明窗,汉明窗的窗函数是:。(这里要用C语言实现这个窗函数)本文将窗长定位20ms,即一帧的长度为20ms,帧移设为10ms;
3 语音信号的起始点和终止点检测。
本文借鉴期刊论文《一种语音端点检测方法的探究》中提出的基于经典端点检测方法——Lawrence Rabiner提出的以过零率ZCR和能量E为特征的端点检测方法改进的新算法。
以过零率ZCR和能量E为特征的起止点算法的根据是背景噪声与语音的短时段ZCR及E特征从统计看都有相当的区别。这里E特征指的是能量类特征,用到的是该类特征中得段时段平均幅度M特征。
过零率ZCR的定义为:在统计的短时段中,信号波形穿越零电平的次数。
记x(n)为离散语音信号时间序列;w(n)为时窗函数(其有效长度为N),可以为矩形窗,如汉明窗等。则ZCR和M的计算式分别为:
其中sign[x(n)]=1(当x(n)≥0)或sign[x(n)]=-1(当x(n)<0);w(n)=1/2N(0≤n≤N-1)或w(n)=0(n为其它)。
该方法的要点为:由于采集声音信号的最初的短时段为无语音段,仅有均匀分布的背景噪声信号。这样就可以用已知为“静态”的最初几帧(一般取10帧)信号计算其过零率阈值IZCT及能量阈值ITL(低能量阈)和ITU(高能量阈)。
IZCT的具体计算式为:
(1)
其中IF为固定值,一般取25;和分布为根据所取最初10帧样值算得的过零率的“均值”和“标准差”。
计算ITL和ITU时,先算出最初10帧信号每帧的平均幅值M,最大者记为IMX,最小者记为IMN。然后令:
I1=0.03×(IMX-IMN)+IMN
I2=4×IMN
最后按下式计算出ITL和ITU:
ITL=min(I1,I2) (2)
ITU=5×ITL (3)
接下来就可以用过零率阈值IZCT及能量阈值ITL(低能量阈)和ITU(高能量阈)来进行起点及止点的判别。
先根据ITL、ITU算得一初始起点N1。方法为从第11帧开始,逐次比较每帧的平均幅度&