0

我使用 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并从频谱阵列中找到最大值的这种波效果很好,但我正在寻找更好的方法。

4

2 回答 2

2

对于吉他声音,音高检测/估计的一些可能性包括使用 FFT 结果作为计算倒谱的第一步,用于倒谱分析,或谐波积频谱分析,或通过 IFFT(FFT() * conjugate( FFT()))。

于 2012-12-11T01:36:58.357 回答
0

乐器的自动音高确定并非易事。

看看这篇关于问题的倒谱方法的帖子:乐器倒谱

于 2013-02-13T02:17:45.443 回答