Skip to content

PFT and Auto-MPFT for a Contiguous Subset of Fourier Coefficients #398

@stumarcus314

Description

@stumarcus314

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions