Exemple #1
0
        public void FftSingleReal(
            [Values(1024, 4096, 8192, 16384, 65536, 262144, 1048576)] int numSamples)
        {
            int half = numSamples >> 1;

            double[] dataEven = new double[numSamples];
            for (int i = 0; i < numSamples; i++)
            {
                double z = (double)(i - half) / half;
                dataEven[i] = 1.0 / ((z * z) + 1.0);
            }

            double[] evenReal, evenImag;
            _fft.TransformForward(dataEven, out evenReal, out evenImag);

            // round trip check
            double[] dataEven2;
            _fft.TransformBackward(evenReal, evenImag, out dataEven2);

            // Compare with original samples
            for (int i = 0; i < numSamples; i += 2)
            {
                Assert.That(dataEven2[i], NumericIs.AlmostEqualTo(dataEven[i], 1e-5), i.ToString());
            }
        }
Exemple #2
0
        public void Real_TwoReal_Inverse()
        {
            int numSamples = 32;
            int half       = numSamples >> 1;

            double[] dataEven = new double[numSamples];
            double[] dataOdd  = new double[numSamples];

            for (int i = 0; i < numSamples; i++)
            {
                double z = (double)(i - half) / half;
                dataEven[i] = 1.0 / (z * z + 1.0);
                dataOdd[i]  = z / (z * z + 1.0);
            }
            dataOdd[0] = 0.0; // periodic continuation; force odd

            RealTestTimeEven(dataEven);
            RealTestTimeOdd(dataOdd);

            double[] evenReal, evenImag, oddReal, oddImag;

            // Forward Transform
            rft.Convention = TransformationConvention.Default;
            rft.TransformForward(dataEven, dataOdd,
                                 out evenReal, out evenImag, out oddReal, out oddImag);

            // Backward Transform
            double[] dataEven2, dataOdd2;
            rft.TransformBackward(evenReal, evenImag, oddReal, oddImag,
                                  out dataEven2, out dataOdd2);

            // Compare with original samples
            for (int i = 0; i < numSamples; i += 2)
            {
                Assert.AreEqual(dataEven[i], dataEven2[i], 0.00001, "Inv: Even: " + i.ToString());
                Assert.AreEqual(dataOdd[i], dataOdd2[i], 0.00001, "Inv: Odd: " + i.ToString());
            }
        }
Exemple #3
0
 private double[] IFFT(Complex complex)
 {
     double[] result;
     rft.TransformBackward(complex.Reals, complex.Imags, out result);
     return(result);
 }