|
|
开个帖子,欢迎各位有兴趣的筒子来讨论语音识别技术。
(语音识别中最重要最难得就是元音的识别.不熟悉的朋友,我简单介绍一下概念)
首先进行傅里叶级数的计算(praat里面有不错的算法),可以求出下列数据:
第一共振峰(F1) ---- 舌位高低
第二共振峰(F2) ---- 舌位前后&唇形圆否
第三共振峰(F3) ---- 唇形圆否
但是这些规则对于像中文,英语这样的语言,并不是那么直接,需要更复杂的算法。
我简单说下我最近积累的经验:
不同的语言,听觉习惯不同,比如说我的母语吧 (江淮汉语和华北汉语的混合语),
(1) 不会分析F2和F3的共同变化,比如嘴唇拢圆说 a , 导致 F2 频率降低, 实际上舌位并没有变,
因此,如果按照我日语的听觉,变化前后都会听成同一个音(舌位高低由F2 F3共同决定)
但是按我母语的听觉,我只会听出 F2 的变化,以至于认为听到了后元音. 其实还是前元音.
---- 有些语言可能只看 F2 而不考虑 F3 对 F2 的影响!
(2) 混淆F1和F2(对于前中元音)从数学上说这是因为:
半低前元音 比 半高前元音, 要来的 后 一些,所以,E和e的听觉,同时涉及到了F1和F2,
于是很难用耳朵听出正确的中元音的舌位,有时候把F2误作F1有时候相反
---- 有些语言可能是 F1 和 F2 纠缠在一起的!
(3) 如果同时考虑到 (1)(2) 那么问题更复杂了
(4) 元音 i 和半元音 j 在频谱上有巨大区别,不管什么语言,听上去i,j都是一样的,但是,
反映在频谱上 j 和 i 根本不同, j 根本没有固定的舌位,有时候比竟 e 还要低。
日本语元音识别
(最简单的了,日语只有5单元音,而且双元音==单元音组合,且不分口形!)
我觉得几条线性判定边界就可以搞定了。
(首先需要把 F3,F2 换算成 舌位的前后,日语不区分口型的)
下面我随便估算几个判定边界: (具体可以用线性神经网络去确定!)
F1大于 650 F2(不圆唇)小于1800(其实可不看F2) 就可以算 a 了.
F1小于 370 F2(不圆唇)大于1900就可以算 i 了.
F1小于 420 F2(不圆唇)小于1600就可以算 u 了.
F1 370-650 F2(不圆唇)大于1800就可以算 e 了.
F2 420-650 F2(不圆唇)小于1600就可以算 o 了.
这些边界已经放的很宽了,其他情况--日语没有的元音。当然你也可以完全放宽。
15个日本大学生的平均F1,F2水平
a i u e o
F1 711.69 294.31 325.40 476.48 462.34
F2 1214.52 2318.00 1519.93 1947.06 909.12
特别提醒: 我没有F3(唇形)数据,所以这里的 F2 不能直接用!!
(因为日语不区分口型,所以要去掉F3的影响)
中文的识别
太复杂了...中文的复合元音就更复杂了...再加上个人发音不同... |
|