我在MFCC遇到麻烦。我一步一步地按照教程。在“Windowing”步骤之后,我为每个帧计算DFT。我的问题是:剩余的步骤,包括“Mel-filter bank”,“log”和“DCT”,是否适用于每一帧?我感到困惑,因为在步骤“DCT”中,我们将采用之前计算的前13个系数。那么我们要采取什么框架呢?我真的需要一个明确的解释:(
答案 0 :(得分:1)
MFCC是纯粹的本地运营。它在每一帧上重复完成:for (auto f: frames) { std::vector<double> coeff = MFCC(f);
。这意味着MFCC的每个部分也都会重复进行。
答案 1 :(得分:1)
首先,我想建议this教程,如果你还没有看过它。
是的,您必须将DFT,Mel-filter bank,log和DCT应用于 EACH AND VERY FRAME ,然后获得DCT的前13个系数。系数可以存储在double数组的数组中(例如vector&lt; vector&lt; double&gt;&gt; mfcc)。然后每个mfcc(i).size = 13,即每帧的前13个系数。 因此,每个mfcc(i)将包含每个帧的13个系数,mfcc将是这13个系数的向量。
我建议您使用c ++ librry进行mfcc提取,而不是从头做事。