我使用 FFT 算法来检测声音的频率(吉他音高),当我从计算机播放正弦声音时效果很好,它会完美地估计它,但当我使用吉他时它不是那么完美。如何更好地估计音调频率?
double[] spectrum = FourierTransform.Spectrum(ref sampleBuffer);//spectrum contains data from FFT
double frequency = indexOfMax(spectrum) * 16000 / 500; //sampling rate/FFT size
//indexOfMax just finds the index of the maximum element in the array
为了生成正弦波,我使用了:http ://www.audiocheck.net/audiofrequencysignalgenerator_sinetone.php并从频谱阵列中找到最大值的这种波效果很好,但我正在寻找更好的方法。