-
Notifications
You must be signed in to change notification settings - Fork 698
Description
Efficient algorithms have been developed recently to compute a contiguous subset of the Fourier coefficients of a 1D or multidimensional DFT. The 1D version is called the partial Fourier transform (PFT) [1], while the multidimensional version is called the automatic multidimensional partial Fourier transform (Auto-MPFT) [2].
For example, the traditional 1D FFT has complexity O(N*log(N)), while the PFT has complexity O(N+K*log(K)), if only K contiguous Fourier coefficients of the N-point spectrum are required. As another example, the traditional 2D FFT has complexity O(N*log(N)), while the Auto-MPFT has complexity O(N+K*log(K)), where N = N1*N2 and K = K1*K2, if only a K1xK2 contiguous block of the N1xN2 spectrum is required.
Yong-chan Park, one of the authors of those papers, has provided C++ code on GitHub implementing these algorithms. Python implementations are also available on GitHub. Since the IDFT is similar to the DFT, it should be possible to tweak these algorithms to compute a contiguous subset of the time-domain samples of a 1D or multidimensional IDFT.
DFTs and IDFTs requiring only a small contiguous subset of the outputs are common in real world signal processing applications. Would these algorithms be suitable for FFTW?
[1] Park, Yong-chan, Jun-Gi Jang, and U. Kang. "Fast and accurate partial fourier transform for time series data." Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery & Data Mining. 2021.
[2] Park, Yong-chan, Jongjin Kim, and U. Kang. "Fast multidimensional partial fourier transform with automatic hyperparameter selection." Proceedings of the 30th ACM SIGKDD Conference on Knowledge Discovery and Data Mining. 2024.
Yong-chan Park: https://yongchanpark.github.io/
PFT C++ Code: https://github.com/snudatalab/PFT
Auto-MPFT C++ Code: https://github.com/snudatalab/Auto-MPFT
PFT Python Code: https://github.com/mines-opt-ml/pft-for-ptycho/blob/main/src/PFT1D.py
Auto-MPFT Python Code: https://github.com/mines-opt-ml/pft-for-ptycho/blob/main/src/Auto-MPFT.py