Как решить реальные разностные уравнения с использованием Python

Я хочу решить разностное уравнение, используя Python.

y = x(n - 1) - (0.5(x(n-2) + x(n))

x здесь длинный массив значений. Я хочу построить y по отношению к другому массиву временных последовательностей t используя Plotly. Я могу построить x с t, но я не могу генерировать отфильтрованный сигнал y, Я попробовал код ниже, но, кажется, я что-то упустил. Я не получаю желаемый результат.

from scipy import signal
from plotly.offline import plot, iplot
x = array(...)
t = array(...) # x and t are big arrays 
b = [-0.5, 1, -0.5]
a = 0
y = signal.lfilter(b, a, x, axis=-1, zi=None) 
iplot([{"x": t, "y": y}])

Тем не менее, результат выглядит примерно так.

>>>y
>>> array([-inf, ...,  nan])

Поэтому я получаю пустой график.

ОБНОВЛЕНИЕ с примерами x и t (9 значений каждый):

x = [3.1137561664814495,
 -1.4589810840917137,
 -0.12631870857936914,
 -1.2695030212226599,
 2.7600637824592158,
 -1.7810937909691049,
 0.050527483431747656,
 0.27158522344564368,
 0.48001109260160274]

t = [0.0035589523041146265,
 0.011991765409288035,
 0.020505576424579175,
 0.028935389041247817,
 0.037447199517441021,
 0.045880011487565042,
 0.054462819797731044,
 0.062835632533346342,
 0.071347441874490158]

1 ответ

Решение

Похоже, что ваша проблема определяет a = 0, При запуске вашего примера вы получаете следующее предупреждение от SciPy:

/usr/local/lib/python2.7/site-packages/scipy/signal/signaltools.py:1353: RuntimeWarning:

divide by zero encountered in true_divide

[-inf  inf  nan  nan  nan  inf -inf  nan  nan]

Это деление на ноль определяется значением a, Если вы посмотрите на документацию scipy.signal.lfilter, это указывает на следующее:

a: array_like Вектор коэффициента знаменателя в одномерной последовательности. Если a[0] не равно 1, то a и b нормализуются как a[0].

Если вы измените a = 0 в a = 1 вы должны получить желаемый результат, хотя учтите, что вы можете применить нормализацию данных другим фактором.

Другие вопросы по тегам