Autocorrelação computacional com FFT usando a biblioteca JTransforms

Estou tentando calcular a autocorrelação de janelas de amostra em uma série temporal usando o código abaixo. Eu estou aplicando FFT para aquela janela, então computando magnitudes de partes reais e imaginárias e definindo a parte imaginária para zero, finalmente tomando uma transformação inversa para obter autocorrelação:

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;

A primeira questão é: Vê-se que este código mapeia o resultado da autocorrelação para[0,1] intervalo, embora a correlação deva ser entre -1 e 1. É claro que é fácil mapear os resultados para[-1,1] intervalo, mas não tenho certeza se esse mapeamento está correto. Como podemos interpretar os valores no resultadoautocorr array?

Em segundo lugar, com este código estou obtendo bons resultados para algumas séries periódicas, ou seja, eu recebo valores mais altos para índices de autocorrelação específicos de acordo com o período do sinal. No entanto, o resultado é estranho quando o aplico a sinais não periódicos: todos os valoresautocorr matriz parece estar muito perto de 1. Qual é a razão para isso?

questionAnswers(1)

yourAnswerToTheQuestion