Please read post #91
your question is also answered in the code itself in the comments
// calculation is performed in-place the FFT_buffer [re, im, re, im, re, im . . .]
arm_cfft_f32(S, fftin, 0, 1);
May I put forward a slightly different interpretation. If one has only real valued samples, then rfft is always the better choice. You can do the FFT roughly 2 times faster and you only get the frequencies that matter (e.g. for a spectrogram). No need to waste a imaginary vector and discarding the negative frequencies after FFT.As I mentioned, using a real-to-complex FFT with the CMSIS functions will not save memory (because the output buffer has to be two times the length of the FFT and you need a separate input buffer: in a complex-to-complex-FFT your processing is done in-place one buffer of size 2*FFT length), if I remember correctly from my experiments with the arm_rfft function. And -as you mentioned- memory is the limiting factor here, not processing speed. So it might not be worth playing with rfft except of course for didactic reasons.
May I put forward a slightly different interpretation. If one has only real valued samples, then rfft is always the better choice. You can do the FFT roughly 2 times faster and you only get the frequencies that matter (e.g. for a spectrogram). No need to waste a imaginary vector and discarding the negative frequencies after FFT.
I'm pretty sure on that Sorry.But maybe I am doing something wrong in using these functions?
OK, frankThe CMSIS documentation says (https://www.keil.com/pack/doc/CMSIS/DSP/html/group__RealFFT.html) the real length N FFT uses a buffer of size N (because it holds the complex output values of a length N/2 internal FFT). That is something I can understand.
However, the CMSIS arm_rfft_f32 routine wants an output buffer of size N * 2, otherwise it refuses to work (the code compiles, but gets stuck when run, see the code linked to in post #119). That is something I do not understand, but apart from that everything seems to work fine, if the buffer is large enough. And it is for this peculiarity that I think it is not worth doing real FFT with the CMSIS function, if you want to save memory.