kam*_*aci 9 java algorithm signal-processing mfcc
我正在用Java实现MFCC算法.
这里有一个示例代码:http://www.ee.columbia.edu/~dpwe/muscontent/practical/mfcc.m at Matlab.但是我对梅尔过滤器银行业务有一些问题.如何生成三角形窗口以及如何使用它们?
PS1:一篇描述MFCC的文章:http://arxiv.org/pdf/1003.4083
PS2:如果基本上有关于MFCC算法步骤的文档,那将是好的.
PS3: 我的主要问题是:MFCC与Java线性和对数滤波器一些实现使用线性和对数滤波器,其中一些不使用.什么是过滤器,什么是中心频繁的概念.我遵循那个代码:MFCC Java,它与代码之间的区别是什么:MFCC Matlab
作为频带滤波器的三角形窗口并不难实现。您基本上想要在每个频带内集成 FFT 数据(定义为中心频率i-1和 中心频率之间的频率空间i+1)。
你基本上是在寻找类似的东西,
for(int bandIdx = 0; bandIdx < numBands; bandIdx++) {
int startFreqIdx = centerFreqs[bandIdx-1];
int centerFreqIdx = centerFreqs[bandIdx];
int stopFreqIdx = centerFreqs[bandIdx+1];
for(int freq = startFreqIdx; i < centerFreqIdx; i++) {
magnitudeScale = centerFreqIdx-startFreqIdx;
bandData[bandIdx] += fftData[freq]*(i-startFreqIdx)/magnitudeScale;
}
for(int freq = centerFreqIdx; i <= stopFreqIdx; i++) {
magnitudeScale = centerFreqIdx-stopFreqIdx;
bandData[bandIdx] += fftData[freq]*(i-stopFreqIdx)/magnitudeScale;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不理解“中心频率”或“频带”或“滤波器”的概念,请拿起一本基本信号教科书 - 您不应该在不了解其作用的情况下实现该算法。
至于确切的中心频率是多少,这取决于你。实验并选择(或在出版物中查找)捕获您想要从数据中分离的信息的值。之所以没有明确的值,甚至没有值的比例,是因为该算法试图近似人耳,而人耳是一种非常复杂的听力设备。一种音阶可能更适合语音,而另一种音阶可能更适合音乐等。您可以选择合适的音阶。
| 归档时间: |
|
| 查看次数: |
4092 次 |
| 最近记录: |