3

I'm looking to utilise pruned DFTs.

I can't get my head around FFTW's example - they don't have any DFT pruning utilities in the library, so you have to code your own.

In general, how does it work? If I have to code it, I have to understand it in the first place.

Is the real-to-complex DFT an example of pruning (in both directions)? You could say the input are pruned (only the real component is non-zero) and the output is pruned (only the second half is returned).

I'm wanting to similarly prune both the input and output of the transformation, in bands. The output band of results I'm interested in will remain the same. The input band that I'm interested in will be dynamic.

My application works without pruning but a lot of my inputs are 0 - as well, I don't need all of the outputs; so, I feel I can achieve serious performance benefits coming from pruning.

I came across a paper on Spiral DFT where they showcase good pruned DFT performance. Is there a particular library that provides the best pruned / general DFT performance?

FFTW says that you can get O(nlog(k)) by pruning outputs - where k is the amount of output interested in; this only addresses the pruning of the output. In general, what performance can I expect from the state of the art (even if it's not open source) for both pruned inputs and outputs?

Does pruning have to be in a contiguous band, or can I select arbitrary bins to prune?

Tobi Akinyemi
  • 804
  • 1
  • 8
  • 24
  • In case you haven't already seen this: http://www.fftw.org/pruned.html – Adrian Roman Jul 17 '20 at 12:50
  • @AdrianRoman That's the same article I linked in my question – Tobi Akinyemi Jul 17 '20 at 12:50
  • 3
    Did you take note of the paragraph in the linked article that recommends not using pruned FFTs? *“The problem is that optimizing an FFT requires a lot of effort, [...]. By implementing a pruned FFT, you are gaining a small factor in the log, but you are sacrificing a significant part of the effort that went into optimizing full FFTs [...], and the latter can easily outweigh the former. Because of this, I would not recommend bothering to consider a pruned 1d FFT unless you want 1% of the outputs or fewer [...].”* – Cris Luengo Jul 17 '20 at 14:01
  • @CrisLuengo That comment regards pruned FFTW outputs - not inputs. There are also DFT libraries out there besides FFTW. I.e. the spiral library I referenced (with better performance) – Tobi Akinyemi Jul 17 '20 at 14:02
  • 2
    No, the comment also refers to inputs. I *pruned* the comment to fit it in the comment length limit. If you think you’ll get better performance with the Spiral library, then why not try it? – Cris Luengo Jul 17 '20 at 14:39
  • @Cris because I want to know if there are any better tools, before investing time rewriting my application – Tobi Akinyemi Jul 17 '20 at 14:44
  • Oh, if you’re asking for recommendations for a library, then the question is off-topic for Stack Overflow. Try this one instead: https://softwarerecs.stackexchange.com/ – Cris Luengo Jul 17 '20 at 14:55
  • @cris you asked me why I haven't used spiral fft; and I said because I'm looking around for a good library/method. This question is asking how dft pruning (in particular the example provided by FFTW) works and the time complexities (on topic) – Tobi Akinyemi Jul 17 '20 at 15:03
  • Benefits to pruning are limited because in the FFT every output depends on every input. That's math, no implementation is going to escape from that. – MSalters Jul 17 '20 at 15:20
  • @msalters your point doesn't make sense. If you have 0 inputs, there are obvious optimisations to be made – Tobi Akinyemi Jul 17 '20 at 15:30

0 Answers0