public List <double> FastCorrelationTwoSignals(List <double> signal1, List <double> signal2, ref List <double> NormalizedSignal) { int Count; Complex[] S1; Complex[] S2; Complex[] S11; Complex[] S22; Complex[] ResultSignal; List <double> Result = new List <double>(); int Size = signal1.Count; if (signal1.Count != signal2.Count) { Size = (signal1.Count + signal2.Count) - 1; for (int j = signal1.Count; j < Size; j++) { signal1.Add(0); } for (int j = signal2.Count; j < Size; j++) { signal2.Add(0); } } S1 = new Complex[Size]; S2 = new Complex[Size]; ResultSignal = new Complex[Size]; for (int j = 0; j < Size; j++) { S1[j] = new Complex(0, 0); S2[j] = new Complex(0, 0); S1[j].real = signal1[j]; S2[j].real = signal2[j]; } S11 = Fourier.FFT(S1); S22 = Fourier.FFT(S2); for (int j = 0; j < Size; j++) { S11[j].imag *= -1; } for (int j = 0; j < Size; j++) { ResultSignal[j] = S11[j] * S22[j]; } S1 = Fourier.IFFT(ResultSignal); for (int i = 0; i < Size; i++) { Result.Add((S1[i].real / Size) / Size); } return(Result); }
public List <double> FastConvolve(List <double> H, List <double> X, int OrignX, int OriginH) { int TempH, TempX; int OldCount = H.Count; List <double> Result = new List <double>(); List <double> FoldedH = Folding(H); double ComulativeSum = 0; int FoldedIndex = H.Count - (OriginH + 1); TempH = FoldedIndex; TempX = OrignX; double Temp = 0; Complex[] S1; Complex[] S2; Complex[] S11; Complex[] S22; Complex[] ResultSignal; int Size = X.Count; S1 = new Complex[Size]; S2 = new Complex[Size]; ResultSignal = new Complex[Size]; for (int j = 0; j < Size; j++) { S1[j] = new Complex(0, 0); S2[j] = new Complex(0, 0); S1[j].real = H[j]; S2[j].real = X[j]; } S11 = Fourier.FFT(S1); S22 = Fourier.FFT(S2); for (int j = 0; j < Size; j++) { ResultSignal[j] = S11[j] * S22[j]; } S1 = Fourier.IFFT(ResultSignal); for (int i = 0; i < Size; i++) { Result.Add(S1[i].real / Size); } return(Result); }