использовать
fftn
, например: Y = fftn(X)
возвращает многомерное преобразование Фурье массива ND, используя алгоритм быстрого преобразования Фурье. Преобразование ND эквивалентно вычислению одномерного преобразования по каждому измерению X. Выходной Y имеет тот же размер, что и X. Для трехмерного преобразования: создайте трехмерный сигнал X. Размер X равен 20 -20 на 20
x = (1:20)';
y = 1:20;
z = reshape(1:20,[1 1 20]);
X = cos(2*pi*0.01*x) + sin(2*pi*0.02*y) + cos(2*pi*0.03*z);
Вычисляет трехмерное преобразование Фурье для сигнала, который также является массивом 20 на 20 на 20
Y = fftn(X)
Pad X с нулями для вычисления преобразования 32 на 32 на 32.
m = nextpow2(20);
Y = fftn(X,[2^m 2^m 2^m]);
size(Y)
также вы можете использовать этот код: first Вы можете использовать SINGLE intead of DOUBLE
psi = single(psi);
fftpsi = fft(psi,[],3);
Далее может работать слайд за слайдом
psi=rand(10,10,10);
% costly way
fftpsi=fftn(psi);
% This might save you some RAM, to be tested
[m,n,p] = size(psi);
for k=1:p
psi(:,:,k) = fftn(psi(:,:,k));
end
psi = reshape(psi,[m*n p]);
for i=1:m*n % you might work on bigger row-block to increase speed
psi(i,:) = fft(psi(i,:));
end
psi = reshape(psi,[m n p]);
% Check
norm(psi(:)-fftpsi(:))
Надеюсь, это будет полезно для вас