2013-08-15 3 views
5

Ich habe ein zeitabhängiges Signal.Wie zeichnet man das Integral eines Signals mit der Zeit auf?

Ich möchte seine Integration über die Zeit mit Zeit als x-Achse und Integrationswert als y-Achse darstellen.

Gibt es Python Weg dies zu tun?

Um genauer zu sein:

Ich habe eine Zeit Array, time, und ein Signal Array, signal. Sie sind von gleicher Dimension.

Ich muss signal über time mit scipy.integrate.trapz() integrieren.

Anstatt das letzte Integral zu erhalten, möchte ich sehen, dass sich das Integral mit der Zeit ändert.

Antwort

7

Versuchen Sie es mit scipy.integrate.cumtrapz() statt:

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

Es berechnet ein Array mit den kumulativen Integralwerte enthält.

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

+0

Die x-Achse ist falsch. Bitte beachten Sie, dass ich kein festes Zeitintervall habe. Was ich habe, ist ein Zeitfeld. –

+0

Ah, in diesem Fall können Sie Ihr Zeit-Array verwenden, um anzugeben, wo die y-Werte dargestellt werden sollen. Ich habe die Antwort aktualisiert. – lmjohns3

+0

genau, wenn Sie den Code ausführen, kommt hier das Problem. Die x und y im Plot() haben unterschiedliche Dimensionen. Größe von y ist 2und x ist 20124. Wie kann ich das auflösen? –

2

Eine etwas bessere Antwort wird das optionale "initial" Argument. Hier ist ein komplettes Beispiel:

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() 

Dies vermeidet die seltsame Indizierung wie time[:-1]

Verwandte Themen