I want to use model-based clustering to classify 1,225 time series (24 periods each). I have decomposed these time series using the fast Fourier transform and selected the harmonics that explain at least a threshold percentage of time series variance for all time series in the sample. I want to do model-based clustering on the real and imaginary parts for each transform element of a give time series because it would potentially save me from having to account for temporal autocorrelation in model awed clustering across periods of a time series. I know that each complex element of the fast Fourier transform is independent from other elements, but I do not know if the imaginary and real parts of the output for a given output element are independent. I would like to know because if they were, it would allow me to maintain the default assumption of the Mclust package in R for model-based clustering that the variables analyzed have a multivariate Gaussian distribution.
NOTE: The full FFT is not used as I have discarded the elements at negative frequencies and converted from a two-sided to a one-sided spectrum by multiplying frequencies 1 to Nyquist by two per advice here: How do I calculate amplitude and phase angle of fft() output from real-valued input?.
The real part and the imaginary part are orthogonal (due to the sin(x) and cos(x) functions being orthogonal). This characteristic is essential to how an FFT works.
Per Wolfram MathWorld:
A Fourier series is an expansion of a periodic function in terms of an infinite sum of sines and cosines. Fourier series make use of the orthogonality relationships of the sine and cosine functions.
The FFT is essentially a change of basis. That says nothing about the data itself which may or may not contain correlations between the real and imaginary parts.
With respect to the edited question, "How do I calculate amplitude and phase angle of fft() output from real-valued input?." The way to convert the real component and imaginary components to magnitude and phase angle is magnitude = (real_part ** 2 + imaginary_part ** 2) ** 0.5 and angle=arctan2(imaginary_part, real_part). It is the same as a rectangular-to-polar conversion.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With