我正在尝试根据我发现的这篇论文(http://arxiv.org/pdf/1003.4083.pdf)来计算MFCC算法,所以到目前为止我所做的是:
步骤1)预先强调
步骤2)框架
步骤3)汉明窗口
步骤4)快速傅立叶变换
步骤5)Mel过滤银行处理
步骤6):离散余弦变换
基本上,我使用Mel Bank过滤器并将它们乘以实际的原始信号。然后,我对这些结果执行了FFT,如下所示:
第1帧的FFT:
然后我计算了FFT的DCT,其结果如下:
第1帧的DCT:
到目前为止,这看起来是否正确?有没有办法让我检查一下,以便我知道我正朝着正确的方向前进?
另外,我需要获得13个系数,但我不知道如何确定这些系数。我得到256个值,所以我采取前13个值吗?或者,我能获得总能量吗?
我希望有人可以帮助我。
答案 0 :(得分:8)
经过几天搜索类似的东西,我偶然发现了一个非常有用的教程,如何获得MFC Coeficients: Mel Frequency Cepstral Coefficient (MFCC) tutorial
(虽然线程陈旧,但我希望答案可能有助于未来的读者)
答案 1 :(得分:4)
我对你刚写的东西很困惑。我唯一需要知道的是 我把信号分成帧,n = 100,m = 256(我相信) 它产生大约390个块,因此有13个系数 每个块或整个声音只有13?
答案是每个块有13个系数,而不是整个声音文件。
并且你计算mfcc系数的方法是错误的,你应该遵循你提到的1-6步。
步骤1)预先强调整个声音文件。
步骤2)构建整个声音文件以获得许多块
步骤3)每个块的汉明窗口
步骤4)每个块的快速傅里叶变换
步骤5)每个块的Mel过滤器库处理
步骤6):每个块的离散余弦变换
答案 2 :(得分:2)
不,你错了。
您需要在FFT之后计算梅尔滤波器组能量的对数,然后才应用DCT。滤波器组的能量数量应该是20或40左右,在DCT之后你应该得到20或40个数字并且先取13个。
你用FFT做的事情都错了。
您可能想要阅读一些MFCC代码而不是从头开始做某些事情,那里有很多实现,例如在sphinxbase中: