Эффективный способ выполнить сдвиг FFT в matlab (без использования функции fftshift)

#matlab #matrix #signal-processing #fft

#matlab #матрица #обработка сигналов #БПФ

Вопрос:

http://www.mathworks.com/help/techdoc/ref/fftshift.html

Если вы проверите эту ссылку — это то, что я хочу сделать на первом рисунке — поменять местами квадранты матрицы.

Однако, похоже, я не могу придумать хорошего способа сделать это без нескольких циклов для извлечения соответствующих подматриц.

Мне это нужно для работы с матрицами MxN, где M и N могут быть любой комбинацией четных и нечетных значений.

Спасибо

Комментарии:

1. почему вы не можете использовать fftshift ? Это домашнее задание?

2. Вы пробовали open fftshift ?

3. Я не хочу использовать fftshift, потому что я переношу часть matlab на C

Ответ №1:

Должно сработать следующее

 sz = ceil(size(A)/2)
A = A([sz(1) 1:end, 1:sz(1)], [sz(2) 1:end, 1:sz(2)])
  

Это работает только для 2d-матриц, но может быть легко обобщено на случай Nd.

Ответ №2:

Если вы введете type fftshift.m в командной строке MATLAB, вы увидите исходный код для реализации функции MATLAB в MATLAB (используйте edit fftshift.m , если хотите просмотреть его в редакторе с подсветкой синтаксиса). Я не публикую код здесь, поскольку он защищен авторским правом. Однако вы можете попробовать это на своем компьютере и повторно реализовать то же самое в C. Вам решать разобраться с условиями лицензии и т.д., Если вам что-то из этого нужно.