帮助计算/理解 MFCC:梅尔频率倒谱系数

信息处理 离散信号 信号分析 mfcc
2021-12-31 01:02:22

我一直在网上阅读一些零碎的东西,但我就是无法将它们拼凑在一起。我有一些信号/DSP 的背景知识,这应该是足够的先决条件。我有兴趣最终用 Java 编写这个算法,但我还不完全理解它,这就是我在这里的原因(它算作数学,对吧?)。

以下是我认为它与我的知识差距一起工作的方式。

  1. 从您的音频语音样本开始,比如一个 .wav 文件,您可以将其读入数组。调用此数组,其中的范围为(因此个样本)。这些值对应于我猜的音频强度 - 幅度。x[n]n0,1,,N1N

  2. 将音频信号拆分为 10 毫秒左右的不同“帧”,您假设语音信号是“静止的”。这是一种量化形式。因此,如果您的采样率为 44.1KHz,则 10ms 等于 441 个样本,或的值。x[n]

  3. 进行傅立叶变换(为了计算而进行 FFT)。现在这是在整个信号上完成还是在的每个单独帧上完成?我认为这是有区别的,因为通常傅里叶变换会查看信号的所有元素,因此连接,其中是较小的帧。无论如何,假设我们做了一些 FFT 并在剩下的部分中x[n]F(x[n])F(x1[n])F(x2[n])F(xN[n])xi[n]X[k]

  4. 映射到梅尔比例,并记录。我知道如何将常规频率数转换为梅尔刻度。对于中的每个(如果您允许的话,“x 轴”),您可以在此处执行公式:http ://en.wikipedia.org/wiki/Mel_scale 。的“y 值”或幅度如何呢?它们是否只是保持相同的值,但转移到新梅尔 (x-) 轴上的适当位置?我在一些论文中看到了一些关于记录 X[k] 的实际值的内容,如果其中一个信号被假定为你不想要的噪声,这个方程上的对数运算将乘性噪声变成了加性噪声,希望可以被过滤掉(?)。kX[k]X[k]X[k]X[k]=A[k]B[k]

  5. 现在最后一步是从上面对修改后的进行 DCT (但它最终被修改了)。然后你取这个最终结果的幅度,这些就是你的 MFCC。我读了一些关于丢弃高频值的东西。X[k]

所以我正试图真正解决如何逐步计算这些人,显然有些事情是从上面躲避我的。

另外,我听说过使用“滤波器组”(基本上是一组带通滤波器),不知道这是指从原始信号制作帧,还是您在 FFT 之后制作帧?

最后,我看到了一些关于具有 13 个系数的 MFCC?

1个回答

一步步...

1. & 2 . 这是对的。注意帧通常是重叠的,例如帧0是样本0到440;帧 1 是样本 220 到 660;第 2 帧是样本 440 到 880,依此类推...还要注意,窗口函数应用于帧中的样本。

3 . 对每一帧进行傅里叶变换。这背后的动机很简单:语音信号随时间变化,但在短片段上是固定的。您想单独分析每个短段 - 因为在这个段上,信号足够简单,可以用几个系数有效地描述。想想有人说“你好”。您不希望通过一次分析所有声音来看到所有音素折叠成一个单一的频谱(FFT 折叠时间信息)。你想看“hhhhheeeeeeeeeeeelloooooooooo”来逐步识别这个词,所以它必须被分解成短片段。

4 . “映射到梅尔刻度”具有误导性,这可能就是您感到困惑的原因。对此步骤的更好描述是:“通过一组调谐到梅尔缩放频率的滤波器计算信号能量”。这是如何完成的。我们认为个频率(常用值是)根据 mel 标度等距分布,介于 20 Hz(听力范围的底部)和奈奎斯特频率之间。实际示例:信号以 8kHz 采样,我们需要 40 个 bin。由于 4kHz(奈奎斯特)为 2250 mel,滤波器组中心频率将为:0 mel、2250 / 39 mel、2 x 2250 / 39 mel .. 2250 mel。NN=40

一旦定义了这些频率,我们就会计算每个频率周围的 FFT 幅度(或能量)的加权和。

看下图,代表一个有 12 个 bin 的滤波器组:

具有 12 个通道的梅尔频率滤波器组

第 8 个 bin 的中心频率约为 2kHz。第 8 个 bin 中的能量是通过将 1600 到 2800 Hz 的加权 FFT 能量相加得到的——权重在 2kHz 左右达到峰值。

实施说明:这堆加权和可以在一次操作中完成——“滤波器组矩阵”乘以 FFT 能量向量的矩阵乘法。

所以在这个阶段,我们已经将 FFT 频谱“总结”为一组 40 个(图中为 12 个)能量值,每个能量值对应于不同的频率范围。我们记录这些值。

5 . 下一步是对这 40 个对数能量序列进行 DCT。这将产生 40 个值。个系数是 MFCC(通常,)。实际上,第一个 DCT 系数是在上一步计算的所有对数能量的总和 - 因此它是信号响度的整体度量,对于信号的实际频谱内容不是很丰富 - 它通常被丢弃用于系统必须对响度变化具有鲁棒性的语音识别或扬声器识别应用。KK=13