如何拆分帧上的语音数据并计算 MFCC

How to split speech data on frames and compute MFCC

我了解创建自动语音识别引擎的基本步骤。但是,我需要更清楚地了解分割是如何完成的以及帧和样本是什么。我会写下我所知道的,并期待回答者在我错误的地方纠正我并进一步指导我。

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

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

  1. 预强调语音信号:即,应用一个滤波器来强调高频信号。可能是这样的:y[n] = x[n] - 0.95 x[n-1]
  2. 找到说话开始的时间并调整剪辑的大小。 (可与步骤 1 互换)
  3. 将剪辑分成更小的时间帧,每个片段大约 30 毫秒长。此外,每个段将有大约 256 帧,两个段将有 100 帧的分离? (即 30*100/256 毫秒?)
  4. 将汉明 Window 应用于每个帧(一个片段的 1/256)?结果是一组信号帧。
  5. 对X(t)表示的每一帧信号进行快速傅立叶变换
  6. Mel 滤波器组处理:(尚未详述)
  7. 离散余弦变换:(尚未详细介绍 - 但知道这将为我提供一组 MFCC,也称为每个输入话语的声学向量。
  8. Delta Energy和Delta Spectrum:我知道这个是用来计算MFCCs的delta和double delta系数的,不多。
  9. 在此之后,我认为我需要使用 HMM 或 ANN 将 Mel 频率倒谱系数(delta 和 double delta)分类为相应的音素,并执行分析以将音素与单词匹配以及分别将单词与句子匹配。

虽然这些对我来说很清楚,但我对第3步是否正确感到困惑。如果它是正确的,在第 3 步之后的步骤中,我是否将其应用于每一帧?另外,在第 6 步之后,我认为每个帧都有自己的一套 MFCC,对吗?

提前致谢!

Segment the clip into smaller time frames, each segment being like 30msecs long. Further, Each segment will have about 256 Frames and two segments will have a seperation of 100 Frames? (i.e., 30*100/256 msec ?)

不是帧,而是样本。在 8khz 采样率下,每帧 30ms 是 30/1000 * 8000 = 240 个样本。帧重叠,帧之间的偏移为 10 毫秒或 80 个样本。这是它在图片上的样子:

此处Q为80,K为240个样本。

If it is correct, in the steps following 3, do I apply that to each frame?

Also, after step 6, I think that each frame has their own set of MFCC, am I right.

是的。