Я реализую Convolutions с использованием Radix-2 Cooley-Tukey FFT/FFT-обратный, и мой вывод правильный, но сдвиг по завершении.Почему мой результат свертки смещается при использовании FFT
Мое решение состоит в том, чтобы установить как размер ввода, так и размер ядра до 2 м для минимально возможного m, преобразовать как входные, так и ядро с использованием БПФ, затем умножить два элемента и преобразовать результат с помощью FFT-обратного ,
В качестве примера на результирующей задачи:
0 1 2 3 0 0 0 0
4 5 6 7 0 0 0 0
8 9 10 11 0 0 0 0
12 13 14 15 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
с ядром идентичности
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
становится
0 0 0 0 0 0 0 0
0 0 1 2 3 0 0 0
0 4 5 6 7 0 0 0
0 8 9 10 11 0 0 0
0 12 13 14 15 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Кажется, любые размеры входов и ядер производит тот же сдвиг (1 строка и 1 столбец), но я мог ошибаться. Я выполнил те же вычисления, используя онлайн-калькулятор, по адресу this link! и получить те же результаты, поэтому, вероятно, мне не хватает фундаментальных знаний. Мой доступный литер не помог. Итак, мой вопрос, почему это происходит?
Ваше ядро идентификации должно быть размером 4x4, верно? Поместите 1 в индекс [2,2] (на основе нуля), и я думаю, что вы получите лучший результат. –
Да, ядро 4x4, я отредактировал сообщение соответственно. Я не уверен, что вы подразумеваете под нулевым основанием, но размещение 1 в [2,2] изменило бы его дальше. Помещение 1 в [0,0] дает правильный результат, но я не понимаю, почему. Это потому, что мне нужно круговое смещение ядра, чтобы центр (здесь 1) находился в позиции [0,0]? – Dith
Извините, если я не понял. Индекс верхнего левого элемента в ядре FFT должен быть -n/2, где n - количество строк и столбцов. Итак, для ядра 4x4 позиция (0,0) расположена в третьей строке и третьем столбце. –