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 static void CopyTo(this ComplexSpan span, Complex[] array)
 {
     Span<double> realSpan = span.Real;
     Span<double> imaginarySpan = span.Imaginary;
     for (int i = 0; i < realSpan.Length; i++)
     {
         array[i] = new Complex(realSpan[i], imaginarySpan[i]);
     }
 }
Esempio n. 3
0
 public static void CopyTo(this Complex[] array, ComplexSpan span)
 {
     Span<double> realSpan = span.Real;
     Span<double> imaginarySpan = span.Imaginary;
     for (int i = 0; i < realSpan.Length; i++)
     {
         realSpan[i] = array[i].Real;
         imaginarySpan[i] = array[i].Imaginary;
     }
 }
Esempio n. 4
0
 public static Complex[] ToArray(this ComplexSpan span)
 {
     Complex[] array = new Complex[span.Real.Length];
     span.CopyTo(array);
     return array;
 }