Suite à mon problème: J'ai un modèle théorique pour mon PSD, basé sur lequel je calcule un timeseries. Ce timeseries doit, après quelques modifications, être rétrotransformé dans mon PSD. Malheureusement, je ne suis pas mon dos d'origine PSD, mais un peu différent, et je n'ai pas la moindre idée pourquoi ...Estimation de PSD à partir de timeseries
Voici mon illustration du code:
import numpy as np
from scipy import fftpack
import matplotlib.pyplot as plt
bins = [1,2,3,4,5,6] #spots in the frequency domain
PSD = [7,8,7,10,6,3]
plt.loglog(bins, PSD)
t = np.linspace(0,1,2**9, endpoint = 'false')
signal = np.zeros_like(t)
for i in range(6):
signal += np.sqrt(PSD[i]) * np.cos(2*np.pi* t * bins[i] + random.uniform(0,2*np.pi))
n = signal.size
timestep = t[1]-t[0]
freq = np.fft.fftfreq(n, d=timestep)
freq = freq[:freq.size/2]
PSD_from_timeserie = abs(scipy.fftpack.fft(signal)/ n * 2)**2
PSD_from_timeserie = PSD_from_timeserie[:PSD_from_timeserie.size/2]
plt.loglog(freq, PSD_from_timeserie, 'x')
plt.show()
Cela donne presque correct PSD, comme vous pouvez vérifier facilement ... des suggestions sur où l'erreur est?