using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnitTestSharp; using Azimuth.DenseLinearAlgebra; using Azimuth.FastFourierTransform; namespace Azimuth.UnitTests.FastFourierTransform { public class FastFourierTransform : TestFixture { public void x10000000() { var real = new DenseVector(new Scalar[] { 1, 0, 0, 0, 0, 0, 0, 0, }); var imag = new DenseVector(new Scalar[] { 0, 0, 0, 0, 0, 0, 0, 0, }); var fft = new FFT(3); fft.Transform(ref real, ref imag, 3); var expectedReal = new DenseVector(new Scalar[] { 1, 1, 1, 1, 1, 1, 1, 1, }); var expectedImag = new DenseVector(new Scalar[] { 0, 0, 0, 0, 0, 0, 0, 0, }); CheckEqual(expectedReal, real); CheckEqual(expectedImag, imag); } public void x01234567() { var real = new DenseVector(new Scalar[] { 0, 1, 2, 3, 4, 5, 6, 7, }); var imag = new DenseVector(new Scalar[] { 0, 0, 0, 0, 0, 0, 0, 0, }); var fft = new FFT(3); fft.Transform(ref real, ref imag, 3); var sqr2 = Math.Sqrt(2); var expectedReal = new DenseVector(new Scalar[] { 28, -4, -4, -4, -4, -4, -4, -4, }); var expectedImag = new DenseVector(new Scalar[] { 0, -4 * (1 + sqr2), -4, -4 * (sqr2 - 1), 0, 4*(sqr2 - 1), 4, 4 * (1 + sqr2), }); CheckEqual(expectedReal, real); CheckEqual(expectedImag, imag); } public void x16() { var real = new DenseVector(new Scalar[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, }); var imag = new DenseVector(new Scalar[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }); var fft = new FFT(4); fft.Transform(ref real, ref imag, 4); var sqr2 = Math.Sqrt(2); var expectedReal = new DenseVector(new Scalar[] { 120, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, }); var expectedImag = new DenseVector(new Scalar[] { 0, -40.218715937006785, -8 * (1 + sqr2), -11.972846101323906, -8, -5.345429103354382, -3.3137084989847576, -1.5912989390372658, 0, 1.5912989390372587, 3.313708498984756, 5.3454291033543875, 8.000000000000002, 11.972846101323908, 8 * (1 + sqr2), 40.218715937006785, }); CheckEqual(expectedReal, real); CheckEqual(expectedImag, imag); } } }