3

这是我的问题:我将处理来自系统的数据,我将对脉冲响应有一个很好的了解。在使用 Python 编写一些基本脚本之前,我开始了解 scipy.signal.convolve 和 scipy.signal.deconvolve 函数。为了对我的最终解决方案有信心,我想了解他们的要求和限制。

我使用了以下测试:
1. 我建立了一个由两个高斯组成的基本信号。
2. 我建立了一个高斯脉冲响应。
3. 我将我的初始信号与这个脉冲响应进行卷积。
4. 我对这个卷积信号进行了反卷积。
5. 我将最后一个信号与我最初的信号进行了比较。
这个测试的结果很大程度上取决于我如何定义我的脉冲响应:要么我设法恢复了我的初始信号,要么去卷积的信号强烈发散。

这是代码:
我使用 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 的间隔的参数,例如 [low, up, step]。为了向您展示让我感到困惑的事情,让我们采用以下三个集合:
1) [-5, 5, 0.1]
2) [-2, 2, 0.1]
3) 和[-2, 2, 0.5](注意在 y_os 的定义中 step 没有改变)。

下图显示了上述三组的原始信号以及去卷积信号。
原始信号
去卷积信号的比较

谁能解释这种行为?是否有任何要求divisor保证此功能的正确行为?

先感谢您。

4

0 回答 0