我一直在网上阅读点点滴滴,但我无法将它们拼凑在一起。我对信号/ DSP有一定的背景知识,应该足以满足此要求。我有兴趣最终用Java对该算法进行编码,但我还不完全了解它,这就是为什么我在这里(它算作数学,对吗?)。

我就是这样


从音频样本开始,例如.wav文件,您可以将其读入数组。将此数组称为$ x [n] $,其中$ n $的范围为$ 0、1,\ ldots,N-1 $(因此为$ N $个样本)。这些值对应于我猜想的音频强度-振幅。
将音频信号分成10ms左右的不同“帧”,您假设语音信号是“固定的”。这是量化的一种形式。因此,如果您的采样率为44.1KHz,则10ms等于441个采样或$ x [n] $的值。现在,这是在整个信号上还是在$ x [n] $的每个单独帧上完成的?我认为这是有区别的,因为一般而言,傅立叶变换会查看信号的所有元素,因此$ \ mathcal F(x [n])\ neq \ mathcal F(x_1 [n])$与$ \ mathcal F(x_2 [n])$与$ \ ldots \ mathcal F(x_N [n])$合并,其中$ x_i [n] $是较小的框架。无论如何,假设我们进行了一些FFT,最后剩下$ X [k] $。
映射到梅尔刻度,并进行记录。我知道如何将常规频率数字转换为梅尔刻度。对于$ X [k] $中的每个$ k $(如果允许,则为“ x轴”),您可以在此处执行公式:http://en.wikipedia.org/wiki/Mel_scale。但是,“ y值”或$ X [k] $的幅度呢?它们是否只是保持相同的值,而是移至新的Mel(x-)轴上的适当位置?我在某篇论文中看到有关记录$ X [k] $的实际值的事情,因为如果$ X [k] = A [k] * B [k] $,则其中一个信号被认为是噪声不想,对等式的对数运算将乘性噪声转换为加性噪声,希望可以对其进行滤波(?)。
现在最后一步是对修改后的$ X [k] $进行DCT从上面(但是最终被修改了)。然后,您将获得最终结果的振幅,这些就是您的MFCC。我读到一些有关丢掉高频值的内容。

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

最后,我对具有13个系数的MFCC有一些了解吗?

评论

这是一个很好的问题,但是这里有很多要回答的问题。我建议将其分解为2-3个不同的问题(如果要保持连续性,可以参考另一个问题),以便更轻松地回答。

由于您之前曾在math.SE上问过同样的问题(并被告知dsp.SE是一个更好的家),所以也许您应该删除关于math.SE的问题。

我删除了math.SE
上的版本
非常好而且信息丰富的教程,谢谢。

嘿,您在您的问题中说:“映射到梅尔刻度,然后进行记录。我知道如何将常规频率数字转换为梅尔刻度。”您能帮我计算一下这部分吗?因为我的FFt输出为x [k] = 1 * 184,但我的三角带通滤波器的设置为20 * 3。那我该如何乘以两者。请ASAp

#1 楼

一步一步...

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

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

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

已经定义好了,我们将计算每个频率附近的FFT幅度(或能量)的加权和。

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



第8个bin的中心频率约为2kHz。第八个仓中的能量是通过将大约1600至2800 Hz的加权FFT能量求和而得到的-权重的峰值约为2kHz。单操作-“滤波器组矩阵”与FFT能量矢量的矩阵相乘。

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

5。下一步是采用40个对数能量序列的DCT。这将产生40个值。前$ K $系数是MFCC(通常$ K = 13 $)。实际上,第一个DCT系数是在上一步中计算出的所有对数能量的总和-因此,它是信号响度的整体度量,并且对信号的实际频谱含量不是很有帮助-通常将其丢弃适用于语音识别或说话者ID应用,其中系统必须对响度变化具有鲁棒性。

评论


$ \ begingroup $
关于Mel滤波器组的一个简短问题-高度/幅度范围从1.8-2很重要,或者它们可以是单位(1)高度吗?
$ \ endgroup $
– YoungMoney
13年1月14日在16:00

$ \ begingroup $
这并不重要。使用最大在1.0对2.0处的幅值只会在步骤4偏移对数能量一个常数,因此只会影响步骤5的第一个系数(无论如何通常都会舍弃)。请注意,某些实现方式使用能量归一化,因此滤波器越宽,其峰值幅度越低(i.imgur.com/IOaLa.gif)。这可能会导致识别应用程序中的轻微性能变化。如果您查看正在使用的MFCC实现,则实际上每个步骤都有许多小变化-bit.ly/ULatdL
$ \ endgroup $
–小食
13年1月14日在17:39

$ \ begingroup $
这是一个古老的话题,但是我需要对图形进行一些询问。如果奈奎斯特(Nyquist)是4kHz,为什么那些带限滤波器超过4kHz。 MFCC可以吗?通常,您不希望过滤器通过Nyquist吗?我对吗?
$ \ endgroup $
–主持人
15年2月26日在8:28

$ \ begingroup $
您是否参考了为什么使用N = 40个梅尔滤波器组频率(或26,我看到的另一个常见值)?
$ \ endgroup $
–詹姆斯·奥沃斯(James Owers)
16年8月14日在9:23



$ \ begingroup $
步骤4的39梅尔来自哪里?
$ \ endgroup $
– Germ Kommer
17 Mar 9 '17 at 14:32