2013-08-15 7 views
5

Ho un segnale dipendente dal tempo.Come tracciare l'integrale di un segnale con il passare del tempo?

Desidero tracciare la sua integrazione nel tempo con l'asse x e il valore di integrazione come asse y.

C'è qualche modo Python di fare questo?

Per essere più precisi:

Ho un array di tempo, time, e una matrice di segnale, signal. Sono della stessa dimensione.

Devo integrare signal su time con scipy.integrate.trapz().

Invece di ottenere l'integrale finale, desidero vedere l'integrale che varia con il passare del tempo.

risposta

7

prova utilizzando scipy.integrate.cumtrapz() invece:

plt.plot(time[:-1], scipy.integrate.cumtrapz(signal, x=time)) 
plt.show() 

Si calcola un vettore contenente i valori interi cumulativi.

http://docs.scipy.org/doc/scipy-0.10.1/reference/generated/scipy.integrate.trapz.html

+0

L'asse x non è corretto. Si prega di notare che non ho un intervallo di tempo fisso. Quello che ho è una matrice temporale. –

+0

Ah, in tal caso è possibile utilizzare la matrice temporale per indicare dove tracciare i valori y. Ho aggiornato la risposta. – lmjohns3

+0

esattamente, quando si esegue il codice, ecco il problema. Le x e y nella trama() sono di dimensioni diverse. La dimensione di y è 20123, e x è 20124. Come posso risolverlo? –

2

Una risposta un po 'meglio utilizza l'"initial" argomento opzionale. Ecco un esempio completo:

import scipy.integrate as it 
import numpy as np 
import matplotlib.pyplot as plt 
t=np.linspace(0,1, 100) 
y=t**2 
y_int = it.cumtrapz( y , t, initial=0.0) # y_int is same size as t 
plt.plot(t, y_int) 
plt.show() 

questo modo si evita la strana indicizzazione come time[:-1]

Problemi correlati