android - 在 AudioRecord Android 中查找峰值频率

标签 android audio signal-processing fft android-audiorecord

我需要不断地识别 prek 频率。我试过 FFTJTransform
但我没有得到正确的频率,而且它有很多噪音。我不知道如何纠正。我在谷歌上搜索过,不幸的是我没有找到合适的。
因此,如果您有任何其他确定峰值频率的工作示例。

请与我们分享,

谢谢。

最佳答案

我仍然不确定您的输入信号是什么,或者您如何知道您从傅立叶分析和/或峰值检测器中获得了错误的峰值频率。

一般来说,要测试 FFT,您需要合成纯音,例如这个 32 Hz 余弦音。

Synthetic 32 Hz cosine tone - Sooeet.com FFT calculator

当您使用 FFT 处理这个纯音时,您应该得到一个 32 Hz 的单峰,如下所示:

FFT spectrum of synthetic 32 Hz cosine tone - Sooeet.com FFT calculator

要测试您的峰值检测代码,您需要将 32 Hz 音调衰减为一半功率,并在 64 Hz 处添加另一个全功率纯音,如下所示:

Synthetic 32 Hz and 64 Hz cosine tones - Sooeet.com FFT calculator

当您使用 FFT 处理这两个谐波时,您应该在 32 赫兹和 64 赫兹处得到两个峰值,并且 32 赫兹峰值的功率应该是 64 赫兹峰值的一半。

FFT spectrum of synthetic 32 Hz and 64 Hz cosine tones - Sooeet.com FFT calculator

在您的代码可以很好地处理上述合成信号后,您应该尝试一个真实的已知信号,例如在原声吉他上拨动的这个单个 E2 音符:

Guitar E2 note - Sooeet.com FFT calculator

此 E2 音符信号的 FFT 频谱如下所示:

FFT spectrum of guitar E2 note - Sooeet.com FFT calculator

对于这个真实信号,您的峰值功率检测器应该找到 161 Hz 的峰值,对于这个信号来说,它恰好是 E2 音符的一次谐波。 80 Hz 处的较低功率峰值是 E2 音符的真实基频。

可以使用 Sooeet FFT calculator 生成合成信号和真实信号

关于android - 在 AudioRecord Android 中查找峰值频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130762/

相关文章:

ios - 如何用值初始化 nsstring?

android - 在Android应用中进行屏幕录制时阻止录制音频

python - Python 中的信号分析 - 从曲线中去除异常值

python - 如何根据功率谱密度确定我的数据是否为 ​​1/f 噪声?

android - DrawerLayout 隐藏在 GridView 下面

android - 在 ListActivity 中设置内容 View 崩溃

android - 设置 calendar.DAY_OF_MONTH 时出现问题

android - 如何在Android中制作传统蒙文字体TextView

javascript - HTML 音频 - 我如何检测流是否可用?

c# - 实时音频输入的每分钟节拍数