为了确保数值稳定性,scipy.signal.deconvolve 的除数参数有哪些限制?

2024-03-24

这是我的问题:我将处理来自系统的数据,我将很好地了解该系统的脉冲响应。之前使用 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 定义间隔的参数,例如[低、上、步]。为了告诉你什么让我困惑,让我们看以下三组:
1) [-5, 5, 0.1],
2) [-2, 2, 0.1],
3) and [-2, 2, 0.5](请注意,y_os 的定义中的步骤未更改)。

下图显示了上述三个集合的原始信号以及去卷积信号。
原始信号 https://i.stack.imgur.com/BkwQ6.png
解卷积信号的比较 https://i.stack.imgur.com/kqxen.png

谁能解释这种行为?有没有什么要求divisor保证这个函数的正确行为?

先感谢您。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为了确保数值稳定性,scipy.signal.deconvolve 的除数参数有哪些限制? 的相关文章

随机推荐