alterna ai
ALTERNA AI / ГЛАВА 11 · 02

11.2 Окно перемещается по сигналу

На предыдущей странице: сигнал становится отдельными отсчётами.

На каждом месте получаем сумму произведений окна и коэффициентов. Для строгой свёртки нужно учитывать переворот ядра.

Маленькое окно проходит по сигналу или изображению. Каждый выход складывается из чисел окна и общих коэффициентов. Частотная запись описывает те же данные иначе.

Один шаблон локальных сумм

Для конечных последовательностей вне диапазона считаем значения нулевыми. Их линейная свёртка:

y[n]=∑jh[j]x[n−j].y[n]=\sum_j h[j]x[n-j].

Если x имеет длинуN, h длинуK, full output имеет длинуN+K−1. H07 описывает эту семантику. При x=[1,2,3,4],h=[1,−1] получаем[1,1,1,1,−4]. Например,y[2]=1×3+(−1)×2=1; последний y[4]=1×0−4=−4.

Лаборатория реализует скользящее окно с перевёрнутым ядром. При padding p с каждой стороны и stride s число выходов floor((N+2p−K)/s)+1. Для full linear convolution выбирайте p=K−1,s=1. В общем случае выходной индекс i соответствует линейному n=i·s−p+K−1. Так начало массива output не путается с физическим индексом исходной формулы.

Эксперимент. Пройдите все окна, включая начало и хвост. Для padding-значений должно быть явно видно, что это добавленный0. Увеличьте stride: некоторые положения окна пропускаются, а не усредняются автоматически.

Легко ошибиться. Zero padding — допущение о продолжении сигнала, способное создать граничные эффекты. Ядро[1] должно сохранять исходные значения приp0,s1. Симметричное ядро не позволяет заметить переворот, поэтому для проверки convolution/correlation используйте несимметричный fixture.

x,h=[1,2,3,4],[1,-1]
y=[sum(h[j]*(x[n-j] if 0<=n-j<len(x) else 0)
       for j in range(len(h))) for n in range(len(x)+len(h)-1)]
assert y==[1,1,1,1,-4]

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Переворот соответствует индексу h[n−k].

Что меняется без переворота окна. Как этот вопрос продолжает полученный результат?

Python-примеры главы 11 Академическая база →