Example #1
0
        private void CalculateCepstrum()
        {
            answer = new MySeries[spec.Length];
            Complex[] buff = new Complex[Setting.FrameLength];

            for (int frame = 0; frame < answer.Length; frame++)
            {
                SetLabelValue(frame * 100 / answer.Length);
                SetBarValue(frame * 100 / answer.Length);
                for (int i = 0; i < Setting.FrameLength; i++)
                {
                    buff[i] = Math.Log(1 + spec[frame].data[i]);
                }
                FFT.Backward(buff, FourierTransformScaling.NoScaling);
                answer[frame]       = new MySeries();
                answer[frame].begin = (frame + 1) * Setting.FrameLength / 2;
                answer[frame].end   = answer[frame].begin + Setting.FrameLength - 1;
                answer[frame].data  = new float[Setting.FrameLength];
                for (int i = 0; i < Setting.FrameLength; i++)
                {
                    answer[frame].data[i] = (float)Complex.Abs(buff[i]);
                }
            }
            SetLabelValue(100);
            SetBarValue(100);
            this.Invoke(new Action(this.Close));
        }
Example #2
0
        private void CalculateSpec()
        {
            answer = new MySeries[sample.end * 2 / Setting.FrameLength - 1];
            Complex[] buff = new Complex[Setting.FrameLength];

            for (int frame = 0; frame < answer.Length; frame++)
            {
                SetLabelValue(frame * 100 / answer.Length);
                SetBarValue(frame * 100 / answer.Length);
                for (int i = 0; i < Setting.FrameLength; i++)
                {
                    buff[i] = sample.data[frame * Setting.FrameLength / 2 + i];
                }
                HammingWindow.Use(buff);
                FFT.Forward(buff, FourierTransformScaling.ForwardScaling);
                answer[frame]       = new MySeries();
                answer[frame].begin = (frame + 1) * Setting.FrameLength / 2;
                answer[frame].end   = answer[frame].begin + Setting.FrameLength - 1;
                answer[frame].data  = new float[Setting.FrameLength];
                for (int i = 0; i < Setting.FrameLength; i++)
                {
                    answer[frame].data[i] = (float)Complex.Abs(buff[i]);
                }
            }
            SetLabelValue(100);
            SetBarValue(100);
            this.Invoke(new Action(this.Close));
        }
Example #3
0
        public static bool VectorEquals(Vector <Complex> v, Complex[] y, double eps)
        {
            var x = Util.GetData(v);

            for (int i = 0; i < v.Count; i++)
            {
                if (Complex.Abs(x[i] - y[i]) > eps)
                {
                    return(false);
                }
            }
            return(true);
        }
Example #4
0
 public static double Abs(this Complex self)
 {
     return(Complex.Abs(self));
 }
Example #5
0
            /// <summary>
            /// Prints eigenvalues and eigenvectors of nonsymmetric generalized eigen-problems.
            /// </summary>
            public static void General(SparseMatrix A, SparseMatrix B, SpectraResult result, bool shift, bool cshift = false)
            {
                if (!EnsureSuccess(result))
                {
                    return;
                }

                int n     = A.RowCount;
                int nconv = result.ConvergedEigenValues;

                Console.WriteLine();
                Console.WriteLine("Testing ARPACK++ class ARluNonSymGenEig");
                Console.WriteLine("Real nonsymmetric generalized eigenvalue problem: A*x - lambda*B*x");

                Console.WriteLine(!shift ? "Regular mode" :
                                  (cshift ? "Shift and invert mode (using the imaginary part of OP)" : "Shift and invert mode (using the real part of OP)"));
                Console.WriteLine();

                Console.WriteLine("Dimension of the system            : " + n);
                Console.WriteLine("Number of 'requested' eigenvalues  : " + result.Count);
                Console.WriteLine("Number of 'converged' eigenvalues  : " + nconv);
                Console.WriteLine("Number of Arnoldi vectors generated: " + result.ArnoldiCount);
                Console.WriteLine("Number of iterations taken         : " + result.IterationsTaken);
                Console.WriteLine();

                var evals = result.EigenValues;
                var evecs = result.EigenVectors;

                // Printing eigenvalues.

                Console.WriteLine("Eigenvalues:");

                for (int i = 0; i < nconv; i++)
                {
                    Console.WriteLine("  lambda[" + (i + 1) + "]: " + evals[i]);
                }

                Console.WriteLine();

                if (evecs != null)
                {
                    // Printing the residual norm || A*x - lambda*B*x ||
                    // for the nconv accurately computed eigenvectors.

                    var x = new Complex[n];
                    var y = new Complex[n];
                    var r = new double[nconv]; // residuals

                    for (int i = 0; i < nconv; i++)
                    {
                        var lambda = evals[i];

                        evecs.Column(i, x);

                        CVector.Copy(x, y);

                        // y = B*x
                        B.Multiply(x, y);

                        // y = A*x - lambda*B*x
                        A.Multiply(1.0, x, -lambda, y);

                        r[i] = CVector.Norm(y) / Complex.Abs(lambda);
                    }

                    for (int i = 0; i < nconv; i++)
                    {
                        Console.WriteLine("||A*x(" + i + ") - lambda(" + i + ")*B*x(" + i + ")||: " + r[i]);
                    }

                    Console.WriteLine();
                }
            }
Example #6
0
            /// <summary>
            /// Prints eigenvalues and eigenvectors of complex generalized eigen-problems.
            /// </summary>
            public static void Print(SparseMatrix A, SparseMatrix B, ArpackResult result, bool shift)
            {
                int n     = A.RowCount;
                int nconv = result.ConvergedEigenValues;

                Console.WriteLine();
                Console.WriteLine("Testing ARPACK++ class ARluCompGenEig");
                Console.WriteLine("Complex generalized eigenvalue problem: A*x - lambda*B*x");
                Console.WriteLine(shift ? "Shift and invert mode" : "Regular mode");
                Console.WriteLine();

                Console.WriteLine("Dimension of the system            : " + n);
                Console.WriteLine("Number of 'requested' eigenvalues  : " + result.Count);
                Console.WriteLine("Number of 'converged' eigenvalues  : " + nconv);
                Console.WriteLine("Number of Arnoldi vectors generated: " + result.ArnoldiCount);
                Console.WriteLine("Number of iterations taken         : " + result.IterationsTaken);
                Console.WriteLine();

                var evals = result.EigenValues;
                var evecs = result.EigenVectors;

                // Printing eigenvalues.

                Console.WriteLine("Eigenvalues:");

                for (int i = 0; i < nconv; i++)
                {
                    Console.WriteLine("  lambda[" + (i + 1) + "]: " + evals[i]);
                }

                Console.WriteLine();


                if (evecs != null)
                {
                    // Printing the residual norm || A*x - lambda*B*x ||
                    // for the nconv accurately computed eigenvectors.

                    var x = new Complex[n];
                    var y = new Complex[n];
                    var r = new double[nconv]; // residuals

                    for (int i = 0; i < nconv; i++)
                    {
                        var lambda = evals[i];

                        evecs.Column(i, x);

                        Vector.Copy(x, y);

                        // y = B*x
                        B.Multiply(x, y);

                        // y = A*x - lambda*B*x
                        A.Multiply(1.0, x, -lambda, y);

                        r[i] = Vector.Norm(y) / Complex.Abs(lambda);
                    }

                    for (int i = 0; i < nconv; i++)
                    {
                        Console.WriteLine("||A*x(" + (i + 1) + ") - lambda(" + (i + 1) + ")*B*x(" + (i + 1) + ")||: " + r[i]);
                    }

                    Console.WriteLine();
                }
            }