Так что, в основном, я использую алгоритм автокорреляции для хорошей звуковой волны гитарной струны с высокой E (сэмпл 100 мс монофонического звука 44100 Гц).Я получаю: 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 jtransforms .Кто-нибудь может придумать причину этого?
Снимок звуковых данных, который я использовал, начинается так: http://imageshack.us/photo/my-images/546/chartv.png/