模式 = 相同的 Numpy 卷积实现

OzB*_*OzB 5 python math numpy

我希望我为这个问题选择了正确的平台(不知道它是否与数学交流或计算机科学更相关)。

无论如何,我已经阅读了关于信号处理中的卷积的文章,我想尝试实现它。我能够计算卷积到N+M-1.

这可以通过以下函数(Python)来完成:

def convolve(x, h):
    xLen = len(x)
    hLen = len(h)
    if xLen == 0 or hLen == 0:
        return None

    totalLength = xLen + hLen - 1
    init = 0

    y = [0] * totalLength
    for n in range(init, totalLength):
        yn = 0
        k = max(0, n + 1 - xLen)
        j = n - k
        while k < hLen and j >= 0:
            yn += x[j] * h[k]
            j -= 1
            k += 1
        y[n] = yn
    return y
Run Code Online (Sandbox Code Playgroud)

这与使用numpy.convolvewith相同mode=full

我的问题是我不理解 numpys mode=same,它执行卷积直到MAX(n, m)。如何计算卷积直到该长度而不会使信号失真?

换句话说,我很想知道 numpy 是如何实现的mode=same

非常感谢!

小智 0

如果您详细阅读文档https://numpy.org/doc/stable/reference/ generated/numpy.convolve.html 您可以看到它指出:

\n

same :\nMode \xe2\x80\x98same\xe2\x80\x99 返回长度 max(M, N) 的输出。边界效应仍然可见。"

\n

所以这种模式会扭曲信号

\n