2013-10-10 7 views
0

enter image description here 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?

Répondre

0

Problème résolu!

il hast être

t = np.linspace(0,1,2**9, endpoint = False) 

avec majuscules et '... ne marche pas unfo NumPy lancer une erreur, mais ainsi il fonctionne;)'

Questions connexes