2018-07-15 23:21:41 u013569304 阅读数 2489
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5905 人正在学习 去看看 杨波

2018-7-15

频谱

频谱是频率谱密度的简称,是频率的分布曲线

声音的构成

声音频率决定音调;声音振幅决定大小;声音谐波决定音色。之所以能分辨出不同乐器和不同人,只因为声音中谐波成份不同。

听感音高(声音音高)

音高指各种不同高低的声音,即音的高度,音的基本特征的一种。音的高低是由振动频率决定的,两者成正相关关系:频率(即单位时间内振动次数的多少)高则音"高",反之则"低"。

听觉响度(声音响度)

又称音量。人耳感受到的声音强弱,它是人对声音大小的一个主观感觉量。响度的大小决定于声音接收处的波幅,就同一声源来说,波幅传播的愈远,响度愈小;当传播距离一定时,声源振幅愈大,响度愈大。响度的大小与声强密切相关,但响度随声强的变化不是简单的线性关系,而是接近于对数关系。当声音的频率、声波的波形改变时,人对响度大小的感觉也将发生变化。

声道

Sound Channel,是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。

谐波

harmonicwavelength,是一个数学或物理学概念,是指周期函数或周期性的波形中能用常数、与原函数的最小正周期相同的正弦函数和余弦函数的线性组合表达的部分

共振峰

共振峰是指在声音的频谱中能量相对集中的一些区域,共振峰不但是音质的决定因素,而且反映了声道的物理特征。

线性预测

linearprediction,根据随机信号过去的p个已知抽样值序列Tn-1Tn-2…Tn-p,预测现时样值Tn的估计值的方法。预测公式是一个线性方程,所以这种预测称为线性预测。

LPC

线性预测编码,LPC通过分析话音波形来产生声道激励和转移函数的参数,对声音波形的编码实际就转化为对这些参数的编码,这就使声音的数据量大大减少

其核心思想是利用输入信号u和历史输出信号s的线性组合来估计输出序列s(n)

-过滤器模型、元音、辅音

参考人声的产生,气流从肺部出来,通过声带产生震动,形成声源激励。声源路经由声道构成的过滤器,输出最终的语音信号。声带只有在输出浊音时才震动,此时声源激励为准周期信号,也称为声门脉冲,其频谱呈单调递减的趋势。声道的频谱特性可由共振峰表征,在频谱上表现为各峰值。输出语音的频谱特性为前两者频谱的叠加。

上述的语音产生模型也称为源-过滤器模型(Source-Filter Model),声带震动产生的准周期信号为源,声道为过滤器。然而在真实的语音产生过程中,声带具有震动和不震动两种模式。当声带震动时,产生浊音(voiced sound),此时声源为准周期脉冲信号,模拟声带的周期震动,元音多为此类;当声带不震动时,产生清音(unvoiced sound),此时声源为白噪声随机信号,模拟气体紊流与摩擦,辅音多为此类。

LPCC

线性预测系数(LPCC):很好的模拟语音信号,语音信号是由声带振动发出的, 声带可以不振动也可以有周期的振动,分别对应清音(consonants)和浊音(vowels),每一段声管则对应一个 LPC 模型的极点。通常极点个数在 12-16 个左右,即可清晰地描述信号的特征了。

MFCC

Mel频率倒谱系数(MFCC),人的听觉系统是一种特殊的非线性系统,它对不同频率信号的响应灵敏度有较大区别。 MFCC参数比 LPC 参数更能够充分利用人耳的感知特性提高系统的识别性能,因其良好的抗噪性和鲁棒性而应用广泛

sphinx中也是用MFCC特征的,用帧frames去分割语音波形,每帧大概10ms,然后每帧提取可以代表该帧语音的39个数字,这39个数字也就是该帧语音的MFCC特征,用特征向量来表示。

Sphinx

CMU Sphinx(简称Sphinx)是美国卡内基梅隆大学开发的一系列语音识别系统的总称。在2000年,卡内基梅隆的Sphinx小组致力于开源几个语音识别器组件,包括Sphinx 2和后来的Sphinx 3(2001年)。 语音解码器带有声学模型和示例应用程序。

 

 

 

 

 

 

2018-08-10 18:58:51 dqxiaoxiao 阅读数 588
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5905 人正在学习 去看看 杨波

 

2016-08-27 09:20:28 xiao_jin 阅读数 1987
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5905 人正在学习 去看看 杨波

最近学习过程中整理的语音识别的基础知识的笔记


       语音识别本质上是一种模式识别的过程,未知语音的模式与已知语音的参考模式逐一进行比较,最佳匹配的参考模式被作为识别结果。

       当今语音识别技术的主流算法,主要有基于动态时间规整(DTW)算法、基于非参数模型的矢量量化(VQ)方法、基于参数模型的隐马尔可夫模型(HMM)的方法、基于人工神经网络(ANN)和支持向量机等语音识别方法。

一 .  语音识别分类:

根据对说话人的依赖程度 :

      1)特定人语音识别(SD):只能辨认特定使用者的语音,训练→使用。

      2) 非特定人语音识别(SI):可辨认任何人的语音,无须训练。

根据对说话方式的要求 :

     1)孤立词识别:每次只能识别单个词汇。

     2)连续语音识别:用者以正常语速说话,即可识别其中的语句。


二.  语音识别系统的基本流程

1)预处理模块:

         对输入的原始语音信号进行处理,滤除掉其中的不重要的信息以及背景噪声,

         语音信号的端点检测(找出语音信号的始末)、

         语音分帧(近似认为在10-30ms内是语音信号是短时平稳的,将语音信号分割为一段一段进行分析)

         预加重(提升高频部分)等处理

2)特征提取:

        去除语音信号中对于语音识别无用的冗余信息,保留能够反映语音本质特征的信息,并用一定的形式表示出来。

        目前的较常用的提取特征的方法还是比较多的,不过这些提取方法都是由频谱衍生出来的。

          梅尔频率倒谱系数(MFCC)参数因其良好的抗噪性和鲁棒性而应用广泛。MFCC 的计算首先用FFT将时域信号转化成频域,之后对其对数能量谱用依照Mel刻度分布的三角滤波器组进行卷积,最后对各个滤波器的输出构成的向量进行离散余弦变换DCT,取前N个系数。

        CMUsphinx中也是用MFCC特征的,用帧frames去分割语音波形,每帧大概10ms,然后每帧提取可以代表该帧语音的39个数字,这39个数字也就是该帧语音的MFCC特征,用特征向量来表示。


3)声学模型训练:

         根据训练语音库的特征参数训练出声学模型参数。在识别时可以将待识别的语音的特征参数同声学模型进行匹配,得到识别结果。

         目前的主流语音识别系统多采用隐马尔可夫模型HMM进行声学模型建模。声学模型的建模单元,可以是音素,音节,词等各个层次。对于小词汇量的语音识别系统,可以直接采用音节进行建模。而对于词汇量偏大的识别系统,一般选取音素,即声母,韵母进行建模。识别规模越大,识别单元选取的越小。(《HMM学习最佳范例》、《隐马尔科夫模型(hmm)简介》、《一文搞懂HMM》)

(4)语言模型训练:

          语言模型是用来计算一个句子出现概率的概率模型。

          语言建模能够有效的结合汉语语法和语义的知识,描述词之间的内在关系,从而提高识别率,减少搜索范围。语言模型分为三个层次:字典知识,语法知识,句法知识。

         对训练文本数据库进行语法、语义分析,经过基于统计模型训练得到语言模型。

         语言建模方法主要有基于规则模型和基于统计模型两种方法。统计语言模型是用概率统计的方法来揭示语言单位内在的统计规律,其中N-Gram模型简单有效,被广泛使用。它包含了单词序列的统计。

          N-Gram模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram

         Sphinx中是采用二元语法和三元语法的统计语言概率模型,也就是通过前一个或两个单词来判定当前单词出现的概率P(w2| w1)P(w3| w2, w1)


5)语音解码和搜索算法:

        解码器:

        1.  解码端通过搜索技术寻找最优词串的方法。

        2.  连续语音识别中的搜索,就是寻找一个词模型序列以描述输入语音信号,从而得到词解码序列。

        3.  基于动态规划的Viterbi算法,在每个时间点上的各个状态,计算解码状态序列对观察序列的后验概率,并在每个节点记录下相应的状态信息以便最后反向获取词解码序列。Viterbi算法本质上是一种动态规划算法,该算法遍历HMM状态网络并保留每一帧语音在某个状态的最优路径得分。

         搜索算法 :

           N-best搜索和多遍搜索:为在搜索中利用各种知识源,通常要进行多遍搜索,第一遍使用代价低的知识源(如声学模型、语言模型和音标词典),产生一个候选列表或词候选网格,在此基础上进行使用代价高的知识源(如4阶或5阶的N-Gram4阶或更高的上下文相关模型)的第二遍搜索得到最佳路径。

顺便记录了一下语音识别基础知识的思维导图如下 :




2018-07-19 19:53:27 u013569304 阅读数 2295
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5905 人正在学习 去看看 杨波

Viterbi算法是一个通用的求序列最短距离的动态规划算法。HMM模型的解码可以用Viterbi算法完成,解码过程可以描述为给定HMM的模型和观测序列,求给定观测模型下最可能出现的状态序列。

HMM最可能隐藏状态序列求解概述

在HMM模型的解码问题中,给定模型\small \lambda = (A, B, \Pi)和观测序列\small O =\{o_1,o_2,...o_T\},求给定观测序列O条件下,最可能出现的对应的状态序列\small I^*= \{i_1^*,i_2^*,...i_T^*\},即\small P(I^{\ast }|O)要最大化。

一个可能的近似解法是求出观测序列O在每个时刻t最可能的隐藏状态\small i^\ast_t然后得到一个近似的隐藏状态序列\small I^*= \{i_1^*,i_2^*,...i_T^*\}

给定模型λ和观测序列O,在时刻tt处于状态\small q_i的概率记为:

                                                          \small \gamma_t(i) = P(i_t = q_i | O,\lambda) = \frac{P(i_t = q_i ,O|\lambda)}{P(O|\lambda)}

利用前向概率和后向概率的定义可知:

                                                          \small P(i_t = q_i ,O|\lambda) = \alpha_t(i)\beta_t(i)

于是我们得到:

                                                          \small \gamma_t(i) = \frac{ \alpha_t(i)\beta_t(i)}{\sum\limits_{j=1}^N \alpha_t(j)\beta_t(j)}

因此在给定模型λ和观测序列O时,在时刻tt处于状态\small q_i的概率是\small \gamma_t(i),这个概率可以通过HMM的前向算法与后向算法计算。

这样可得:

                                                          \small i_t^* = arg \max_{1 \leq i \leq N}[\gamma_t(i)], \; t =1,2,...T

近似算法很简单,但是却不能保证预测的状态序列是整体是最可能的状态序列,因为预测的状态序列中某些相邻的隐藏状态可能存在转移概率为0的情况。而维特比算法可以将HMM的状态序列作为一个整体来考虑,避免近似算法的问题。

维特比算法概述

Viterbi算法是一个基于动态规划的解码算法,在HMM中,维特比算法定义了两个局部状态用于递推。

第一个局部状态是在时刻tt隐藏状态为ii所有可能的状态转移路径\small i_1,i_2,...i_t中的概率最大值。记为\small \delta_t(i):

                            \small \delta_t(i) = \max_{i_1,i_2,...i_{t-1}}\;P(i_t=i, i_1,i_2,...i_{t-1},o_t,o_{t-1},...o_1|\lambda),\; i =1,2,...N

\small \delta_t(i)的定义可以得到δ的递推表达式:

                           \small \delta_{t+1}(i) = \max_{i_1,i_2,...i_{t}}\;P(i_{t+1}=i, i_1,i_2,...i_{t},o_{t+1},o_{t},...o_1|\lambda) & = \max_{1 \leq j \leq N}\;[\delta_t(j)a_{ji}]b_i(o_{t+1})

第二个局部状态由第一个局部状态递推得到。我们定义在时刻t隐藏状态为i的所有单个状态转移路径\small (i_1,i_2,...,i_{t-1},i)中概率最大的转移路径中第t−1个节点的隐藏状态为\small \Psi_t(i),其递推表达式可以表示为:

                         \small \Psi_t(i) = arg \; \max_{1 \leq j \leq N}\;[\delta_{t-1}(j)a_{ji}]

有了这两个局部状态,我们就可以从时刻0一直递推到时刻T,然后利用\small \Psi_t(i)记录的前一个最可能的状态节点回溯,直到找到最优的状态序列。

维特比算法流程

输入:HMM模型\small \lambda = (A, B, \Pi),观测序列\small O=(o_1,o_2,...o_T)

    输出:最有可能的隐藏状态序列\small I^*= \{i_1^*,i_2^*,...i_T^*\}

    1)初始化局部状态:

                                        \small \delta_1(i) = \pi_ib_i(o_1),\;i=1,2...N

                                        \small \Psi_1(i)=0,\;i=1,2...N

    2) 进行动态规划递推时刻\small t=2,3,...T时刻的局部状态:

                                         \small \delta_{t}(i) = \max_{1 \leq j \leq N}\;[\delta_{t-1}(j)a_{ji}]b_i(0_{t}),\;i=1,2...N

                                         \small \Psi_t(i) = arg \; \max_{1 \leq j \leq N}\;[\delta_{t-1}(j)a_{ji}],\;i=1,2...N

    3) 计算时刻T最大的\small \delta_{T}(i),即为最可能隐藏状态序列出现的概率。计算时刻T最大的\small \Psi_t(i),即为时刻T最可能的隐藏状态。

                                        \small P* = \max_{1 \leq j \leq N}\delta_{T}(i)

                                        \small i_T^* = arg \; \max_{1 \leq j \leq N}\;[\delta_{T}(i)]

    4) 利用局部状态\small \Psi(i)开始回溯。对于\small t=T-1,T-2,...,1

                                         \small i_t^* = \Psi_{t+1}(i_{t+1}^*)

    最终得到最有可能的隐藏状态序列\small I^*= \{i_1^*,i_2^*,...i_T^*\}

Viterbi算法解码HMM实例

下面使用该文章中的HMM模型实例来说明Viterbi算法求解的过程。

 

我们的观察集合是:                                   

                                                   V={红,白},M=2

 

我们的状态集合是:

                                                  Q={盒子1,盒子2,盒子3},N=3

而观察序列和状态序列的长度为3.

初始状态分布为:

                                                  \small \Pi = (0.2,0.4,0.4)^T

状态转移概率分布矩阵为:

                                                  \small A = \left( \begin{array} {ccc} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 &0.5 \end{array} \right)

观测状态概率矩阵为:

                                                  \small B = \left( \begin{array} {ccc} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \end{array} \right)

球的颜色的观测序列:

                                                 O={红,白,红}

按照我们上一节的维特比算法,首先需要得到三个隐藏状态在时刻1时对应的各自两个局部状态,此时观测状态为1:

                                                 \small \delta_1(1) = \pi_1b_1(o_1) = 0.2 \times 0.5 = 0.1

                                                 \small \delta_1(2) = \pi_2b_2(o_1) = 0.4 \times 0.4 = 0.16

                                                \small \delta_1(3) = \pi_3b_3(o_1) = 0.4 \times 0.7 = 0.28

                                                \small \Psi_1(1)=\Psi_1(2) =\Psi_1(3) =0

 现在开始递推三个隐藏状态在时刻2时对应的各自两个局部状态,此时观测状态为2:

                               \tiny \delta_2(1) = \max_{1\leq j \leq 3}[\delta_1(j)a_{j1}]b_1(o_2) = \max_{1\leq j \leq 3}[0.1 \times 0.5, 0.16 \times 0.3, 0.28\times 0.2] \times 0.5 = 0.028

                               \tiny \Psi_2(1)=3

                               \tiny \delta_2(2) = \max_{1\leq j \leq 3}[\delta_1(j)a_{j2}]b_2(o_2) = \max_{1\leq j \leq 3}[0.1 \times 0.2, 0.16 \times 0.5, 0.28\times 0.3] \times 0.6 = 0.0504

                               \tiny \Psi_2(2)=3

                               \tiny \delta_2(3) = \max_{1\leq j \leq 3}[\delta_1(j)a_{j3}]b_3(o_2) = \max_{1\leq j \leq 3}[0.1 \times 0.3, 0.16 \times 0.2, 0.28\times 0.5] \times 0.3 = 0.042

                               \tiny \Psi_2(3)=3

    继续递推三个隐藏状态在时刻3时对应的各自两个局部状态,此时观测状态为1:

                                \tiny \delta_3(1) = \max_{1\leq j \leq 3}[\delta_2(j)a_{j1}]b_1(o_3) = \max_{1\leq j \leq 3}[0.028 \times 0.5, 0.0504 \times 0.3, 0.042\times 0.2] \times 0.5 = 0.00756

                                \tiny \Psi_3(1)=2

                                \tiny \delta_3(2) = \max_{1\leq j \leq 3}[\delta_2(j)a_{j2}]b_2(o_3) = \max_{1\leq j \leq 3}[0.028 \times 0.2, 0.0504\times 0.5, 0.042\times 0.3] \times 0.4 = 0.01008

                                \tiny \Psi_3(2)=2

                                \tiny \delta_3(3) = \max_{1\leq j \leq 3}[\delta_2(j)a_{j3}]b_3(o_3) = \max_{1\leq j \leq 3}[0.028 \times 0.3, 0.0504 \times 0.2, 0.042\times 0.5] \times 0.7 = 0.0147

                                \tiny \Psi_3(3)=3

    此时已经到最后的时刻,我们开始准备回溯。此时最大概率为\tiny \delta_3(3),从而得到\tiny i_3^* =3

    由于\tiny \Psi_3(3)=3,所以\tiny i_2^* =3, 而又由于\tiny \Psi_2(3)=3,所以\tiny i_1^* =3。从而得到最终的最可能的隐藏状态序列为:(3,3,3).

 

 

2019-07-13 20:22:19 hang__xiu2016acm 阅读数 92
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5905 人正在学习 去看看 杨波

 线性预测

线性预测(linear prediction)根据随机信号过去的p个已知抽样值序列为Sn-1,Sn-2,…Sn-p,预测现时样值Sn的估计值的方法。预测公式是一个线性方程,所以这种预测称为线性预测。

 

 声音的构成

声音频率决定音调;声音振幅决定大小;声音谐波决定音色。之所以能分辨出不同乐器和不同人,只因为声音中谐波成份不同。

 

 音强

声音的强度是一个客观的物理量,其常用单位为“分贝(db)”。声音强度由振动幅度的大小决定,以能量来计算称声强,以压力来计算表示声压,声强(I)与声压(P)的关系为:I=(p^2)/(pv) (此时P为有效值,若P为幅值,则I=(P^2)/(2PV),其中p为介质密度,v-声速。

 

 谐波

谐波是指对周期性非正弦交流量进行傅里叶级数分解所得到的大于基波频率整数倍的各次分量,通常称为高次谐波,而基波是指其频率工频(50Hz)相同的分量。

 

 声道

Sound Channel,是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。

 

 源-过滤器模型、元音、辅音

参考人声的产生,气流从肺部出来,通过声带产生震动,形成声源激励。声源路经由声道构成的过滤器,输出最终的语音信号。声带只有在输出浊音时才震动,此时声源激励为准周期信号,也称为声门脉冲,其频谱呈单调递减的趋势。声道的频谱特性可由共振峰表征,在频谱上表现为各峰值。输出语音的频谱特性为前两者频谱的叠加。

上述的语音产生模型也称为源-过滤器模型(Source-Filter Model),声带震动产生的准周期信号为源,声道为过滤器。然而在真实的语音产生过程中,声带具有震动和不震动两种模式。当声带震动时,产生浊音(voiced sound),此时声源为准周期脉冲信号,模拟声带的周期震动,元音多为此类;当声带不震动时,产生清音(unvoiced sound),此时声源为白噪声随机信号,模拟气体紊流与摩擦,辅音多为此类。

 

 听感音高声音音高

音高指各种不同高低的声音,即音的高度,音的基本特征的一种。音的高低是由振动频率决定的,两者成正相关关系:频率(即单位时间内振动次数的多少)高则音"高",反之则"低"。

 

 听觉响度(声音响度)

又称音量。人耳感受到的声音强弱,它是人对声音大小的一个主观感觉量。响度的大小决定于声音接收处的波幅,就同一声源来说,波幅传播的愈远,响度愈小;当传播距离一定时,声源振幅愈大,响度愈大。响度的大小与声强密切相关,但响度随声强的变化不是简单的线性关系,而是接近于对数关系。当声音的频率、声波的波形改变时,人对响度大小的感觉也将发生变化。

 

共振峰

共振峰是指在声音的频谱能量相对集中的一些区域,共振峰不但是音质的决定因素,而且反映了声道的物理特征。

共振峰是反映声道谐振特性的重要特征,它代表了发音信息的最直接的来源,而且人在语音感知中利用了共振峰信息。所以共振峰是语音信号处理中非常重要的特征参数,已经广泛地用作语音识别的主要特征和语音编码传输的基本信息。共振峰信息包含在频率包络之中,因此共振峰参数提取的关键是估计自然语音频谱包络,一般认为谱包络中的最大值就是共振峰。

 

基音、复音、纯音

基音是每个乐音中频率最低的纯音,其强度最大

一般的声音都是由发音体发出的一系列频率、振幅各不相同的振动复合而成的。这些振动中有一个频率最低的振动,由它发出的音就是基音,其余为泛音。

 

纯音(pure tone) 是单一声调的音。具有音高和响度两个基本特征。前者主要取决于发音体振动的频率,后者主要取决于振动的振幅。自然界很少有纯音。不同频率的纯音只是实验室内常用的声音信号。音叉和声频信号发生器可产生不同频率的纯音

复音,指的是由许多纯音组成的声音

 

音色

声音谐波决定音色,之所以能分辨出不同乐器和不同人,只因为声音中谐波成分不同。所谓谐波,当分音的频率是整数倍基音频率的时候,这些频率就叫谐波。另外,所有的谐波是按照一定顺序排列的,这意味着,基音频率是第一谐波,第一泛音就是第二谐波,第二泛音就是第三谐波,以此类推。

 

 

基频

基音的频率即为基频,决定整个音的音高在声音中,基频是指一个复音中基音的频率。在构成一个复音的若干个音中, 基音的频率最低, 强度最大。 基频的高低决定一个音的高低。 平常所谓语音的频率, 就是指基音的频率 基频用符号FO表示。

 

声调

声调,是指声音高低升降的变化

 

语调

语调(intonation),即说话的腔调,就是一句话里声调(pitch)高低抑扬轻重的配制和变化。

 

频谱

频谱是频率谱密度的简称,是频率的分布曲线。

 

 LPC

LPC是线性预测编码(linear predictive coding,LPC)是一种非常重要的编码方法。从原理上讲,LPC是通过分析话音波形来产生声道激励转移函数的参数,对声音波形的编码实际就转化为对这些参数的编码,这就使声音的数据量大大减少。在接收端使用LPC分析得到的参数,通过话音合成器重构话音。合成器实际上是一个离散的随时间变化的时变线性滤波器,它代表人的话音生成系统模型。时变线性滤波器既当作预测器使用,又当作合成器使用。分析话音波形时,主要是当作预测器使用,合成话音时当作话音生成模型使用。随着话音波形的变化,周期性地使模型的参数和激励条件适合新的要求。

拟人类的发声原理,通过分析声道短管级联的模型得到的。假设系统的传递函数跟全极点的数字滤波器是相似的,通常用12-16个极点就可以描述语音信号的特征。所以对于n时刻的语音信号,我们可以用之前时刻的信号的线性组合近似的模拟。然后计算语音信号的采样值和线性预测的采样值。并让这两者之间达到均方的误差(MSE)最小,就可以得到LPC。

其核心思想是利用输入信号u和历史输出信号s的线性组合来估计输出序列s(n)。

 

 LPCC

线性预测系数(LPCC):很好的模拟语音信号,语音信号是由声带振动发出的, 声带可以不振动也可以有周期的振动,分别对应清音(consonants)和浊音(vowels),每一段声管则对应一个 LPC 模型的极点。通常极点个数在 12-16 个左右,即可清晰地描述信号的特征了。

基于声道模型的重要特征参数。LPCC是丢弃了信号生成过程中的激励信息。之后用十多个倒谱系数可以代表共振峰的特性。所以可以在语音识别中取得很好的性能

 

 MFCC

MFCC:Mel频率倒谱系数的缩写。Mel频率是基于人耳听觉特性提出来的,它与Hz频率非线性对应关系。Mel频率倒谱系数(MFCC)则是利用它们之间的这种关系,计算得到的Hz频谱特征,MFCC已经广泛地应用在语音识别领域。由于Mel频率与Hz频率之间非线性的对应关系,使得MFCC随着频率提高,其计算精度随之下降。因此,在应用中常常只使用低频MFCC,而丢弃中高频MFCC。

在sphinx中也是用MFCC特征的,用帧frames去分割语音波形,每帧大概10ms,然后每帧提取可以代表该帧语音的39个数字,这39个数字也就是该帧语音的MFCC特征,用特征向量来表示。

Sphinx

CMU Sphinx(简称Sphinx)是美国卡内基梅隆大学开发的一系列语音识别系统的总称。在2000年,卡内基梅隆的Sphinx小组致力于开源几个语音识别器组件,包括Sphinx 2和后来的Sphinx 3(2001年)。 语音解码器带有声学模型和示例应用程序。

 

 

博文 来自: dqxiaoxiao

语音识别基本流程

阅读数 15435

没有更多推荐了,返回首页