问题描述
我一直在研究吉他调音器应用程序.我了解到FFT对于这种应用是一个不好的选择.但是,随着截止日期越来越近,我的原始规格说明中指定使用此算法.所以很不幸,我坚持了下去.
I have been working on a guitar tuner application. I understand that the FFT is a bad choice for this kind of application. However, as deadlines get ever closer, and my original specification submission specified use of this algorithm. So unfortunately I am stuck with it.
感谢您对以前的问题的解答以及该博客的使用: http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html
Thanks to answers to previous questions and use of this blog: http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html
我有一个应用程序,可以接收音频,计算频率和两个图表,并将结果与5个八度音阶的已知音符范围进行比较.
I have an application that takes in audio, calculates the frequency and both graphs and compares the result to known note ranges at 5 octaves.
最后一个问题是,计算出的频率仍然与读入的频率有所不同.我使用了在线提供的频率发生器,我发现它将获得高于或低于给定音符的音符的频率.
The final issue is that the frequency calculated still varies from the frequency read in. I have used a frequency generator provided online an I have found that It will get the frequency of a note above or bellow the given one.
例如,C读入将使B尖锐或C尖锐在不同的八度音阶.手机离噪声源的距离也会影响读数.
for example a C read in will get B sharp or C sharp at different octaves. Distance of the phone from the noise source also effects the readings.
是否存在这种情况的已知示例并已解决,或者是由于FFT算法的原因,我的应用程序无法正常工作?
Is there a known example of this occurring and fixes, or is it because of the FFT algorithm, and my application can't work correctly?
我的代码可以在前面找到:显示使用Android录制时不断更新的double(频率)
My code can be found at a previous:Displaying a double (frequency) that is updated constantly while recording with Android
已添加一个低通滤波器以消除背景环境噪声,并已添加一个环形缓冲区以获取给定频率的平均值.
A low pass filter has been added to remove background environmental noise, and a ring buffer has been added to get the average of several frequencies given.
推荐答案
如果您的频率稍微偏离一点,则可能意味着您需要使用更长的FFT或峰值估计算法(例如抛物线或其他插值法)内核)).
If your frequency is off by a little, it might mean you either need to use a longer FFT or a peak estimation algorithm (such as a parabolic or other interpolation kernel) on the FFT result.
如果FFT频率结果跳八度,则可能意味着您需要使用基音估计算法(例如倒频谱/倒频谱估计器,自相关/滞后估计器或谐波)来缩小允许的频率估计范围或低通滤波器带宽产品范围等.
If your FFT frequency result jumps octaves, it may mean you need to narrow your allowable frequency estimate range or your low pass filter bandwidth using a pitch estimation algorithm, such as a cepstrum/cepstral estimator, autocorrelation/lag estimator, or harmonic product spectrum, et.al.
还请注意错误,例如使用错误的采样率或错误的数据格式等.
Also watch out for bugs such as using the wrong sample rate or the wrong data formats, etc.
这篇关于FFT吉他调音器应用-不正确的频率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!