Example #1
0
        public void FourierDefaultTransformIsReversible()
        {
            var samples = SignalGenerator.Random((u, v) => new Complex(u, v), GetUniform(1), 0x7FFF);
            var work    = new Complex[samples.Length];

            samples.CopyTo(work, 0);

            Transform.FourierForward(work);

            Assert.IsFalse(work.AlmostEqualListWithError(samples, 1e-12));

            Transform.FourierInverse(work);

            AssertHelpers.AlmostEqualList(samples, work, 1e-12);

            Transform.FourierInverse(work, FourierOptions.Default);

            Assert.IsFalse(work.AlmostEqualListWithError(samples, 1e-12));

            Transform.FourierForward(work, FourierOptions.Default);
            AssertHelpers.AlmostEqualList(samples, work, 1e-12);
        }
        /// <summary>
        /// Verify if is reversible complex.
        /// </summary>
        /// <param name="count">Samples count.</param>
        /// <param name="maximumError">Maximum error value.</param>
        /// <param name="forward">Forward delegate.</param>
        /// <param name="inverse">Inverse delegate.</param>
        private void VerifyIsReversibleComplex(
            int count, 
            double maximumError, 
            Func<Complex[], Complex[]> forward, 
            Func<Complex[], Complex[]> inverse)
        {
            var samples = SignalGenerator.Random((u, v) => new Complex(u, v), _uniform, count);
            var work = new Complex[samples.Length];
            samples.CopyTo(work, 0);

            work = forward(work);

            Assert.IsFalse(work.AlmostEqualListWithError(samples, maximumError));

            work = inverse(work);

            AssertHelpers.AlmostEqualList(samples, work, maximumError);
        }
Example #3
0
        /// <summary>
        /// Verify if is reversible complex.
        /// </summary>
        /// <param name="count">Samples count.</param>
        /// <param name="maximumError">Maximum error value.</param>
        /// <param name="forward">Forward delegate.</param>
        /// <param name="inverse">Inverse delegate.</param>
        private void VerifyIsReversibleComplex(
            int count,
            double maximumError,
            Func <Complex[], Complex[]> forward,
            Func <Complex[], Complex[]> inverse)
        {
            var samples = SignalGenerator.Random((u, v) => new Complex(u, v), GetUniform(1), count);
            var work    = new Complex[samples.Length];

            samples.CopyTo(work, 0);

            work = forward(work);

            Assert.IsFalse(work.AlmostEqualListWithError(samples, maximumError));

            work = inverse(work);

            AssertHelpers.AlmostEqualList(samples, work, maximumError);
        }
        public void FourierDefaultTransformIsReversible()
        {
            var samples = Sample.Random((u, v) => new Complex(u, v), _uniform, 0x7FFF);
            var work = new Complex[samples.Length];
            samples.CopyTo(work, 0);

            Transform.FourierForward(work);

            Assert.IsFalse(work.AlmostEqualListWithError(samples, 1e-12));

            Transform.FourierInverse(work);

            AssertHelpers.AlmostEqualList(samples, work, 1e-12);

            Transform.FourierInverse(work, FourierOptions.Default);

            Assert.IsFalse(work.AlmostEqualListWithError(samples, 1e-12));

            Transform.FourierForward(work, FourierOptions.Default);

            AssertHelpers.AlmostEqualList(samples, work, 1e-12);
        }