Вычисление автокорреляции с БПФ с использованием библиотеки JTransforms

Я пытаюсь вычислить автокорреляцию окон образца во временном ряду, используя код ниже. Я применяю БПФ к этому окну, затем вычисляю величины действительных и мнимых частей и устанавливаю мнимую часть равной нулю, наконец, принимая ее обратное преобразование для получения автокорреляции:

DoubleFFT_1D fft = new DoubleFFT_1D(magCnt);
fft.realForward(magFFT);

magFFT[0] = (magFFT[0] * magFFT[0]);
for (int i = 1; i < (magCnt - (magCnt%2)) / 2; i++) {
    magFFT[2*i] = magFFT[2*i] * magFFT[2*i] + magFFT[2*i + 1] * magFFT[2*i + 1];
    magFFT[2*i + 1] = 0.0;
}

if (magCnt % 2 == 0) {
    magFFT[1] = (magFFT[1] * magFFT[1]);
} else {
    magFFT[magCnt/2] = (magFFT[magCnt-1] * magFFT[magCnt-1] + magFFT[1] * magFFT[1]);
}

autocorr = new double[magCnt];
System.arraycopy(magFFT, 0, autocorr, 0, magCnt);
DoubleFFT_1D ifft = new DoubleFFT_1D(magCnt);
ifft.realInverse(autocorr, false);

for (int i = 1; i < autocorr.length; i++)
    autocorr[i] /= autocorr[0];
autocorr[0] = 1.0;

Первый вопрос: видно, что этот код отображает результат автокорреляции на[0,1] диапазон, хотя предполагается, что корреляция между -1 и 1. Конечно, легко сопоставить результаты с[-1,1] диапазон, но я не уверен, правильно ли это отображение. Как мы можем интерпретировать значения в результатеautocorr массив?

Во-вторых, с помощью этого кода я получаю хорошие результаты для некоторых периодических рядов, то есть получаю более высокие значения для конкретных индексов автокорреляции в соответствии с периодом сигнала. Однако результат становится странным, когда я применяю его к непериодическим сигналам: все значения вautocorr массив кажется очень близким к 1. В чем причина?

Ответы на вопрос(1)

Ваш ответ на вопрос