Esempio n. 1
0
        public void SpanDftTheory(Complex[] signalExpected, Complex[] spectrumExpected)
        {
            int            windowSize = signalExpected.Length;
            IFftCalculator calculator = CreateCalculator(windowSize);

            Span <double> signalExpectedReal      = stackalloc double[windowSize];
            Span <double> signalExpectedImaginary = stackalloc double[windowSize];
            ComplexSpan   signalExpectedSpan      = new ComplexSpan(signalExpectedReal, signalExpectedImaginary);

            signalExpected.CopyTo(signalExpectedSpan);
            Span <double> spectrumExpectedReal      = stackalloc double[windowSize];
            Span <double> spectrumExpectedImaginary = stackalloc double[windowSize];
            ComplexSpan   spectrumExpectedSpan      = new ComplexSpan(spectrumExpectedReal, spectrumExpectedImaginary);

            spectrumExpected.CopyTo(spectrumExpectedSpan);

            Span <double> signalActualReal        = stackalloc double[windowSize];
            Span <double> signalActualImaginary   = stackalloc double[windowSize];
            ComplexSpan   signalActualSpan        = new ComplexSpan(signalActualReal, signalActualImaginary);
            Span <double> spectrumActualReal      = stackalloc double[windowSize];
            Span <double> spectrumActualImaginary = stackalloc double[windowSize];
            ComplexSpan   spectrumActualSpan      = new ComplexSpan(spectrumActualReal, spectrumActualImaginary);

            calculator.DFT(signalExpectedSpan, spectrumActualSpan);
            Assert.Equal(spectrumExpected, spectrumActualSpan.ToArray(), complexComparer);

            calculator.IDFT(spectrumActualSpan, signalActualSpan);
            Assert.Equal(signalExpected, signalActualSpan.ToArray(), complexComparer);
        }
Esempio n. 2
0
        public void ArrayDftTheory(Complex[] signalExpected, Complex[] spectrumExpected)
        {
            int            windowSize = signalExpected.Length;
            IFftCalculator calculator = CreateCalculator(windowSize);

            Complex[] spectrumActual = new Complex[windowSize];
            calculator.DFT(signalExpected, spectrumActual);
            Assert.Equal(spectrumExpected, spectrumActual, complexComparer);

            Complex[] signalActual = new Complex[windowSize];
            calculator.IDFT(spectrumActual, signalActual);
            Assert.Equal(signalExpected, signalActual, complexComparer);
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            Console.WriteLine("Number of cores: {0}", Environment.ProcessorCount);
            Console.WriteLine("Accelerated vectors: {0}", Vector.IsHardwareAccelerated);
            Console.WriteLine("Size of vectors: {0}", Vector <double> .Count);
            Console.WriteLine("Support Avx2: {0}", Avx2.IsSupported);
            Console.WriteLine("Support Avx: {0}", Avx.IsSupported);
            Console.WriteLine("Support Sse: {0}", Sse.IsSupported);
            Console.WriteLine("Support Sse2: {0}", Sse2.IsSupported);
            Console.WriteLine("Support Sse3: {0}", Sse3.IsSupported);
            Console.WriteLine("Support Ssse3: {0}", Ssse3.IsSupported);
            Console.WriteLine("Support Sse41: {0}", Sse41.IsSupported);
            Console.WriteLine("Support Sse42: {0}", Sse42.IsSupported);
            Console.WriteLine("Support Fma: {0}", Fma.IsSupported);

            int windowSize = 1024;

            IFftCalculator[] calculatorsUsingArray = new IFftCalculator[]
            {
                new FftCalculator(windowSize),
                new ParallelFftCalculator(windowSize)
            };

            foreach (var harness in calculatorsUsingArray.Select(calculator => new FftBenchmarkHarness(calculator)))
            {
                TimeSpan elapsedTime = harness.BenchmarkUsingArray();
                Console.WriteLine("{0}: {1}", harness.Name, elapsedTime);
            }

            IFftCalculator[] calculatorsUsingSpan = new IFftCalculator[]
            {
                new SpanFftCalculator(windowSize),
                new VectorTFftCalculator(windowSize),
                new IntrinsicsFftCalculator(windowSize),
            };

            foreach (var harness in calculatorsUsingSpan.Select(calculator => new FftBenchmarkHarness(calculator)))
            {
                TimeSpan elapsedTime = harness.BenchmarkUsingSpan();
                Console.WriteLine("{0}: {1}", harness.Name, elapsedTime);
            }
        }