I have an array
x of length 1024 (stored as 16 bits integers, named for example
np.int16 in numpy/python), i.e. the size of x is 1024*2 = 2048 bytes.
(Remark : x comes from an audio .wav file, stored as 16 bits integers, as it is very common. But it is also very common to interpret it as a float array, with values in $[-1, +1]$ by doing:
x = x * 1.0 / 2^16)
When I take
fft(x), as the input was real, there is some symmetry that makes that I only need to store half of the array
fft(x), that's often also called
rfft(x) : real fft.
This means that, by taking
fft, I translated 1024 real numbers into 512 complex numbers (i.e. can be viewed as 1024 real numbers again) : in a mathematical point of view, we have the same amount of data :
1024 real coefficients -- rfft --> 1024 real coefficients
But in a programmaing point of view, is it possible to store, losslessly* and without compression, the
fft of an array of 1024 elements of type
int16 (using 2048 bytes) with 2048 bytes maximum ?
If not, what is the minimum number of bytes required to store the
fft of such an array?
remark (*) : by losslessly I mean that the original
x can be recovered later