From c168f7d71c2ee532ccb587252b37f75f436a0a2d Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Thu, 27 Oct 2016 16:56:21 +0200 Subject: [PATCH] FFT: inline docs --- src/Numerics/IntegralTransforms/Fourier.cs | 118 +++++++++++++++++---- 1 file changed, 100 insertions(+), 18 deletions(-) diff --git a/src/Numerics/IntegralTransforms/Fourier.cs b/src/Numerics/IntegralTransforms/Fourier.cs index a7832c85..cbe09965 100644 --- a/src/Numerics/IntegralTransforms/Fourier.cs +++ b/src/Numerics/IntegralTransforms/Fourier.cs @@ -52,16 +52,35 @@ namespace MathNet.Numerics.IntegralTransforms Control.FourierTransformProvider.ForwardInplace(samples, FourierTransformScaling.SymmetricScaling); } + /// + /// Applies the forward Fast Fourier Transform (FFT) to multiple dimensional sample data. + /// + /// Sample data, where the FFT is evaluated in place. + /// + /// The data size per dimension. The first dimension is the major one. + /// For example, with two dimensions "rows" and "columns" the samples are assumed to be organized row by row. + /// public static void ForwardMultiDim(Complex[] samples, int[] dimensions) { Control.FourierTransformProvider.ForwardInplaceMultidim(samples, dimensions, FourierTransformScaling.SymmetricScaling); } + /// + /// Applies the forward Fast Fourier Transform (FFT) to two dimensional sample data. + /// + /// Sample data, organized row by row, where the FFT is evaluated in place + /// The number of rows. + /// The number of columns. + /// Data available organized column by column instead of row by row can be processed directly by swapping the rows and columns arguments. public static void Forward2D(Complex[] samplesRowWise, int rows, int columns) { ForwardMultiDim(samplesRowWise, new[] {rows, columns}); } + /// + /// Applies the forward Fast Fourier Transform (FFT) to a two dimensional data in form of a matrix. + /// + /// Sample matrix, where the FFT is evaluated in place public static void Forward2D(Matrix samples) { Forward2D(samples, FourierOptions.Default); @@ -93,6 +112,15 @@ namespace MathNet.Numerics.IntegralTransforms } } + /// + /// Applies the forward Fast Fourier Transform (FFT) to multiple dimensional sample data. + /// + /// Sample data, where the FFT is evaluated in place. + /// + /// The data size per dimension. The first dimension is the major one. + /// For example, with two dimensions "rows" and "columns" the samples are assumed to be organized row by row. + /// + /// Fourier Transform Convention Options. public static void ForwardMultiDim(Complex[] samples, int[] dimensions, FourierOptions options) { switch (options) @@ -114,11 +142,24 @@ namespace MathNet.Numerics.IntegralTransforms } } + /// + /// Applies the forward Fast Fourier Transform (FFT) to two dimensional sample data. + /// + /// Sample data, organized row by row, where the FFT is evaluated in place + /// The number of rows. + /// The number of columns. + /// Data available organized column by column instead of row by row can be processed directly by swapping the rows and columns arguments. + /// Fourier Transform Convention Options. public static void Forward2D(Complex[] samplesRowWise, int rows, int columns, FourierOptions options) { ForwardMultiDim(samplesRowWise, new[] { rows, columns }, options); } + /// + /// Applies the forward Fast Fourier Transform (FFT) to a two dimensional data in form of a matrix. + /// + /// Sample matrix, where the FFT is evaluated in place + /// Fourier Transform Convention Options. public static void Forward2D(Matrix samples, FourierOptions options) { // since dense matrix data is column major, we switch rows and columns @@ -139,87 +180,128 @@ namespace MathNet.Numerics.IntegralTransforms /// /// Applies the inverse Fast Fourier Transform (iFFT) to arbitrary-length sample vectors. /// - /// Sample vector, where the FFT is evaluated in place. + /// Spectrum data, where the iFFT is evaluated in place. public static void Inverse(Complex[] spectrum) { Control.FourierTransformProvider.BackwardInplace(spectrum, FourierTransformScaling.SymmetricScaling); } + /// + /// Applies the inverse Fast Fourier Transform (iFFT) to multiple dimensional sample data. + /// + /// Spectrum data, where the iFFT is evaluated in place. + /// + /// The data size per dimension. The first dimension is the major one. + /// For example, with two dimensions "rows" and "columns" the samples are assumed to be organized row by row. + /// public static void InverseMultiDim(Complex[] spectrum, int[] dimensions) { Control.FourierTransformProvider.BackwardInplaceMultidim(spectrum, dimensions, FourierTransformScaling.SymmetricScaling); } + /// + /// Applies the inverse Fast Fourier Transform (iFFT) to two dimensional sample data. + /// + /// Sample data, organized row by row, where the iFFT is evaluated in place + /// The number of rows. + /// The number of columns. + /// Data available organized column by column instead of row by row can be processed directly by swapping the rows and columns arguments. public static void Inverse2D(Complex[] spectrumRowWise, int rows, int columns) { InverseMultiDim(spectrumRowWise, new[] { rows, columns }); } - public static void Inverse2D(Matrix samples) + /// + /// Applies the inverse Fast Fourier Transform (iFFT) to a two dimensional data in form of a matrix. + /// + /// Sample matrix, where the iFFT is evaluated in place + public static void Inverse2D(Matrix spectrum) { - Inverse2D(samples, FourierOptions.Default); + Inverse2D(spectrum, FourierOptions.Default); } /// /// Applies the inverse Fast Fourier Transform (iFFT) to arbitrary-length sample vectors. /// - /// Sample vector, where the FFT is evaluated in place. + /// Spectrum data, where the iFFT is evaluated in place. /// Fourier Transform Convention Options. - public static void Inverse(Complex[] specrum, FourierOptions options) + public static void Inverse(Complex[] spectrum, FourierOptions options) { switch (options) { case FourierOptions.NoScaling: - Control.FourierTransformProvider.BackwardInplace(specrum, FourierTransformScaling.NoScaling); + Control.FourierTransformProvider.BackwardInplace(spectrum, FourierTransformScaling.NoScaling); break; case FourierOptions.AsymmetricScaling: - Control.FourierTransformProvider.BackwardInplace(specrum, FourierTransformScaling.BackwardScaling); + Control.FourierTransformProvider.BackwardInplace(spectrum, FourierTransformScaling.BackwardScaling); break; case FourierOptions.InverseExponent: - Control.FourierTransformProvider.ForwardInplace(specrum, FourierTransformScaling.SymmetricScaling); + Control.FourierTransformProvider.ForwardInplace(spectrum, FourierTransformScaling.SymmetricScaling); break; case FourierOptions.InverseExponent | FourierOptions.NoScaling: - Control.FourierTransformProvider.ForwardInplace(specrum, FourierTransformScaling.NoScaling); + Control.FourierTransformProvider.ForwardInplace(spectrum, FourierTransformScaling.NoScaling); break; case FourierOptions.InverseExponent | FourierOptions.AsymmetricScaling: - Control.FourierTransformProvider.ForwardInplace(specrum, FourierTransformScaling.ForwardScaling); + Control.FourierTransformProvider.ForwardInplace(spectrum, FourierTransformScaling.ForwardScaling); break; default: - Control.FourierTransformProvider.BackwardInplace(specrum, FourierTransformScaling.SymmetricScaling); + Control.FourierTransformProvider.BackwardInplace(spectrum, FourierTransformScaling.SymmetricScaling); break; } } - public static void InverseMultiDim(Complex[] specrum, int[] dimensions, FourierOptions options) + /// + /// Applies the inverse Fast Fourier Transform (iFFT) to multiple dimensional sample data. + /// + /// Spectrum data, where the iFFT is evaluated in place. + /// + /// The data size per dimension. The first dimension is the major one. + /// For example, with two dimensions "rows" and "columns" the samples are assumed to be organized row by row. + /// + /// Fourier Transform Convention Options. + public static void InverseMultiDim(Complex[] spectrum, int[] dimensions, FourierOptions options) { switch (options) { case FourierOptions.NoScaling: - Control.FourierTransformProvider.BackwardInplaceMultidim(specrum, dimensions, FourierTransformScaling.NoScaling); + Control.FourierTransformProvider.BackwardInplaceMultidim(spectrum, dimensions, FourierTransformScaling.NoScaling); break; case FourierOptions.AsymmetricScaling: - Control.FourierTransformProvider.BackwardInplaceMultidim(specrum, dimensions, FourierTransformScaling.BackwardScaling); + Control.FourierTransformProvider.BackwardInplaceMultidim(spectrum, dimensions, FourierTransformScaling.BackwardScaling); break; case FourierOptions.InverseExponent: - Control.FourierTransformProvider.ForwardInplaceMultidim(specrum, dimensions, FourierTransformScaling.SymmetricScaling); + Control.FourierTransformProvider.ForwardInplaceMultidim(spectrum, dimensions, FourierTransformScaling.SymmetricScaling); break; case FourierOptions.InverseExponent | FourierOptions.NoScaling: - Control.FourierTransformProvider.ForwardInplaceMultidim(specrum, dimensions, FourierTransformScaling.NoScaling); + Control.FourierTransformProvider.ForwardInplaceMultidim(spectrum, dimensions, FourierTransformScaling.NoScaling); break; case FourierOptions.InverseExponent | FourierOptions.AsymmetricScaling: - Control.FourierTransformProvider.ForwardInplaceMultidim(specrum, dimensions, FourierTransformScaling.ForwardScaling); + Control.FourierTransformProvider.ForwardInplaceMultidim(spectrum, dimensions, FourierTransformScaling.ForwardScaling); break; default: - Control.FourierTransformProvider.BackwardInplaceMultidim(specrum, dimensions, FourierTransformScaling.SymmetricScaling); + Control.FourierTransformProvider.BackwardInplaceMultidim(spectrum, dimensions, FourierTransformScaling.SymmetricScaling); break; } } + /// + /// Applies the inverse Fast Fourier Transform (iFFT) to two dimensional sample data. + /// + /// Sample data, organized row by row, where the iFFT is evaluated in place + /// The number of rows. + /// The number of columns. + /// Data available organized column by column instead of row by row can be processed directly by swapping the rows and columns arguments. + /// Fourier Transform Convention Options. public static void Inverse2D(Complex[] spectrumRowWise, int rows, int columns, FourierOptions options) { InverseMultiDim(spectrumRowWise, new[] { rows, columns }, options); } + /// + /// Applies the inverse Fast Fourier Transform (iFFT) to a two dimensional data in form of a matrix. + /// + /// Sample matrix, where the iFFT is evaluated in place + /// Fourier Transform Convention Options. public static void Inverse2D(Matrix spectrum, FourierOptions options) { // since dense matrix data is column major, we switch rows and columns