所以基本上我在高E吉他弦的漂亮声波上运行我的自相关算法(100英寸44100 Hz单声道声音样本)。我得到的是: http://imageshack.us/photo/my-images/534/chartzf.png/
这一切看起来都不错,完全可以用来确定声波的频率,这就是我想做的事情,但问题仍然是为什么那里的噪音。根据理论,它不应该存在。我使用以下java代码来计算频率:
// sq(a) = a*a.
private void computeAutocorrelation2() {
// Fourier Transform to calculate autocorrelation.
// TODO: Change it so that it acts on Complex data? - concurrent execution?.
fft_method = new DoubleFFT_1D(elementsRead);
for(int i=elementsRead-1; i>=0; i--)
audioDataAnalyzis[2*i]=audioDataAnalyzis[i];
for(int i=2*elementsRead-1; i<audioDataAnalyzis.length; ++i)
audioDataAnalyzis[i]=0;
fft_method.complexForward(audioDataAnalyzis);
for(int i=0; i<elementsRead; ++i)
audioDataAnalyzis[2*i] = sq(audioDataAnalyzis[2*i])
+ sq(audioDataAnalyzis[2*i+1]);
for(int i=2*elementsRead-1; i<audioDataAnalyzis.length; ++i)
audioDataAnalyzis[i]=0;
fft_method.complexInverse(audioDataAnalyzis, false);
for(int i=0; i<elementsRead; ++i)
audioDataAnalyzis[i] = audioDataAnalyzis[2*i];
for(int i=elementsRead; i<audioDataAnalyzis.length; ++i)
audioDataAnalyzis[i]=0;
}
我使用的傅里叶变换代码来自java library jtransforms。任何人都可以想到这个原因吗?
我使用的声音数据快照如下所示:http://imageshack.us/photo/my-images/546/chartv.png/