我希望我为这个问题选择了正确的平台(不知道它是否与数学交流或计算机科学更相关)。
无论如何,我已经阅读了关于信号处理中的卷积的文章,我想尝试实现它。我能够计算卷积到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