## Fast Fourier Transform (FFT) (Part 4)

Part 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

Once the FFT algorithm is executed, we get complex values, made of **imaginary **values and **real **values. We need to apply some maths in order to convert them in **magnitude **values. This is quite simply done thanks to the following routine which converts the complex (so as to say rectangular) values into a polar value:

void PlainFFT::complexToMagnitude(double *vR, double *vI, uint8_t samples) { // vM is half the size of vR and vI for (uint8_t i = 0; i < samples; i++) { vR[i] = sqrt(sq(vR[i]) + sq(vI[i])); } }

Read this document about conversion (p 6)

Computing the phase information is quite easy, but I do not really care about it and it requires the **arctangent()** trigonometric which does not come standard in Arduino language. However if you need it, you will have to use the **math **library) and compute the pahse values using the following formula: phase[FFT(A)]=arctangent(|Imag[FFT(A)]| / |Real[FFT(A)]|).