Compute the complex energy at each frequency
That is all there is to it. For each frequency of interest, you can use this process to compute a complexnumber, Real(F)-jImag(F), which represents the complex energy corresponding to that frequency in the target time series.
Similarly, you can compute the sum of the squares of the real and imaginary parts and consider that to be a measure of the power at that frequency in thetime series. The square root of the power is the amplitude of the energy at that frequency.
Nested for loops
Normally we are interested in more than one frequency, so we would repeat the above procedure once for each frequency of interest. This suggests the use ofnested for loops in the algorithm. The outer loop specifies the frequency of interest. The inner loop computes the sum of the products at a particularfrequency.
Description of the transform method
The static method named transform performs a real to complex Fourier transform. The method does not implement the FFT algorithm. Rather, itimplements a straightforward sampled data version of the continuous Fourier transform defined using integral calculus. (See ForwardRealToComplexFFT01 for an FFT algorithm.)
The return values
The method returns the following:
- Real part of the spectral analysis result
- Imaginary part of the spectral analysis result
- Magnitude of the spectral analysis result
- Phase angle of the spectral analysis result in degrees
The transform method parameters
The method parameters are:
- double[] data - incoming real data
- double[] realOut - outgoing real data
- double[] imagOut - outgoing imaginary data
- double[] angleOut - outgoing phase angle in degrees
- double[] magnitude - outgoing amplitude spectrum
- int zero - the index of the incoming data sample that represents zero time
- double lowF - low frequency limit for computation as a fraction of sampling frequency
- double highF - high frequency limit for computation as a fraction of sampling frequency
Frequency increment, magnitude spectrum, and number of returned values
The computational frequency increment is the difference between the high and low limits divided by the length of the magnitude array.
The magnitude or amplitude is computed as the square root of the sum of the squares of the real and imaginary parts. This value is divided by the incomingdata length, which is given by data.length .
The method returns a number of points in the frequency domain equal to the incoming data length regardless of the high and low frequency limits.
The beginning of the transform method
The class and the transform method begin in Listing 14 . The code in Listing 14 is described above.
Listing 14. The beginning of the transform method. |
---|
public class ForwardRealToComplex01{
public static void transform(double[] data,double[] realOut,double[] imagOut,double[] angleOut,double[] magnitude,int zero,
double lowF,double highF){
double pi = Math.PI;//for convenienceint dataLen = data.length;
double delF = (highF-lowF)/data.length; |