0

我一直在研究吉他调音器应用程序。我知道 FFT 对于这种应用程序来说是一个糟糕的选择。然而,随着截止日期越来越近,我最初提交的规范指定使用该算法。所以不幸的是我被它困住了。

感谢对先前问题的回答和对本博客的使用:http: //blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

我有一个应用程序,它接收音频,计算频率和两个图表,并将结果与​​ 5 个八度音阶的已知音符范围进行比较。

最后一个问题是计算出的频率仍然与读入的频率不同。我使用了在线提供的频率发生器,我发现它会得到高于或低于给定音符的频率。

例如,读入 C 将在不同的八度音阶上得到升 B 或升 C。手机与噪声源的距离也会影响读数。

是否有发生这种情况并修复的已知示例,或者是因为 FFT 算法,我的应用程序无法正常工作?

我的代码可以在上一篇找到: Displaying a double (frequency) that is不断更新,同时使用Android录制

添加了一个低通滤波器以消除背景环境噪声,并添加了一个环形缓冲区以获得给定几个频率的平均值。

4

1 回答 1

1

如果您的频率有一点偏差,则可能意味着您需要对 FFT 结果使用更长的 FFT 或峰值估计算法(例如抛物线或其他插值内核)。

如果您的 FFT 频率结果跳跃八度音阶,则可能意味着您需要使用音高估计算法(例如倒谱/倒谱估计器、自相关/滞后估计器或谐波积频谱)来缩小允许的频率估计范围或低通滤波器带宽,等人

还要注意错误,例如使用错误的采样率或错误的数据格式等。

于 2013-05-27T18:32:01.140 回答