Сначала , ваши циклы должны выглядеть так:
for k=1:size(A,2)
y = A(:,k,:);
A(:,k,:) = fft(y);
end
Второй , цикл выше идентичен (как сказал @Luis Mendo в своем ответе):
A = fft(A,[],2);
Нет необходимости писать цикл вообще.
Третий , для вычисления 1D БПФ по 3-му измерению вы используете:
fft(A,[],3);
Вы могли бы написать это как цикл (просто чтобы ответить на ваш явный вопрос, я не рекомендую вам делать это):
for k=1:size(A,3)
y = A(:,:,k);
A(:,:,k) = fft(y);
end
Если по какой-то причине это не работает в вашей версии MATLAB из-за формы y
, вы можете изменить y
на вектор-столбец:
... fft(y(:));
Наконец , чтобы вычислить 3D БПФ с использованием 1D-разложений, вы можете просто написать
A = fftn(A);
Это точно такой же процесс, который вы пытаетесь реализовать, за исключением того, что он делает это намного быстрее.