The first question:
in the documentations for CMSIS DSP real FFT functions, it is mentioned :
The FFT of a real N-point sequence has even symmetry in the frequency domain. The second half of the data equals the conjugate of the first half flipped in frequency. Looking at the data, we see that we can uniquely represent the FFT using only N/2 complex numbers. These are packed into the output array in alternating real and imaginary components:
X = { real[0], imag[0], real[1], imag[1], real[2], imag[2] ... real[(N/2)-1], imag[(N/2)-1 }
so an array of N samples, gives N parts (N/2 real parts and N/2 imaginary parts).
but in the description of arm_rfft_q15
function it is written :
If the input buffer is of length N, the output buffer must have length 2*N. The input buffer is modified by this function.
why is that ?
The second question:
the description of arm_rfft_q15
indicates that the input values should be in 1.15 fixed point values:
I understand the simple fixed point arithmetics, but how I'm supposed to convert my real int8_t values to 1.15 format? and what to do with the ouput type (let's say 256 points FFT which outputs values in the 8.8 fixed point format)? I guess some scaling should be done but I don't understand the upscale thing.