Обобщить этот код Matlab для неквадратных матриц - PullRequest
1 голос
/ 11 мая 2011

Я работаю над некоторым кодом преобразования Фурье в Matlab и наткнулся на следующее:

xx = meshgrid(1:N);
% Center on DC
xx = xx - dcN;
% normalize dynamic range from -1 to 1
xx = xx./max(abs(xx(:)));
% form y coordinate from negative transpose of x coordinate (maintains symmetry about DC)
yy = -xx';
% compute the related radius of the x/y coordinates centered on DC
rr = sqrt(xx.^2 + yy.^2);

Как я могу обобщить это для неквадратных матриц? Этот код предполагает, что моя матрица квадратная, поэтому dcN является центром квадратной матрицы (другими словами, с 11x11, dcN = 6).

Математика не работает для этой переменной yy, когда транспонирование берется для неквадратной матрицы.

Я пытался выяснить, могу ли я создать сетку, идущую сверху вниз, а не слева направо - но я тоже не смог понять, как это сделать.

Спасибо

Ответы [ 2 ]

1 голос
/ 11 мая 2011

Я пытался выяснить, могу ли я создать сетку, идущую сверху вниз, а не слева направо, но я не смог понять, как это сделать.

>> N=5

N =

     5

>> rot90(meshgrid(N:-1:1))

ans =

     1     1     1     1     1
     2     2     2     2     2
     3     3     3     3     3
     4     4     4     4     4
     5     5     5     5     5
0 голосов
/ 11 мая 2011

Исходя из вашего вопроса, я думаю, что вы хотите найти rr, т.е. расстояние любого элемента в матрице от центра.

Если вы хотите это для массива M-by-N, вы должны сделать следующее

%# note that using meshgrid instead of ndgrid will swap xx and yy
[xx,yy] = ndgrid(-(M-1)/2:(M-1)/2,-(N-1)/2:(N-1)/2);

%# normalize to the max of xx,yy
nrm = max((M-1)/2,(N-1)/2);
xx = xx./nrm; 
yy = yy./nrm;

rr = sqrt(xx.^2+yy.^2)
...