2013-08-15 5 views
5

Mam sygnał zależny od czasu.Jak wykreślić całkę sygnału w miarę upływu czasu?

Chcę zobrazować jego integrację w czasie z czasem będącym osią X i wartością integracji będącą osią Y.

Czy jest jakiś sposób na wykonanie Python way?

Aby być bardziej konkretne:

Mam tablicę czasową, time oraz tablicę sygnału, signal. Mają ten sam wymiar.

Muszę zintegrować signal przez time z scipy.integrate.trapz().

Zamiast uzyskać ostatnią całkę, chcę zobaczyć całkę zmieniającą się wraz z upływem czasu.

Odpowiedz

7

Spróbuj pomocą scipy.integrate.cumtrapz() zamiast:

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

Oblicza tablicę zawierającą skumulowane wartości całkowite.

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

+0

Oś x jest nieprawidłowy. Uwaga Nie mam ustalonego przedziału czasu. To, co mam, to macierz czasu. –

+0

Ah, w takim przypadku możesz użyć swojej tablicy czasu, aby wskazać miejsce wykreślenia wartości y. Zaktualizowałem odpowiedź. – lmjohns3

+0

dokładnie, po uruchomieniu kodu, pojawia się problem. X i y na wykresie() mają różne wymiary. Rozmiar y to 20123, a x to 20124. Jak mogę to rozwiązać? –

2

Nieco lepsza odpowiedź używa opcjonalnego "initial" argument. Powyżej znajduje się pełna przykład:

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

ten sposób unika się dziwny indeksowanie jak time[:-1]

Powiązane problemy