A more advanced FFT that is a lot more general.
Esempio n. 1
0
        public BluesteinTransformlet(int R, int N, ScalarValue[] u)
            : base(R, N, u)
        {
            // figure out the right Bluestein length and create a transformer for it
            Nb = SetBluesteinLength(2 * R - 1);
            ft = new Fourier(Nb);

            // compute the Bluestein coeffcients and compute the FT of the filter based on them
            b = ComputeBluesteinCoefficients(R);
            var c = new ScalarValue[Nb];
            c[0] = ScalarValue.One;

            for (int i = 1; i < R; i++)
            {
                c[i] = b[i].Conjugate();
                c[Nb - i] = c[i];
            }

            for (int i = R; i <= Nb - R; i++)
                c[i] = ScalarValue.Zero;

            bt = ft.Transform(c);
        }
Esempio n. 2
0
        public MatrixValue Function(MatrixValue M)
        {
            var transpose = false;

            if (M.DimensionX > M.DimensionY)
            {
                transpose = true;
                M = M.Transpose();
            }

            var fft = new Fourier(M.DimensionY);

            for (var i = 1; i <= M.DimensionX; i++)
            {
                var values = new ScalarValue[M.DimensionY];

                for (var j = 1; j <= M.DimensionY; j++)
                {
                    values[j - 1] = M[j, i];
                }

                values = fft.Transform(values);

                for (var j = 1; j <= M.DimensionY; j++)
                {
                    M[j, i] = values[j - 1];
                }
            }

            if (transpose)
            {
                return M.Transpose();
            }

            return M;
        }