使用 Java 进行光谱质心计算

问题描述

我正在用 Java 制作音频分析工具。我确信我的 FFT 输出非常好,并且我正在使用从 FFT 函数获得的功率谱阵列(大小为 4096)来计算谱质心。

这是代码片段:

//Implemented from https://github.com/dmcennis/jMir/blob/master/jMIR_2_4_developer/jAudio/src/jAudioFeatureExtractor/AudioFeatures/SpectralCentroid.java
total = 0.0;
double weighted_total = 0.0;
for (int i = 0; i < 4096; i++)
{
    total += power_spectrum[i];
    weighted_total += i * power_spectrum[i];
}
//Spectral Centroid Calculation
avgSpecCentroid = weighted_total / total;

但是,当我在我的应用程序中对此进行测试时,我发现质心值始终为 ~2048,没有太大波动。我曾尝试使用不同的声音频率进行测试(使用 this Youtube video),但该值与 2048 相比没有太大变化。

需要注意的一点是;我的功率谱阵列大小是 4096,输出总是在 2048 左右。有人可以帮我理解我哪里出错了,我该如何解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)