MFCC值的差异

问题描述 投票:0回答:0

自己写代码提取MFCC,算法如下:

  1. 来自 file.wav 的数据
  2. 根据表达式预加重 “$x'[n] = x[n] - 0,97 * x[n-1]$”
  3. 成帧信号,帧长480,重叠240
  4. 带有汉明窗口的 480 长和 512 点 FFT 的 STFT,即 480 个值和 32 个零。 '$w[n] = 0,54 - 0,46 * cos(rac{2pin}{N-1}$)'
  5. 使用 formula
  6. 创建滤波器组
  7. 计算能量 $E[k] = |X[k]|^2$ 或信号的周期图 %P[k] = rac{|X[k]|^2}{N}%
  8. 将滤波器组应用于信号的周期图或能量并记录总和 $S[m] = ln{\sum_{k=1}^K H_m[k] * E[k]}$$S[m] = ln{\sum_{k=1}^K H_m[k] * P[k]}$
  9. 应用DCT %c[n] = \sum_{m=1}^M S[m] * cos( rac{pin(m+ rac{1}{2})}{M})%

将使用此方法获得的 MFCC 值与使用 matlab 函数计算的值进行比较,我得到大致相同的图片,但显然 matlab 函数具有不同类型的归一化并且滤波器组以不同的方式计算,我的值是大约比在 matlab 中获得的值大一个数量级。

此外,我的实现还提供了一个帧,即一个具有 6400 个样本的声音信号在我的例子中有 $26 = rac{6400}{480-240}$ 帧,在 matlab 中有 25 个。

应用滤波器组之前的计算大致相似,除了在我的例子中 FFT 是用 512 点的长度计算的,而 matlab 中的 stft() 函数给出了 241 个值,即 480 点转换。 filter banks 的值也相差大约一个数量级,但是如果使用值除以 10 的滤波器组,则图片与 matlab 的

不相似

因此,mel-spectrum(7 步)图像显示我的值中的第一个峰值(右侧)未显示,而MFCC 图像显示系数的值相差大约一个数量级。

这些值的原因可能是什么?

谢谢你的时间

signal-processing mfcc
© www.soinside.com 2019 - 2024. All rights reserved.