2

我想用python求解一个差分方程。

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

x这是一长串值。我想使用Plotlyy相对于另一个时间序列数组进行绘图。我可以用绘图,但无法生成过滤后的信号。我已经尝试了下面的代码,但似乎我遗漏了一些东西。我没有得到想要的输出。txty

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]
4

1 回答 1

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]

这个除以零是由 value 定义的a。如果您查看 的文档scipy.signal.lfilter,它会指出以下内容:

a : array_like 一维序列中的分母系数向量。如果 a[0] 不是 1,则 a 和 b 都被 a[0] 归一化。

如果您更改a = 0a = 1您应该得到您想要的输出,但请考虑您可能希望通过不同的因素应用数据规范化。

于 2017-07-22T21:47:33.277 回答