我需要不断地识别 prek 频率。我试过 FFT
和 JTransform
但我没有得到正确的频率,而且它有很多噪音。我不知道如何纠正。我在谷歌上搜索过,不幸的是我没有找到合适的。
因此,如果您有任何其他确定峰值频率的工作示例。
请与我们分享,
谢谢。
最佳答案
我仍然不确定您的输入信号是什么,或者您如何知道您从傅立叶分析和/或峰值检测器中获得了错误的峰值频率。
一般来说,要测试 FFT,您需要合成纯音,例如这个 32 Hz 余弦音。
当您使用 FFT 处理这个纯音时,您应该得到一个 32 Hz 的单峰,如下所示:
要测试您的峰值检测代码,您需要将 32 Hz 音调衰减为一半功率,并在 64 Hz 处添加另一个全功率纯音,如下所示:
当您使用 FFT 处理这两个谐波时,您应该在 32 赫兹和 64 赫兹处得到两个峰值,并且 32 赫兹峰值的功率应该是 64 赫兹峰值的一半。
在您的代码可以很好地处理上述合成信号后,您应该尝试一个真实的已知信号,例如在原声吉他上拨动的这个单个 E2 音符:
此 E2 音符信号的 FFT 频谱如下所示:
对于这个真实信号,您的峰值功率检测器应该找到 161 Hz 的峰值,对于这个信号来说,它恰好是 E2 音符的一次谐波。 80 Hz 处的较低功率峰值是 E2 音符的真实基频。
可以使用 Sooeet FFT calculator 生成合成信号和真实信号
关于android - 在 AudioRecord Android 中查找峰值频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130762/