deconvolve返回两个数组,商和余数。所以试试:
f, r = signal.deconvolve(s, s_f)
很长一段时间,deconvolve一直没有合适的文档字符串,但它在 github 上的 master 分支中有一个:https ://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L731
文档字符串显示了一个使用deconvolve. 这是另一个(sig是scipy.signal和np是numpy):
要反卷积的信号为z,滤波器系数为filter:
In [9]: z
Out[9]:
array([ 0.5, 2.5, 6. , 9.5, 11. , 10. , 9.5, 11.5, 10.5,
5.5, 2.5, 1. ])
In [10]: filter = np.array([0.5, 1.0, 0.5])
申请deconvolve:
In [11]: q, r = sig.deconvolve(z, filter)
In [12]: q
Out[12]: array([ 1., 3., 5., 6., 5., 4., 6., 7., 1., 2.])
应用过滤器q以验证我们是否返回z:
In [13]: sig.convolve(q, filter)
Out[13]:
array([ 0.5, 2.5, 6. , 9.5, 11. , 10. , 9.5, 11.5, 10.5,
5.5, 2.5, 1. ])
通过构造,这是一个非常干净的例子。余数为零:
In [14]: r
Out[14]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
当然,你不会总是得到这么好的结果。