我目前正在使用音频分析的低音库,它可以计算FFT并将其作为数组返回,libmfcc使用此数据来计算我需要的MFCC系数的值。 (信息:MFCC就像一个音频谱,但它更符合人类听觉和频率缩放的工作方式) 低音库将值从0返回到1作为FFT值。
现在我遇到了几个问题和问题:
任何人都可以帮我解释为什么它会返回负值或我做错了什么?
我做了一个简单的示例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
答案 0 :(得分:0)
我可以回答第一部分: 示例代码清楚地表明输入数据是使用FFTW计算的,它产生unnormalized result。你需要除以sqrt(n)来得到标准化值,这是我怀疑BASS返回的。
也许将输入乘以sqrt(n)可以得到更好的结果。
答案 1 :(得分:0)
MFCC例程返回倒谱系数(梅尔强度对数的DCT)而不是梅尔强度值。倒谱系数可以为负。我相信示例代码中的值128确实是作者的错误。为了保留信号能量,FFT需要在某个点进行归一化(在FFT,iFFT之后或在两者之间分割)。在该示例中,您正在查看原始(未规范化的)幅度,这就是它们如此大的原因。