private static double [] SpatialFrequency(double [] Signal) { Complex [] CompSignal; CompSignal = ConvertToComplex(HanningWindow(Signal)); Fourier.FFT(CompSignal, FourierDirection.Forward); return(NormalizedPositiveFrequencies(CompSignal)); }
public static double [] SyncCoefficients(double [] Signal) { Complex [] CompSignal; double Sync; double [] ReturnValue; CompSignal = ConvertToComplex(HanningWindow(Signal)); Fourier.FFT(CompSignal, FourierDirection.Forward); Sync = CompSignal[0].Magnitude; ReturnValue = new double [CompSignal.Length / 2]; for (int i = 0; i < ReturnValue.Length; i++) { ReturnValue[i] = CompSignal[i].Magnitude / Sync; } ReturnValue[0] = 0; return(ReturnValue); }
public static double [] Autocorrelation(double [] Signal) { Complex [] InputSignal; Complex [] Correlation; InputSignal = ConvertToComplex(HanningWindow(Signal)); Fourier.FFT(InputSignal, FourierDirection.Forward); InputSignal[0].Re = 0; InputSignal[0].Im = 0; Correlation = new Complex[InputSignal.Length]; for (int i = 0; i < InputSignal.Length; i++) { InputSignal[i] = InputSignal[i] / InputSignal.Length; Correlation[i] = InputSignal[i] * InputSignal[i].Conjugate; } Fourier.FFT(Correlation, FourierDirection.Backward); // Normalize by the value in the zeroth element of the array return(MagnitudeAndSign(Correlation)); }
public static double [] Crosscorrelation(Complex [] SignalConjugate, double [] Signal) { Complex [] InputSignal; Complex [] Correlation; InputSignal = ConvertToComplex(HanningWindow(Signal)); Fourier.FFT(InputSignal, FourierDirection.Forward); InputSignal[0].Re = 0; InputSignal[0].Im = 0; SignalConjugate[0].Re = 0; SignalConjugate[0].Im = 0; Correlation = new Complex[InputSignal.Length]; for (int i = 0; i < InputSignal.Length; i++) { InputSignal[i] = InputSignal[i] / InputSignal.Length; Correlation[i] = InputSignal[i] * SignalConjugate[i]; } Fourier.FFT(Correlation, FourierDirection.Backward); // Normalize by the product of the standard deviations of the signal return(MagnitudeAndSign(Correlation)); }