8 votos

Sustituto de Series de Tiempo utilizando la transformada de Fourier de

En el Sustituto de la Serie de Tiempo (Schreiber, Schmitz)del documento, los autores afirman que los sustitutos para un segundo orden de la serie de tiempo estacionaria puede ser generado por tomar la transformada de Fourier de la serie, multiplicando al azar fases de los coeficientes y, a continuación, la transformación de la espalda. Este procedimiento debe preservar la función de autocorrelación. Estoy tratando de implementar esto en python usando numpy.

import numpy
import pandas
import matplotlib.pyplot as plt

numpy.random.seed(0)
ts = numpy.random.normal(0, 1, 1000)

pandas.tools.plotting.autocorrelation_plot(ts)
plt.ylim([-0.1,0.1])
plt.title('Autocorrelation function of random time series')

Random time series autocorrelation

La tentativa en el mencionado procedimiento:

ts_fourier = numpy.fft.fft(ts)
ts_fourier_new = [x*numpy.exp(numpy.random.uniform(0,2*numpy.pi)*1.0j) for x in ts_fourier]
new_ts = numpy.fft.ifft(ts_fourier_new)

pandas.tools.plotting.autocorrelation_plot(new_ts)
plt.ylim([-0.1,0.1])
plt.title('Autocorrelation function of surrogate time series')

Surrogate Autocorrelation

Como puede verse, la función de autocorrelación de la madre sustituta no es idéntica a la original de la serie de tiempo. ¿Cuál es el error en mi implementación?

5voto

richard bradford Puntos 1

Usted necesidad de utilizar la transformada de Fourier (y a la inversa transformar) en tiempo real de la serie, es decir, rfft y irfft, respectivamente. De esta manera usted se asegura de que su sustituto es real. Usted puede hacer esto mediante la colocación de las respectivas líneas de su código con el siguiente:

ts_fourier  = numpy.fft.rfft(ts)
random_phases = numpy.exp(numpy.random.uniform(0,numpy.pi,len(ts)/2+1)*1.0j)
ts_fourier_new = ts_fourier*random_phases
new_ts = numpy.fft.irfft(ts_fourier_new)

(Alternativamente, usted puede tomar el transformada de Fourier y barajar las fases en un antisimétrica manera.)

El resto de las desviaciones se originan a partir de la finitud de su tiempo de la serie: La identidad de las funciones de autocorrelación se basa en el hecho de que el tiempo original de la serie y el sustituto tiene por construcción el mismo espectro de potencia, que a su vez está vinculada a la función de autocorrelación a través de la Wiener–Khinchin teorema. Sin embargo, éste sólo se mantiene en la aproximación de tiempo finito serie como es en realidad acerca de los procesos.

Este efecto es algo aliviado si se mira en series de tiempo con "real" destacados componentes de frecuencia y no sólo ruido.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X