Я надеюсь, что выбрал правильную платформу для этого вопроса (интересно, больше ли это связано с математическим обменом или информатикой).
В любом случае, я читал о свертке в обработке сигналов и хочу попробовать ее реализовать.Мне удалось рассчитать свертку до длины 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
Это то же самое, что и numpy.convolve
с mode=full
.
Моя проблема в том, что я не понимаю numpys mode=same
, который выполняет свертку до MAX(n, m)
.Как я могу рассчитать свертку до этой длины, не искажая сигнал?
Другими словами, я хотел бы знать, как numpy реализовал mode=same
.
Большое спасибо!