这是我的问题:我将处理来自系统的数据,我将对脉冲响应有一个很好的了解。之前使用Python进行一些基本脚本编写,我开始了解scipy.signal.convolve和scipy.signal.deconvolve函数。为了对我的最终解决方案有所信心,我想了解他们的要求和限制。
我使用了以下测试:
我建立了一个由两个高斯人组成的基本信号
我建立了高斯脉冲响应
我用这个脉冲响应将我的初始信号卷起来
我解卷积了这个卷积信号
我把这最后一个信号与我最初的信号进行了比较
这个测试的结果很大程度上取决于我如何定义我的脉冲响应:要么我设法恢复我的初始信号,要么解卷积信号强烈分歧。
这是代码:
我使用python 3.4.2,numpy 1.8.2和scipy 0.14.0。
import numpy as np
from scipy import signal
def gauss(x, amp = 1, mean = 0, sigma = 1):
return amp * np.exp(-(x - mean)**2 / (2 * sigma**2))
step = 0.1
x_os = np.arange(0, 200 + step, step)
low = -5 # lower bound of the interval for the impulse response
up = 5 # upper bound of the interval for the impulse response
x_ir = np.arange(low, up + step, step)
y_os1 = gauss(x_os, 160, 80, 5.0)
y_os2 = gauss(x_os, 20, 20, 2.0)
y_os = y_os1 + y_os2 # original signal
y_ir = gauss(x_ir, 1 / (np.sqrt(2 * np.pi)), 0.0, 1.0) # impulse response
y_c = signal.convolve(y_os, y_ir, 'full') # convoluted signal
y_d, _ = signal.deconvolve(y_c, y_ir) # deconvoluted signal
在前面的代码中,scipy.signal.deconvolve的除数参数是y_ir。我玩了定义定义y_ir的间隔的参数,例如, [低,向上,一步]。为了向您展示让我困惑的是,让我们采取以下三组:
1)[-5, 5, 0.1]
,
2)[-2, 2, 0.1]
,
3)和[-2, 2, 0.5]
(请注意,y_os的定义中没有更改步骤。)
以下图像显示原始信号以及上述三组的去卷积信号
Original signal
Comparison of the deconvoluted signals
任何人都可以解释这种行为吗? divisor
是否有任何要求保证此功能的正常行为?
提前谢谢。