基于FFT(已经)结果更准确地估计吉他音调频率

时间:2012-12-11 00:01:56

标签: c# windows-phone-7.1 fft frequency

我使用FFT算法来检测声音的频率(吉他音高),当我从电脑上播放sinosoidal声音时,它会很好地估计它,但是当我使用吉他时它并不是那么完美。如何更好地估计音高频率?

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并且这种波只是从光谱阵列中找到最大值,但我正在寻找更好的方法。

2 个答案:

答案 0 :(得分:2)

对于吉他声,音高检测/估计的一些可能性包括使用FFT结果作为计算倒频谱用于倒频谱分析,或用于谐波积频谱分析或通过IFFT进行快速自相关的第一步(FFT() *共轭(F​​FT()))。

答案 1 :(得分:0)

乐器的自动音高确定非常重要。

看一下关于问题的倒谱法的这篇文章:Musical instrument Cepstrum