/// <summary> /// Forward Hilbert transform. /// </summary> /// <param name="A">Array</param> /// <returns>Array</returns> public Complex32[] Forward(Complex32[] A) { int N = A.Length; Complex32[] F = FFT.Forward(A); HilbertTransform.hilbertf(F, N); F = FFT.Backward(F); return(HilbertTransform.hilbertb(A, F, N)); }
/// <summary> /// Backward cosine transform. /// </summary> /// <param name="B">Array</param> /// <returns>Array</returns> public float[] Backward(float[] B) { int N = B.Length, N2 = N / 2, i, k; Complex32[] A = new Complex32[N]; Complex32 c = Maths.I * Maths.Pi / (2 * N); for (k = 0; k < N; k++) { A[k] = B[k] * Maths.Exp(c * k) * Math.Sqrt(2 * N); } A[0] /= Math.Sqrt(2); // DCT-I A = FFT.Backward(A); float[] C = new float[N]; for (i = 0; i < N2; i++) { var j = 2 * i; C[j] = A[i].Real / N; C[j + 1] = A[N - i - 1].Real / N; } return(C); }
/// <summary> /// Backward cosine transform. /// </summary> /// <param name="B">Array</param> /// <returns>Array</returns> public float[] Backward(float[] B) { int N = B.Length, N2 = N * 2, i, k; Complex32[] A = new Complex32[N2]; float Bk, temp, c = Maths.Pi / N; for (k = 0; k < N; k++) { Bk = B[k]; temp = k * c; A[k] = new Complex32(Bk * (float)Math.Cos(temp), Bk * (float)Math.Sin(temp)); } A = FFT.Backward(A); float[] C = new float[N]; for (i = 0; i < N; i++) { C[i] = -A[i].Imag * 2.0f; } C[N - 1] = B[0] * Maths.Sqrt2; return(C); }
/// <summary> /// Backward Hartley transform. /// </summary> /// <param name="B">Array</param> /// <returns>Array</returns> public float[] Backward(float[] B) { Complex32[] A = Matrice.ToComplex(B); A = FFT.Backward(A); int length = B.Length, i; float[] Hk = new float[length]; for (i = 0; i < length; i++) { Hk[i] = A[i].Real + A[i].Imag; } return(Hk); }
/// <summary> /// Backward Laplace transform. /// </summary> /// <param name="B">Array</param> /// <returns>Array</returns> public Complex32[] Backward(Complex32[] B) { // Laplace to Fourier transform: Complex32[] A = (Complex32[])B.Clone(); invlaplace(A, sigma); // Fourier transform: return(FFT.Backward(A)); }