FFT on each one sample and how to use AbstractFifo for overlapping?

I have two question.

  1. To receive quite good results with FFT I always make window (Hann or something similar) and overlapping. By overlapping I mean second half of one block of data is overlapped with first half of next block and so on. But recently my friend told me that the best result I would receive if I perform FFT on each sample. I mean the scenario that I have block from sample 0 to 4095 and I perform on it FFT. And then I should perform next FFT on samples from 1 to 4096, and then from 2 to 4097 and so on. For me it sounds radiculous from the CPU point of view. But my friend told me that all great and famous FFT analysers like Voxengo SPAN or Fabfilter Pro-Q3 works like that. I can’t believe that. So I would like to ask what do you think about such solution. Is it worth to write and test code like that?

  2. Second question is about juce::AbstractFifo. Is there any nice solution to get overlapped windows of audio blocks with Juce? The first idea in my mind is to use two instances of AbstractFifo and using them on overlapped blocks. But it looks like it is not elegant solution. So I wonder if is there any ready to use solution in Juce for collecting and using overlapped audio blocks?

For any advice and help great thanks in advance.

Best Regatds.

For 1) I raise you another question: you sure your friend isn’t joking? It of course depends on the application and what you want to achieve, but I very much doubt that those analysers have a 1 sample hop-size.

For 2) long time ago I wrote something like that, don’t know if it still works with the current JUCE version, and I am very much aware that the interface isn’t really straight forward :smiley: GitHub - DanielRudrich/OverlappingFFTProcessor: This class takes care of buffering input and output samples for a FFT processing with a hop-size of nFFT/2 and Hann windowing. An examplary JUCE project is also included.

Hello Daniel! Thanks for your reply.
Yes at first I also thought my friend was joking but he claimed he heard about that from someone much more experienced in that case. So I it looks like I need to make more research.

For the second question: thanks for your code. I will research it and if I use it I will tell you.

Best Regards

1 sample hopsize would mean that you would get 48’000 spectra per second (@ 48kHz). So just for displaying a spectrogram that’s nuts :smiley: also the time resolution wouldn’t be improved as there’s still Heisenberg having the last word. The results will be just an interpolated version of those with a higher hopsize.

1 Like