TransformForward(
            double[] samples,
            out double[] fftReal,
            out double[] fftImag,
            params int[] dimensionLengths)
        {
            for (int i = 0; i < dimensionLengths.Length; i++)
            {
                if (Fn.CeilingToPowerOf2(dimensionLengths[i]) != dimensionLengths[i])
                {
                    throw new ArgumentException(Properties.LocalStrings.ArgumentPowerOfTwoEveryDimension, "dimensionLengths");
                }
            }

            /* TODO: Implement real version (at the moment this is just a wrapper to the complex version)! */

            double[] samplePairs = new double[samples.Length << 1];
            for (int i = 0, j = 0; i < samples.Length; i++, j += 2)
            {
                samplePairs[j] = samples[i];
            }

            _fft.DiscreteFourierTransformMultiDim(samplePairs, dimensionLengths, true, _convention);

            fftReal = new double[samples.Length];
            fftImag = new double[samples.Length];
            for (int i = 0, j = 0; i < samples.Length; i++, j += 2)
            {
                fftReal[i] = samplePairs[j];
                fftImag[i] = samplePairs[j + 1];
            }
        }
コード例 #2
0
 /// <summary>
 /// Inplace Forward Transformation in multiple dimensions.
 /// Size must be Power of Two in each dimension.
 /// The Data is expected to be ordered such that the last index changes most rapidly (in 2D this means row-by-row when indexing as [y,x]).
 /// </summary>
 /// <param name="samplePairs">Complex samples (even = real, odd = imaginary). Length must be a power of two in each dimension.</param>
 public void TransformForward(double[] samplePairs, params int[] dimensionLengths)
 {
     for (int i = 0; i < dimensionLengths.Length; i++)
     {
         if (Fn.CeilingToPowerOf2(dimensionLengths[i]) != dimensionLengths[i])
         {
             throw new ArgumentException(Resources.ArgumentPowerOfTwoEveryDimension, "dimensionLengths");
         }
     }
     _fft.DiscreteFourierTransformMultiDim(samplePairs, dimensionLengths, true, _convention);
 }