Skip to content

Discussion : Generic interfaces for the Fourier transforms #1023

@loiseaujc

Description

@loiseaujc

Hej everyone,

Given how far we've gone with the linear algebra module, I think it is time to think a bit about what could be the next "big" addition to stdlib. Following some old discussions (see #1, #20, #21, #66, #409 and #540), introducing fast Fourier transforms capabilities seem like the natural next step. Having access to the FFT (and its variants) would allow for numerous additional functionalities, including (but not limited to):

  • signal processing: spectral analysis, convolution, auto-correlation, cross-correlation, etc.
  • partial differential equations: spectral and pseudo-spectral solvers, fast elliptic (e.g. Poisson) solver, etc.
  • linear algebra: circulant matrices, fast matrix-vector product for Toeplitz and Hankel matrices, etc.

There are many FFT libraries available out there, with different licenses and API. From reading the previous discussions, it seems to me that the consensus back then was something along the following lines:

  • Have fftpack as a stand-alone package.
  • Implement some high-level interfaces (e.g. y = fft(x), p = plan_fft(x)) in stdlib which would allow to switch between different backends (to alleviate licencing issues with FFTW for instance) with fftpack being the default one.
  • Have wrappers for the most common backends, e.g. fftpack, FFTW, MKL, and possibly a couple of others.

Note that if fftpack is the default backend, we would need to keep the modernization effort started by @jacobwilliams in order to cover all the different precisions by stdlib.

@certik, @milancurcic, @ivan-pi : is my understanding of the discussions you had a couple of years ago correct ? Do you still stand by this point of view or has it evolved?
@perazz, @jvdp1, @jalvesz : Given your experience with developing the linear algebra module, do you have insights that could be useful for the fft endeavor?

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