<p><code>deconvolve</code>返回<em>两个</em>数组,商和余数。所以试试看:</p>
<pre><code>f, r = signal.deconvolve(s, s_f)
</code></pre>
<p>很长一段时间以来,<code>deconvolve</code>没有一个正确的docstring,但是它在github的master分支中有一个:<a href="https://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L731" rel="nofollow">https://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L731</a></p>
<p>docstring显示了使用<code>deconvolve</code>的示例。还有一个(<code>sig</code>是<code>scipy.signal</code>,而<code>np</code>是<code>numpy</code>):</p>
<p>要去卷积的信号是<code>z</code>,滤波器系数在<code>filter</code>:</p>
<pre><code>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])
</code></pre>
<p>应用<code>deconvolve</code>:</p>
<pre><code>In [11]: q, r = sig.deconvolve(z, filter)
In [12]: q
Out[12]: array([ 1., 3., 5., 6., 5., 4., 6., 7., 1., 2.])
</code></pre>
<p>将筛选器应用于<code>q</code>以验证是否返回<code>z</code>:</p>
<pre><code>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. ])
</code></pre>
<p>从结构上看,这是一个非常干净的例子。余数为零:</p>
<pre><code>In [14]: r
Out[14]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
</code></pre>
<p>当然,你不会总是得到这么好的结果。</p>