/// <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> /// Forward cosine transform. /// </summary> /// <param name="A">Array</param> /// <returns>Array</returns> public float[] Forward(float[] A) { int N = A.Length, N2 = N / 2, i, k; Complex32[] B = new Complex32[N]; for (i = 0; i < N2; i++) { var j = 2 * i; B[i] = A[j]; B[i + N2] = A[N - j - 1]; } B = FFT.Forward(B); float[] C = new float[N]; Complex32 c = -Maths.I * Maths.Pi / (2 * N); for (k = 0; k < N; k++) { C[k] = 2.0f * (B[k] * Maths.Exp(c * k)).Real / Maths.Sqrt(2 * N); } C[0] = C[0] / Maths.Sqrt2; // DCT-I return(C); }
/// <summary> /// Forward cosine transform. /// </summary> /// <param name="A">Array</param> /// <returns>Array</returns> public float[] Forward(float[] A) { int N = A.Length, N2 = N * 2, i, k; Complex32[] B = new Complex32[N2]; for (i = 0; i < N; i++) { B[i] = A[i]; } B = FFT.Forward(B); float[] C = new float[N]; Complex32 c = -Maths.I * Maths.Pi / N; for (k = 0; k < N; k++) { C[k] = 2.0f * (B[k] * Maths.Exp(c * k)).Imag; } C[0] = A[N - 1] / Maths.Sqrt2; return(C); }
/// <summary> /// Forward Hartley transform. /// </summary> /// <param name="A">Array</param> /// <returns>Array</returns> public float[] Forward(float[] A) { Complex32[] B = Matrice.ToComplex(A); B = FFT.Forward(B); int length = A.Length, i; float[] Hk = new float[length]; for (i = 0; i < length; i++) { Hk[i] = B[i].Real - B[i].Imag; } return(Hk); }
/// <summary> /// Forward Laplace transform. /// </summary> /// <param name="A">Array</param> /// <returns>Array</returns> public Complex32[] Forward(Complex32[] A) { // Fourier transform: Complex32[] B = FFT.Forward(A); // Fourier to Laplace transform: laplace(B, sigma); return(B); }