From: Intuitive on
Hello everybody.

I have got a DSP question for all of you.
I'd like to know if it is possible to obtain a large FFT (for example 1024
samples) combining small SEQUENTIAL FFTs(128 samples).

It is really important for me that the input samples are consecutive (so it
is not possible to apply the usual trick of even and odd samples).
I'm working on a real time system with a RT constraint of 128 samples.
Actually I'm accumulating samples for 8 iterations (128*8=1024) until to
obtain the 1024 samples to perform the FFT of the input signal. However I'd
like to decompose the FFT in small sequential FFTs in order to distribute
the compute for each frame.

If you have any question don't hesitate to contact me.

I'm looking forward to hearing from you, Andrea.




From: Greg Berchin on
On Wed, 16 Jun 2010 06:44:18 -0500, "Intuitive"
<andrea3891(a)n_o_s_p_a_m.gmail.com> wrote:

>I have got a DSP question for all of you.
>I'd like to know if it is possible to obtain a large FFT (for example 1024
>samples) combining small SEQUENTIAL FFTs(128 samples).
>
>It is really important for me that the input samples are consecutive (so it
>is not possible to apply the usual trick of even and odd samples).
>I'm working on a real time system with a RT constraint of 128 samples.
>Actually I'm accumulating samples for 8 iterations (128*8=1024) until to
>obtain the 1024 samples to perform the FFT of the input signal. However I'd
>like to decompose the FFT in small sequential FFTs in order to distribute
>the compute for each frame.

It's possible, but you have to modify the FFT algorithm slightly.

Start with the sliding DFT formulations that I presented here:
http://groups.google.com/group/comp.dsp/msg/06800ec6bc25deb8?hl=en. Then note
my comment at the end: "Either of these can be reformulated for cases where the
overlap is less than (N-1) points." In your case the "old" samples are all
zeroes. You will build your 1024-point FFT in eight "hops", and each hop will
overlap the previous data set by 896 samples, instead of by just one sample.

The modification to the FFT algorithm is in the denominator of the exponential
terms. A 128-point FFT (DFT) is defined as:

127
X(k) = SUM [x(n)*exp(-j2PIkn/128)]
n=0

However, each of your "small sequential FFTs" needs to be computed as:

127
X(k) = SUM [x(n)*exp(-j2PIkn/1024)] (note "1024" in denominator)
n=0

Greg
From: Greg Berchin on
On Wed, 16 Jun 2010 09:15:40 -0400, Greg Berchin <gberchin(a)comicast.net.invalid>
wrote:

>You will build your 1024-point FFT in eight "hops", and each hop will
>overlap the previous data set by 896 samples, instead of by just one sample.

Make that, "instead of by 1023 samples".
From: Clay on
On Jun 16, 7:44 am, "Intuitive" <andrea3891(a)n_o_s_p_a_m.gmail.com>
wrote:
> Hello everybody.
>
> I have got a DSP question for all of you.
> I'd like to know if it is possible to obtain a large FFT (for example 1024
> samples) combining small SEQUENTIAL FFTs(128 samples).
>
> It is really important for me that the input samples are consecutive (so it
> is not possible to apply the usual trick of even and odd samples).
> I'm working on a real time system with a RT constraint of 128 samples.
> Actually I'm accumulating samples for 8 iterations (128*8=1024) until to
> obtain the 1024 samples to perform the FFT of the input signal. However I'd
> like to decompose the FFT in small sequential FFTs in order to distribute
> the compute for each frame.
>
> If you have any question don't hesitate to contact me.
>
> I'm looking forward to hearing from you, Andrea.

Yes, and what you may want to look up is the difference between
decimation in time and decimation in frequency algorithms for the
radix 2 FFT.

IHTH,
Clay


From: Vladimir Vassilevsky on


Intuitive wrote:

> Hello everybody.
>
> I have got a DSP question for all of you.
> I'd like to know if it is possible to obtain a large FFT (for example 1024
> samples) combining small SEQUENTIAL FFTs(128 samples).

The best and the simplest is get the data back by inverse FFTs, then
compite the large FFT. However you can combine two small FFTs into one
large, and so on, so forth. This is not going to be fast or elegant.
The even bins of the large FFT are done by summation of the bins of the
small FFTs. The odd bins done by the frequency shift of the small FFTs
by 1/2 of the bin (that is sinc interpolation in frq domain), and then
summation just like the even bins.

Vladimir Vassilevsky
DSP and Mixed Signal Design Consultant
http://www.abvolt.com