Реализация Numpy Convolution для mode = same - PullRequest
2 голосов
/ 09 июня 2019

Я надеюсь, что выбрал правильную платформу для этого вопроса (интересно, больше ли это связано с математическим обменом или информатикой).

В любом случае, я читал о свертке в обработке сигналов и хочу попробовать ее реализовать.Мне удалось рассчитать свертку до длины 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.

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...