To give a little more context, the Discrete Fourier Transform (DFT) is in general a complex-to-complex transform - if you give it a vector of
N complex numbers in the time domain, you get
N complex numbers back representing the spectra of your signal. The Fast Fourier Transform (FFT) is a fast algorithm for computing the DFT, but it’s ubiquitous enough that people commonly use “FFT” for the transform in general.
In the special case where you signal is real-valued (the imaginary part is zero for all your samples), it turns out that the spectrum is conjugate-symmetric (positive frequencies are the complex conjugates of negative frequencies), so you only need to compute half of it.
rfft exists to do that optimization, and only gives you the positive half of the spectrum. So in that case
rfft(x) will give you a vector of length
length(x) ÷ 2 + 1 (note
÷ is truncating integer division).
x is length
rfft(x) will be of length
9, but if
x is length
rfft(x) will also be length
9. That’s why when you invert the transform with
irfft you need to specify the original length, as it’s lost in the
If you’re dealing with real-valued signals you can use
irfft, and if you have complex signals you should use