Пример #1
0
        public void Transform2D()
        {
            // Transform forward and inverse and compare with initial values.
            var random = new Random(1234567);

            var s = new Vector2D[16, 8];
            var t = new Vector2D[16, 8];

            for (int i = 0; i < s.GetLength(0); i++)
            {
                for (int j = 0; j < s.GetLength(1); j++)
                {
                    s[i, j] = random.NextVector2D(-10, 10);
                    t[i, j] = s[i, j];
                }
            }

            var fft = new FastFourierTransformD(16);

            fft.Transform2D(t, true);

            Assert.IsFalse(Vector2D.AreNumericallyEqual(s[0, 0], t[0, 0]));

            fft.Transform2D(t, false);

            for (int i = 0; i < s.GetLength(0); i++)
            {
                for (int j = 0; j < s.GetLength(1); j++)
                {
                    Assert.IsTrue(Vector2D.AreNumericallyEqual(s[i, j], t[i, j]));
                }
            }
        }
Пример #2
0
        public void Transform1DArguments()
        {
            Assert.Throws <ArgumentNullException>(() => FastFourierTransformD.Transform1D(null, true));
            Assert.Throws <ArgumentNullException>(() => FastFourierTransformD.Transform1D(null, 2, true));

            Assert.Throws <ArgumentException>(() => FastFourierTransformD.Transform1D(new Vector2D[0], true));
            Assert.Throws <ArgumentException>(() => FastFourierTransformD.Transform1D(new Vector2D[13], true));

            FastFourierTransformD.Transform1D(new Vector2D[1], true);

            // This is ok.
            FastFourierTransformD.Transform1D(new Vector2D[2], true);
            FastFourierTransformD.Transform1D(new Vector2D[16], false);
        }
Пример #3
0
        public void Transform2DArguments()
        {
            var fft = new FastFourierTransformD(16);

            Assert.Throws <ArgumentNullException>(() => fft.Transform2D(null, true));

            // Senseless.
            Assert.Throws <ArgumentException>(() => fft.Transform2D(new Vector2D[0, 0], true));

            // Not POT.
            Assert.Throws <ArgumentException>(() => fft.Transform2D(new Vector2D[13, 2], true));
            Assert.Throws <ArgumentException>(() => fft.Transform2D(new Vector2D[2, 6], true));

            // Too large for capacity.
            Assert.Throws <ArgumentException>(() => fft.Transform2D(new Vector2D[32, 6], true));

            fft.Transform2D(new Vector2D[1, 1], true);

            // This is ok.
            fft.Transform2D(new Vector2D[2, 4], true);
            fft.Transform2D(new Vector2D[16, 1], false);
        }
Пример #4
0
        public void Transform1D()
        {
            // Transform forward and inverse and compare with initial values.
            var random = new Random(1234567);

            var s = new Vector2D[16];
            var t = new Vector2D[16];

            for (int i = 0; i < s.Length; i++)
            {
                s[i] = random.NextVector2D(-10, 10);
                t[i] = s[i];
            }

            FastFourierTransformD.Transform1D(t, true);
            FastFourierTransformD.Transform1D(t, false);

            for (int i = 0; i < s.Length; i++)
            {
                Assert.IsTrue(Vector2D.AreNumericallyEqual(s[i], t[i]));
            }
        }
        public void Transform1DAs2DColumn()
        {
            // Result of 2D with one row/column must be the same as 1D.
              var fft = new FastFourierTransformD(16);

              var random = new Random(1234567);

              var s1D = new Vector2D[16];
              var s2D = new Vector2D[16, 1];

              for (int i = 0; i < s1D.Length; i++)
              {
            s1D[i] = random.NextVector2D(-10, 10);
            s2D[i, 0] = s1D[i];
              }

              FastFourierTransformD.Transform1D(s1D, true);
              fft.Transform2D(s2D, true);

              for (int i = 0; i < s1D.Length; i++)
            Assert.AreEqual(s1D[i], s2D[i, 0]);
        }
Пример #6
0
        public void Transform1DAs2DColumn()
        {
            // Result of 2D with one row/column must be the same as 1D.
            var fft = new FastFourierTransformD(16);

            var random = new Random(1234567);

            var s1D = new Vector2D[16];
            var s2D = new Vector2D[16, 1];

            for (int i = 0; i < s1D.Length; i++)
            {
                s1D[i]    = random.NextVector2D(-10, 10);
                s2D[i, 0] = s1D[i];
            }

            FastFourierTransformD.Transform1D(s1D, true);
            fft.Transform2D(s2D, true);

            for (int i = 0; i < s1D.Length; i++)
            {
                Assert.AreEqual(s1D[i], s2D[i, 0]);
            }
        }
        public void Transform2DArguments()
        {
            var fft = new FastFourierTransformD(16);

              Assert.Throws<ArgumentNullException>(() => fft.Transform2D(null, true));

              // Senseless.
              Assert.Throws<ArgumentException>(() => fft.Transform2D(new Vector2D[0, 0], true));

              // Not POT.
              Assert.Throws<ArgumentException>(() => fft.Transform2D(new Vector2D[13, 2], true));
              Assert.Throws<ArgumentException>(() => fft.Transform2D(new Vector2D[2, 6], true));

              // Too large for capacity.
              Assert.Throws<ArgumentException>(() => fft.Transform2D(new Vector2D[32, 6], true));

              fft.Transform2D(new Vector2D[1, 1], true);

              // This is ok.
              fft.Transform2D(new Vector2D[2, 4], true);
              fft.Transform2D(new Vector2D[16, 1], false);
        }
        public void Transform2D()
        {
            // Transform forward and inverse and compare with initial values.
              var random = new Random(1234567);

              var s = new Vector2D[16, 8];
              var t = new Vector2D[16, 8];
              for (int i = 0; i < s.GetLength(0); i++)
              {
            for (int j = 0; j < s.GetLength(1); j++)
            {
              s[i, j] = random.NextVector2D(-10, 10);
              t[i, j] = s[i, j];
            }
              }

              var fft = new FastFourierTransformD(16);
              fft.Transform2D(t, true);

              Assert.IsFalse(Vector2D.AreNumericallyEqual(s[0, 0], t[0, 0]));

              fft.Transform2D(t, false);

              for (int i = 0; i < s.GetLength(0); i++)
            for (int j = 0; j < s.GetLength(1); j++)
              Assert.IsTrue(Vector2D.AreNumericallyEqual(s[i, j], t[i, j]));
        }