I've read questions like this one, this one, and this one which ask why we use complex numbers instead of real numbers, and that's one half of the question, but the other half, which I've never seen conclusively explained, is why we use complex numbers as a wrapper at all.

From what I understand, there's nothing special about complex numbers in this case; they're simply a container (a struct, for those familiar with programming) for a pair of numbers which describe magnitude an phase.

Is there a mathematical or convenience reason why, traditionally, FFT uses complex number systems for this purpose? Is there a historical aspect to it? Is there any reason why we shouldn't just describe the magnitude and phase as a vector or some other similar structure?

  • $\begingroup$ I may be a bit dense but I don't get your question: are you asking why they are complex numbers appearing in the FFT or why people use a complex representation instead of two vectors? Maybe a partial answer is that the FFT matrix can be factored which is why it can be implemented fast (see math.stackexchange.com/questions/1915097/how-does-fft-work/…) if you used a different representation, almost certainly you would increase the complexity. Please also clarify what you're suggesting in your last sentence, how would your algorithm work? $\endgroup$ – tibL Sep 28 '16 at 8:56
  • $\begingroup$ The discrete Fourier basis exists in order to diagonalize shift-invariant linear operators, and when we diagonalize an operator it's not surprising to find that the eigenvalues and eigenvectors are complex-valued. I wrote more about this viewpoint here: math.stackexchange.com/a/1944778/40119 $\endgroup$ – littleO Sep 28 '16 at 9:17
  • $\begingroup$ Is there an alternative (perhaps more intuitive) structure that we could use here? You can't generally multiply "vectors", I think any "2 dimensional structure with a multiplication rule" will end up becoming the complex numbers "up to isomorphism". I suppose we could reframe it in terms of matrices, though. $\endgroup$ – Omnomnomnom Sep 28 '16 at 9:51
  • $\begingroup$ @tibL Sorry, you'll have to forgive me for my unusual terminology. When I say vector, I'm thinking of the struct Vector2 { public float x; public float y; } kind of vector. $\endgroup$ – Polynomial Sep 28 '16 at 10:12
  • $\begingroup$ @Omnomnomnom That's pretty much on the lines of what I'm trying to get at. Each bucket output is just a pair of two values (sine amplitude and phase at that bucket's frequency value); what makes complex numbers ideal as a representation over other number-pair/set structures? That's what I'd like to see in an answer. $\endgroup$ – Polynomial Sep 28 '16 at 10:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.