예제 #1
0
        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;
            }
        }
예제 #2
0
        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)));
        }