0

我目前正在使用低音库进行音频分析,它可以计算 FFT 并将其作为数组返回,libmfcc 使用此数据来计算我需要的 MFCC 系数的值。(信息:MFCC 就像一个音频频谱,但它更适合人类听觉和频率缩放的工作方式)低音库返回从 0 到 1 的值作为 FFT 值。

现在我遇到了几个问题和疑问:

  • 他们的 FFT 示例数据似乎具有不同的格式,值非常高,并且 8192 个 FFT 值的总和为 10739.24 ,这怎么可能?[/li]
  • 在他们的示例应用程序中,他们调用函数,如下所示。如果他们只加载 8192 个值,为什么他们使用 128 作为 FFT 数组大小?
  • 使用我复制和编辑的他们的 MFCC 类以匹配 C# 语法/函数我得到一些系数的负值,我不认为应该是这种情况。

谁能帮我解释为什么它返回负值或我做错了什么?我做了一个简单的示例 Ready to Try Program,它完成了上述操作,对调试很有用。
链接:http ://www.xup.in/dl,17603935/MFCC_Test.rar/

我的 C# 应用程序的输出(很可能不正确)

Coeff 16 = 0,017919318626506 Coeff 17 = -0,155580763009355 Coeff 18 = -0,76072865841987 Coeff 19 = 0,108961510335727 Coeff 20 = 0,819025783804398 Coeff 21 = -0,660508603974514 Coeff 22 = -0,951623924906163 Coeff 23 = 0 ,424922129906254 Coeff 24 = 0,0129727009313168 Coeff 25 = -0,388796833267654 Coeff 26 = 0,270839393161931 Coeff 27 = -0,138515788828431 Coeff 28 = -0,454837674981149 Coeff 29 = -0,448629344922371 Coeff 30 = -0,11908663618393 Coeff 31 = 0,237500036702818 Coeff 32 = 0,114874386870208 Coeff 33 = -0,100822381384326 Coeff 34 = 0,144242143551012 Coeff 35 = 0,209338502838453 Coeff 36 = 0,247588420953066 Coeff 37 = -0,451654204112441 Coeff 38 = 0,0346927542067229 Coeff 39 = 0,180816031061584

他们的示例 FFT 数据(不同格式?)

14.524506 38.176063 10.673860 3.705076 2.102398 1.461585 1.145616 0.974108 0.878079 0.825304 0.798959 0.789067 0.789914 0.797102 0.808576 0.822048 0.836592 0.851101 0.864869 0.877625 0.888780 0.897852 0.905033 0.910054 0.912214 0.912414 0.909593 0.904497

4

2 回答 2

0

我可以回答第一部分:示例代码清楚地表明输入数据是使用FFTW计算的,这会产生未标准化的结果。您需要除以 sqrt(n) 以获得归一化值,这是我怀疑 BASS 返回的值。

也许将您的输入乘以 sqrt(n) 会给您带来更好的结果。

于 2012-02-09T19:00:36.473 回答
0

MFCC 例程返回倒谱系数(mel 幅度对数的 DCT),而不是mel 幅度值。倒谱系数可以是负数。我相信示例代码中的值 128 确实是作者的错误。为了保留信号能量,FFT 需要在某个点进行归一化(在 FFT、iFFT 之后或在两者之间拆分)。在示例中,您正在查看原始(非标准化)幅度,这就是它们如此之大的原因。

于 2019-04-03T08:36:24.830 回答