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
fft(x)
so thatx
can be recovered later losslessly. $\endgroup$ – Basj Mar 26 '14 at 13:50