2D круговая свертка Vs свертки FFT
Я пытаюсь понять теорию FTT и свертки (кросс-корреляции), и по этой причине я создал следующий код, чтобы понять это. Код – Matlab / Octave, однако я мог бы также сделать это в Python.
В 1D:
x = [5 6 8 2 5]; y = [6 -1 3 5 1]; x1 = [x zeros(1,4)]; y1 = [y zeros(1,4)]; c1 = ifft(fft(x1).*fft(y1)); c2 = conv(x,y); c1 = 30 31 57 47 87 47 33 27 5 c2 = 30 31 57 47 87 47 33 27 5
В 2D:
X=[1 2 3;4 5 6; 7 8 9] y=[-1 1]; conv1 = conv2(x,y) conv1 = 24 53 89 29 21 96 140 197 65 42 168 227 305 101 63
Вот где я нахожу проблему, заполняя матрицу и вектор? Как я должен это делать? Я мог бы поместить x
с нулями вокруг? или только с одной стороны? и как насчет y
? Я знаю, что длина свертки должна быть M+L-1
когда x
и y
– векторы, но что, когда они являются матрицами? Как я могу продолжить мой пример здесь?
- Численное преобразование Фурье прямоугольной функции
- Создание спектрограммы в python (без рисования)
- «Расширенный» IFFT
- Расчет спектра турбулентности
- Повторное создание временных рядов данных с использованием результатов FFT без использования ifft
Вам нужно с нуля заполнить одну переменную с помощью:
- Как много нулевых столбцов, так и количество столбцов другой переменной минус единица.
- Как много нулевых строк, так и количество строк другой переменной минус единица.
В Matlab это выглядело бы следующим образом:
% 1D x = [5 6 8 2 5]; y = [6 -1 3 5 1]; x1 = [x zeros(1,size(x,2))]; y1 = [y zeros(1,size(y,2))]; c1 = ifft(fft(x1).*fft(y1)); c2 = conv(x,y,'full'); % 2D X = [1 2 3;4 5 6; 7 8 9]; Y = [-1 1]; X1 = [X zeros(size(X,1),size(Y,2)-1);zeros(size(Y,1)-1,size(X,2)+size(Y,2)-1)]; Y1 = zeros(size(X1)); Y1(1:size(Y,1),1:size(Y,2)) = Y; c1 = ifft2(fft2(X1).*fft2(Y1)); c2 = conv2(X,Y,'full');
Чтобы прояснить свертку, посмотрите также на эту картину:
- Устанавливать индекс нескольких столбцов в пандах
- Как остановить загрузку заголовка HTTP (и rfc822, email)?
- signal.spectrogram найти максимальную частоту для данного сегмента
- Определите, как долго сигнал превышает предопределенный предел
- DSP – получить амплитуду всех частот
- Невозможно найти правильную энергию, используя scipy.signal.welch
- частотный анализ с неравномерно распределенными данными в python
- Оцифровка аналогового сигнала
- используя основной компонентный анализ для декорирования шумов
- Вычисление DCT с помощью OpenCV
- Сглаживание серии взвешенных значений в numpy / pandas