Since the real and imaginary parts of the transform are orthogonal, this is the same as performing a real-valued FFT once for each input and then combining the individual outputs.

See this derivation for a more detailed explanation: http://www.hyperdynelabs.com/dspdude/papers/COMPUTING%20THE%20FFT%20OF%20TWO%20REAL%20SIGNALS%20USING%20A%20SINGLE%20FFT.pdf

Yes, I've tried that one and it is faster (more noticeable when you use non-power of two FFT sizes like 14400 samples on multichannel FFT, while it is faster than naive DFT, it is still notoriously slow for very large sizes) than doing it separately and BTW for those who don't have access to complex numbers, here's the formula for "unscrambling" complex-input FFT (commonly used for SDR-related things) into two-channel stereo FFT:

const j = complexSpectrum.length-i;

x = idxWrapOver(i, complexSpectrum.length),

y = idxWrapOver(j, complexSpectrum.length);

spectrum1[i] = Math.hypot(complexSpectrum[x].re+complexSpectrum[y].re, complexSpectrum[x].im-complexSpectrum[y].im)/Math.SQRT2;

spectrum2[i] = Math.hypot(complexSpectrum[x].im+complexSpectrum[y].im, complexSpectrum[x].re-complexSpectrum[y].re)/Math.SQRT2;

where "i" is FFT bin index,

function idxWrapOver(x, length) {

return (x % length + length) % length;

}

and "complexSpectrum" is a complex-valued FFT data

Also, I think this topic is little bit de-railed; it went into performance improvements of multichannel audio spectrum analyzers by using complex-input FFTs, which is true considering calculating two or more FFTs can have significant performance impact. But what I really mean is that is complex-input FFT as in spectrum of I/Q signals in SDR **really useful** for analysis of stereo audio, which is basically the same minus the "unscrambling" operation?