Вот решение с [1 115] селекторы CSS
::-webkit-input-placeholder { /* WebKit, Blink, Edge */
color: #909;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
color: #909;
opacity: 1;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
color: #909;
opacity: 1;
}
::-ms-input-placeholder { /* Microsoft Edge */
color: #909;
}
:-ms-input-placeholder { /* Internet Explorer 10-11 */
color: #909;
}
Стандартный подход - заполнение меньшего массива (ядро свертки, y в вашем случае) нулями для соответствия размеру входного изображения (ваша матрица x). Это было бы ужасно неэффективным, если бы вы выполняли свертку в пространственной области, но если вы умножаете БПФ, это необходимо, и стоимость вычисления БПФ дополненного массива не так уж и велика. .
Вы правы, полагая, что два частотных интервала должны быть одинаковыми. Возьмем пример 1D (я использую синтаксис Matlab):
N = 4096;
M = 64;
x = randn(N, 1);
y = hann(M, 'symmetric');
zLinear = conv(x,y);
zCircular = ifft( fft(x) .* fft(y,N) );
disp(max(abs(zLinear(65:4096) - zCircular(65:4096))));
Разница между двумя методами составляет ~ 2e-14, поэтому ошибка округления. Обратите внимание, что вы должны пропустить первые 64 образца из-за разницы между линейной и круговой сверткой.
При вычислении zCircular обратите внимание на fft (y, N), который является синтаксисом Matlab для заполнения сигнала y нулями вверх к N перед расчетом fft. Это можно считать неэффективным с точки зрения использования памяти, но сравните скорость:
линейная свертка: 4096 умножений / сложений по 64 каждого = 262144 умножения / сложений
круговая свертка: 2 БПФ по 4096 + 1 комплексное умножение 2 * 4096 элементы + 1 обратный БПФ
= 3 * 4096 * log2 (4096) + 4096 * 6 = 172032 (при условии 6 операций для комплексного умножения)
По сути, скорость NlogN БПФ, даже когда вам нужно три из них, превосходит N * Операция свертки M, если M.
EDIT Добавить оценку скорости для случая 2D
Стоит добавить, что для 2D-данных преимущество в скорости увеличивается. Двумерное БПФ требует N * N * log2 (N * N) операций, поэтому умножение 3 БПФ + комплексное N ^ 2 массива для N = 4096 составляет 1,3e10 операций. Но прямая свертка составляет N ^ 2 * M ^ 2 = 6,9e10 операций, что примерно в 50 раз медленнее.