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); }
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]); } }
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; } }
public static Complex[] ToArray(this ComplexSpan span) { Complex[] array = new Complex[span.Real.Length]; span.CopyTo(array); return array; }