Jamie said:
now that depends. if you convert that to floats, you would need the
Sizeof(Float)*N*2; the reason for the 2 is that you need the Real
and imaginary readings.
if you are attempting a full integer level FFT which i have done,
you would need to allocate 4*N*2; 4 bytes for each 32 bit.
place the 24 bit sample in upper order, and use the lower byte
for your fraction.
That is just my opinion of course.
Now this one i gan agree mostly with. Proper FFT does require imaginary
input and does produce imaginary output (sine-cosine). In most real cases
the imaginary input is all zero, but it does double the input buffer space
needed to compute the FFT and doubles the output size as well.
There are various tradeoffs in setting up any particular implementation, you
can have in place computation (where the input buffer, the output buffer,
and the computation all take place in a single buffer space), the input
buffer can be in-order or "decimated" (the ordering mixed up in a
particular way), the output may be the in-order or decimated. Also the
coefficients may be read from a table or computed "on-the-fly" (a memory
space versus time tradeoff, usually with options in between the limit
cases). Reordering algorithms take only a little time and can easily be
in-place, and normally take little time.
If you need to support streaming instead of computing on a single sample you
may need to double the input buffer space yet again.
If you are using integer math for the FFT you need to consider how to
prevent or handle overflow and underflow cases which will occur, this often
becomes the requirement for additional bits/bytes for the buffer.