发明名称 一种利用切割—分层构筑法的语音识别方法
摘要 本发明提供了一种利用切割—分层构筑法的语音识别方法,采集语音信号后对语音信号进行分帧,然后提取语音特征参数,计算每帧语音的归一化复杂度能量和归一化过零率,然后对语音进行切割,切割后每段语音只有单字或双字,最后对切割好的各段语音分别进行识别。本发明降低了识别效果对切割精度的依赖性,当两个字的发音连续难以切割时就采用两层分层构筑法对其进行识别,而两层分层构筑法的计算量可以接受,能够实时完成,这样就同时保证了识别效果和识别耗时。
申请公布号 CN102820031B 申请公布日期 2014.06.11
申请号 CN201210284560.5 申请日期 2012.08.06
申请人 西北工业大学 发明人 董月汉
分类号 G10L15/00(2013.01)I;G10L15/02(2006.01)I;G10L15/04(2013.01)I;G10L15/14(2006.01)I 主分类号 G10L15/00(2013.01)I
代理机构 西北工业大学专利中心 61204 代理人 顾潮琪
主权项 1.一种利用切割—分层构筑法的语音识别方法,其特征在于包括下述步骤:步骤一:采集语音信号,采样频率f为8000Hz到12000Hz;步骤二:依据采样频率f确定帧长len和帧移inc,对语音信号进行分帧,将语音信号分成每20~30毫秒一段,相邻两帧起始点之间的间隔为10毫秒,即两帧之间有10~20毫秒的交叠;步骤三:提取语音特征参数,以MFCC参数为基础构建特征参数;步骤四:计算每帧语音的归一化的C<sub>0</sub>复杂度的能量C<sub>0</sub>E<sub>0</sub>和归一化过零率ZCR<sub>0</sub>,计算方法如下:1)归一化C<sub>0</sub>复杂度能量C<sub>0</sub>E<sub>0</sub>:(1)计算每帧语音的归一化短时能量e<sub>0</sub>(i)=e(i)/max(e),其中,<img file="FDA0000472056060000011.GIF" wi="391" he="143" />x<sub>i</sub>(n)表示第i帧第n个语音数据;(2)对每帧序列s(n)进行离散FFT变化转换到频域,得到幅度谱S(n);(3)计算该帧幅度谱的平均值<img file="FDA0000472056060000012.GIF" wi="534" he="138" />其中N为帧长;(4)大于S<sub>0</sub>的频率部分属于规则部分,小于或等于S<sub>0</sub>的部分属于随机部分,在此只取规则部分成分,公式如下:<maths num="0001"><![CDATA[<math><mrow><msup><mi>S</mi><mo>&prime;</mo></msup><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>S</mi><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow><mo>,</mo></mtd><mtd><mi>S</mi><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow><mo>></mo><msub><mi>S</mi><mn>0</mn></msub></mtd></mtr><mtr><mtd><mn>0</mn><mo>,</mo></mtd><mtd><mi>S</mi><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow><mo>&le;</mo><msub><mi>S</mi><mn>0</mn></msub></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>(5)对规则部分成分的幅度谱S'(k)转化到频域并作IFFT变换,所得的s<sub>1</sub>(n)即为规则部分时间序列;(6)求出总运动测度<img file="FDA0000472056060000014.GIF" wi="297" he="145" />和随机运动测度<img file="FDA0000472056060000015.GIF" wi="460" he="147" />即可求得每帧的C<sub>0</sub>复杂度<img file="FDA0000472056060000016.GIF" wi="243" he="141" />(7)令C<sup>*</sup>(n)=1-C(n),C<sub>0</sub>(n)=C<sup>*</sup>(n)/max(C<sup>*</sup>);(8)令C<sub>0</sub>E(n)=C<sub>0</sub>(n)*e<sub>0</sub>(n),即可得到归一化的C<sub>0</sub>复杂度的能量C<sub>0</sub>E<sub>0</sub>(n)=C<sub>0</sub>E(n)/max(C<sub>0</sub>E);2)归一化过零率ZCR<sub>0</sub>:设定一个门限Δ<sub>1</sub>,当前后两个采样的符号不同,而且差值大于Δ<sub>1</sub>的时候,就将过零率的数值加1,这样即可得到过零率ZCR,再得到归一化过零率ZCR<sub>0</sub>(n)=ZCR(n)/max(ZCR);步骤五:用下述方法对语音进行切割,切割后每段语音只有单字或双字;(1)定义语音信号的四个状态,每帧语音只能处于其中之一,如表1说明;表1语音信号状态说明<tables num="0001"><table><tgroup cols="2"><colspec colname="c001" colwidth="47%" /><colspec colname="c002" colwidth="53%" /><tbody><row><entry morerows="1">状态号(Status)</entry><entry morerows="1">状态说明</entry></row><row><entry morerows="1">0</entry><entry morerows="1">语音前静音</entry></row><row><entry morerows="1">1</entry><entry morerows="1">语音段</entry></row><row><entry morerows="1">2</entry><entry morerows="1">语音中静音</entry></row><row><entry morerows="1">3</entry><entry morerows="1">语音后静音</entry></row></tbody></tgroup></table></tables>(2)确定状态转移条件,如表2说明:表2状态转移条件<img file="FDA0000472056060000021.GIF" wi="1862" he="1074" />表2中,silence为静音段已经持续的帧数,而Zcr1、Zcr2、Zcr3、C<sub>0</sub>E1、C<sub>0</sub>E2、minlen、maxsilence为由实验得到的门限值,con为当前语音段已经持续的帧数,silence为当前静音状态已经持续的帧数,Zcr<sub>0</sub>(n)为第n帧的归一化过零率,C<sub>0</sub>E<sub>0</sub>(n)为第n帧的归一化C<sub>0</sub>复杂度能量;(3)开始切割:令状态号status的初始值为0,然后依据状态转移条件依次对每帧信号进行判断,若发生了状态0到状态1和状态2到状态1,则标记当前帧数为某一语音的起始点,若发生了状态1到状态2,则标记当前帧数为某一语音的结束点,当状态转移到3时,则标记当前帧数减去silence值为最后一个数字语音的结束点,并结束切割算法;步骤六:对切割好的各段语音分别进行识别,若某段语音长度大于经验门限maxlen,则定义为双字部分,用两层分层构筑法对其进行识别,否则定义为单字部分,用孤立字的识别方法进行识别,在隐马尔科夫模型HMM下,用Viterbi算法进行识别。
地址 710072 陕西省西安市友谊西路127号