我已经构建了一个应用程序,它从手机的麦克风中获取输入并计算频率。我正在使用 Jtransform 库来计算 FFT,从而计算频率。
我已经关注了之前关于这个问题的问题,这是我选择的方法:
sampleSize = 1024
sampleRate = 8000
audioData is the array I have filled with mic input
fft.complexForward(audioData)
该方法计算fft,依次存储实数和虚数
re[] = real number array
im[] = imaginary number array
magnitude[i] = math.sqrt((re[i]*re[i])+(im[i]*im[i]))
然后我得到最大的幅度/峰值
Frequency = sampleRate * peak/sampleSize
现在这个数字变化很快,甚至在持续的音符(我的口哨/吉他弦)上都没有保持不变(尽管保持在一个范围内)
我有一组已知的吉他弦频率(开放 E 弦为 82.407 赫兹)。由于计算值每秒波动很多次,所以我根本无法比较这些,因为它进出界限。
有没有一种方法可以应用于这个问题以获得更稳定的频率?或者这是获得吉他弦频率的正确方法吗?
谢谢