http://www.mathworks.com/help/techdoc/ref/fftshift.html
Если вы проверите эту ссылку - это то, что я хочу сделать на первом рисунке - поменять квадранты матрицы.
Однако я не могу думать охороший способ сделать это без нескольких циклов для извлечения соответствующих подматриц.
Мне нужно, чтобы он работал с матрицами MxN, где M и N могут быть любой комбинацией четных и нечетных.
Спасибо
Следующее должно работать
sz = ceil(size(A)/2) A = A([sz(1)+1:end, 1:sz(1)], [sz(2)+1:end, 1:sz(2)])
Это работает только для 2d матриц, но может быть легко обобщено на случай Nd.
Если вы введете type fftshift.m в командной строке MATLAB, вы увидите исходный код реализации функции MATLAB (используйте edit fftshift.m, если вы хотите просмотреть его в редакторе с подсветкой синтаксиса).Я не публикую здесь код, так как он защищен авторским правом.Тем не менее, вы можете попробовать его на своем компьютере и повторно внедрить то же самое в C. Это зависит от вас, чтобы выяснить условия лицензии и т. Д., Если вы в чем-либо из этого.
type fftshift.m
edit fftshift.m