我一直致力于吉他调音器的应用。我知道FFT对于这种应用来说是一个糟糕的选择。但是,随着截止日期越来越近,我的原始规范提交指定使用此算法。所以不幸的是我坚持了它。
感谢以前的问题和使用此博客的答案:http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html
我有一个应用程序,它接收音频,计算频率和两个图形,并将结果与5个八度音程的已知音符范围进行比较。
最后一个问题是,计算的频率仍然与读入的频率不同。我使用了在线提供的频率发生器,我发现它将获得上面或下面给定的音符的频率。
例如,C读入将在不同的八度音阶处获得B sharp或C sharp。手机距噪声源的距离也会影响读数。是否有一个已知的例子发生和修复,或者是因为FFT算法,我的应用程序无法正常工作?
我的代码可以在以前找到: Displaying a double (frequency) that is updated constantly while recording with Android
添加了低通滤波器以消除背景环境噪声,并添加了环形缓冲区以获得给定的几个频率的平均值。
答案 0 :(得分:1)
如果您的频率稍微偏离,则可能意味着您需要在FFT结果上使用更长的FFT或峰值估计算法(例如抛物线或其他插值内核)。
如果您的FFT频率结果跳过八度音,则可能意味着您需要使用音调估算算法缩小允许的频率估计范围或低通滤波器带宽,例如倒谱/倒谱估计器,自相关/滞后估计器或谐波产品谱,等。
还要注意诸如使用错误的采样率或错误的数据格式等错误。