如何在帧上分割语音数据并计算MFCC

时间:2016-01-08 08:04:54

标签: speech-recognition speech-to-text speech cmusphinx

我理解创建自动语音识别引擎的基本步骤。但是,我需要清楚地了解如何完成分段以及帧和样本是什么。我会写下我所知道的并希望答案能够在我错误的地方纠正我并指导我。

我所知道的语音识别的基本步骤是:

(我假设输入数据是wav / ogg(或某种音频)文件)

  1. 预先强调语音信号:即,应用将强调高频信号的滤波器。可能是这样的:y [n] = x [n] - 0.95 x [n-1]
  2. 查找话语开始和调整剪辑大小的时间。 (可与第1步互换)
  3. 将剪辑分割成较小的时间范围,每个片段长度为30毫秒。此外,每个分段将有大约256帧,两个分段将有100帧的分离? (即30 * 100/256毫秒?)
  4. 将Hamming Window应用于每个帧(段的1/256)?结果是一组信号帧。
  5. 快速傅里叶变换由X(t)
  6. 表示的每个帧的信号
  7. Mel过滤银行处理:(尚未详细说明)
  8. 离散余弦变换:(尚未详细说明 - 但要知道这会给我一组MFCC,也称为每个输入话语的声学矢量。
  9. Delta Energy和Delta Spectrum:我知道这用于计算MFCC的delta和double delta系数,并不多。
  10. 在此之后,我想我需要使用HMM或ANN将Mel频率倒谱系数(delta和double delta)分类到相应的音素,并执行分析以将音素与单词和单词与句子匹配。
  11. 虽然这些对我来说很清楚,但如果第3步是正确的,我会感到困惑。如果正确,请在3中的步骤中将其应用于每个帧?另外,在第6步之后,我认为每一帧都有自己的MFCC,我是对的吗?

    提前谢谢!

1 个答案:

答案 0 :(得分:6)

  

将剪辑分割成较小的时间范围,每个片段长度为30毫秒。此外,每个分段将有大约256帧,两个分段将有100帧的分离? (即30 * 100/256毫秒?)

不是帧,而是样本。每帧30ms,8khz采样率为30/1000 * 8000 = 240个样本。帧重叠,帧之间的移位是10ms或80个样本。在这里看起来如何:

Signal split on frames

这里Q为80,K为240个样本。

  

如果正确,请在3中的步骤中将其应用于每个帧吗?

  

此外,在第6步之后,我认为每一帧都有自己的MFCC,我是对的。