2013-08-15 8 views
5

У меня есть зависящий от времени сигнал.Как построить интеграл сигнала с течением времени?

Я хочу построить интеграцию с течением времени, когда ось x и значение интегрирования являются осью y.

Есть ли Python way?

Чтобы быть более конкретным:

У меня есть время массив, time и массив сигнала, signal. Они имеют одинаковую размерность.

Мне нужно интегрировать signal над time с scipy.integrate.trapz().

Вместо того, чтобы получить окончательный интеграл, я хочу видеть, как интеграл меняется со временем.

ответ

7

Попробуйте использовать scipy.integrate.cumtrapz() вместо:

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

Он вычисляет массив, содержащий кумулятивные целые значения.

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

+0

По оси х неверна. Обратите внимание: у меня нет фиксированного интервала времени. У меня есть временной массив. –

+0

Ах, в этом случае вы можете использовать свой временной массив, чтобы указать, где изобразить значения y. Я обновил ответ. – lmjohns3

+0

точно, когда вы запускаете код, здесь возникает проблема. X и y в графике() имеют разные размеры. Размер y - 20123, а x - 20124. Как я могу это решить? –

2

Немного лучше ответ использует дополнительный аргумент "initial". Вот полный пример:

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

Это позволяет избежать странной индексации как time[:-1]

Смежные вопросы