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)); }
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)); }
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); }
public static double Abs(this Complex self) { return(Complex.Abs(self)); }
/// <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(); } }
/// <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(); } }