Эффективный способ сделать FFT-сдвиг в Matlab (без использования функции Fftshift) - PullRequest
2 голосов
/ 20 апреля 2011

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

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

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

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

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

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

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

1 голос
/ 21 апреля 2011

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

...