具有混合方向的多维 FFT

信息处理 fft IFFT
2022-02-21 15:25:46

假设我有三维复数数组X[m,n,p],m{0,1,,M1},n{0,1,,N1},p{0,1,,P1}; IEXCM×N×P. 我想对该数组进行三维DFT;沿尺寸mn我想使用正向变换,并沿维度p我想使用逆变换。

我看过的每个多维 FFT 实现(FFTW、MKL、numpy.fft)都只有一个参数可以指定为“前向”或“后向/逆向”,这意味着在每个维度上都应用了相同的变换。

是否有一种“简单”的方法可以直接进行这种混合方向 FFT,而不必将其分成两个步骤(即进行 2D 正向变换,然后进行一组 1D 逆变换)?

概念性答案(例如“共轭然后执行此操作”)或“编程”答案(例如“在 MKL 中使用此标志”)都可以。

1个回答

如果我理解正确,鉴于您的 3D 体积数据x[m,n,p],首先您要在前两个变量中进行 2D 前向 DFT(通过 2D FFT)m,n(即,对于沿第 3 维的每个 mn 平面),然后沿第 3 维对向量进行 1D 逆 DFT。

请注意,在第一个操作中,您将每个数据平面替换为频率平面并创建一个新的体积数据,然后您将对该结果体积进行逆 DFT,下面的 MATLAB/OCTAVE 代码演示了一个简单的示例:

A = zeros(2,2,3);      % create a 3D data array
A(:,:,1) = [1,2;3,4];  % first plane of 3D data
A(:,:,2) = [1,2;3,4];  % second plane of 3D data
A(:,:,3) = [1,2;3,4];  % third plane of 3D data

B = fft2(A)        % it'll take 2D-DFT independently for each plane of A

C = ifft(B,[],3)  % we indicate that ifft() be taken along 3rd dimension...

如您所见,由于在第一步之后,我们对 B 的每个平面都有相同的频率数据,因此由于逆 DFT,第三步沿第三维为 C 的每个向量产生了脉冲。

我相信这很容易吗?但仍然分两步(您可以将它们合并为一行,但仍然是两个调用)......