public Fourier multiply(Fourier four) { if (cArray.Length != four.getZ().Length) { Console.WriteLine("Not equal length signals."); return(null); } Complex[] newZ = new Complex[cArray.Length]; for (int i = 0; i < cArray.Length; i++) { newZ[i] = cArray[i].multiply(four.getZ()[i]); } return(new Fourier(newZ)); }
public Fourier correlationNormalized(Fourier four) { Fourier X = this.fft(1); Fourier X_star = X.conjugate(); Fourier Y = four.fft(1); Fourier Y_star = Y.conjugate(); Fourier correlation = X.multiply(Y_star).fft(-1); Fourier autoCorrelationX = X.multiply(X_star).fft(-1); Fourier autoCorrelationY = Y.multiply(Y_star).fft(-1); Complex[] norm = new Complex[cArray.Length]; for (int i = 0; i < cArray.Length; i++) { norm[i] = new Complex(correlation.getZ()[i].getReal() / Math.Sqrt(autoCorrelationX.getZ()[0].getReal() * autoCorrelationY.getZ()[0].getReal()), 0); } return(new Fourier(norm)); }