Computación de autocorrelación con FFT utilizando la biblioteca JTransforms

Estoy tratando de calcular la autocorrelación de las ventanas de muestra en una serie de tiempo usando el siguiente código. Estoy aplicando FFT a esa ventana, luego calculo las magnitudes de las partes reales e imaginarias y pongo a cero la parte imaginaria, y por último tomo una transformación inversa de la misma para obtener la autocorrelación:

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;

La primera pregunta es: Se ve que este código asigna el resultado de autocorrelación a[0,1] rango, aunque se supone que la correlación está entre -1 y 1. Por supuesto, es fácil asignar los resultados a[-1,1] rango, pero no estoy seguro de si esta asignación es correcta. ¿Cómo podemos interpretar los valores en el resultado?autocorr ¿formación?

En segundo lugar, con este código obtengo buenos resultados para algunas series periódicas, es decir, obtengo valores más altos para índices de autocorrelación específicos de acuerdo con el período de señal. Sin embargo, el resultado es raro cuando lo aplico a señales no periódicas: todos los valores enautocorr La matriz parece estar muy cerca de 1. ¿Cuál es la razón para eso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta