Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        /// <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));
        }