public void Proceed() { if (IsAllChecked()) { PreviousMethod = CurrentMethod; IsBuilded = true; OutputString = ""; var InputSignal = ComplexConverter.FromList(Signal); if (CurrentMethod == Methods.FFT) { if (IsForward) { Result = FourierTransform.ForwardFourierTransform(InputSignal); } else { Result = FourierTransform.InverseFourierTransform(InputSignal); } } else { if (IsForward) { Result = FourierTransform.ForwardDiscreteFourierTransform(InputSignal); } else { Result = FourierTransform.InverseDiscreteFourierTransform(InputSignal); } } foreach (var item in Result) { if (CurrentChartType == Charts.Signal) { OutputString += " " + item.ToString() + "\n"; } else if (CurrentChartType == Charts.Magnitude) { OutputString += $" {item.Magnitude:F3}\n"; } else if (CurrentChartType == Charts.Phase) { OutputString += $" {item.Phase:F3}\n"; } } BindSeries(); Output.Text = OutputString; } }
public static List <int> MultiplicatePolynomials(List <int> A, List <int> B) { int neededDegree = MathBase.FindUpperDegreeOf2(System.Math.Max(A.Count, B.Count)); neededDegree <<= 1; // equals neededDegree *= 2; var complexA = ComplexConverter.ConvertToComplexList(A, neededDegree); var complexB = ComplexConverter.ConvertToComplexList(B, neededDegree); complexA = MakeFFT(complexA); complexB = MakeFFT(complexB); for (int i = 0; i < neededDegree; i++) { complexA[i] *= complexB[i]; } return(ComplexConverter.ConvertToIntList(MakeInverseFFT(complexA))); }