示例#1
0
        public static IEnumerable <Complex> TransformReverse(IEnumerable <Complex> values)
        {
            if (!reverseTransformations.ContainsKey(values.Count()))
            {
                reverseTransformations[values.Count()] = GetReverseTransformation(values.Count());
            }

            MatrixComplex transformation = reverseTransformations[values.Count()];
            MatrixComplex vector         = MatrixComplex.FromRowVectors(values.Select(MatrixComplex.CreateSingleton));

            return((transformation * vector).Columns.Single());
        }
示例#2
0
        // Intended for synthesis
        // Input \ Output | Real | Imaginary
        // ---------------|------|----------
        // Real           |  +   |     -
        // Imaginary      |  +   |     +
        static MatrixComplex GetReverseTransformation(int size)
        {
            MatrixComplex transformation = new MatrixComplex(size, size);

            Complex factor = (2 * Math.PI / size) * Complex.ImaginaryOne;

            for (int row = 0; row < transformation.RowCount; row++)
            {
                for (int column = 0; column < transformation.ColumnCount; column++)
                {
                    transformation[row, column] = Scalars.Exponentiate(-factor * row * column);
                }
            }

            return((1 / Scalars.SquareRoot(size)) * transformation);
        }