/// <summary> /// Applies the inverse Fast Fourier Transform (iFFT) to a two dimensional data in form of a matrix. /// </summary> /// <param name="spectrum">Sample matrix, where the iFFT is evaluated in place</param> /// <param name="options">Fourier Transform Convention Options.</param> public static void Inverse2D(Matrix <Complex> spectrum, FourierOptions options = FourierOptions.Default) { var rowMajorArray = spectrum.AsRowMajorArray(); if (rowMajorArray != null) { InverseMultiDim(rowMajorArray, new[] { spectrum.RowCount, spectrum.ColumnCount }, options); return; } var columnMajorArray = spectrum.AsColumnMajorArray(); if (columnMajorArray != null) { InverseMultiDim(columnMajorArray, new[] { spectrum.ColumnCount, spectrum.RowCount }, options); return; } // Fall Back columnMajorArray = spectrum.ToColumnMajorArray(); InverseMultiDim(columnMajorArray, new[] { spectrum.ColumnCount, spectrum.RowCount }, options); var denseStorage = new DenseColumnMajorMatrixStorage <Complex>(spectrum.RowCount, spectrum.ColumnCount, columnMajorArray); denseStorage.CopyToUnchecked(spectrum.Storage, ExistingData.Clear); }
/// <summary> /// Applies the forward Fast Fourier Transform (FFT) to a two dimensional data in form of a matrix. /// </summary> /// <param name="samples">Sample matrix, where the FFT is evaluated in place</param> /// <param name="options">Fourier Transform Convention Options.</param> public static void Forward2D(Matrix <Complex> samples, FourierOptions options = FourierOptions.Default) { var rowMajorArray = samples.AsRowMajorArray(); if (rowMajorArray != null) { ForwardMultiDim(rowMajorArray, new[] { samples.RowCount, samples.ColumnCount }, options); return; } var columnMajorArray = samples.AsColumnMajorArray(); if (columnMajorArray != null) { ForwardMultiDim(columnMajorArray, new[] { samples.ColumnCount, samples.RowCount }, options); return; } // Fall Back columnMajorArray = samples.ToColumnMajorArray(); ForwardMultiDim(columnMajorArray, new[] { samples.ColumnCount, samples.RowCount }, options); var denseStorage = new DenseColumnMajorMatrixStorage <Complex>(samples.RowCount, samples.ColumnCount, columnMajorArray); denseStorage.CopyToUnchecked(samples.Storage, ExistingData.Clear); }
/// <summary> /// Applies the inverse Fast Fourier Transform (iFFT) to a two dimensional data in form of a matrix. /// </summary> /// <param name="spectrum">Sample matrix, where the iFFT is evaluated in place</param> /// <param name="options">Fourier Transform Convention Options.</param> public static void Inverse2D(Matrix <Complex> spectrum, FourierOptions options = FourierOptions.Default) { // since dense matrix data is column major, we switch rows and columns var denseStorage = spectrum.Storage as DenseColumnMajorMatrixStorage <Complex>; if (denseStorage == null) { var samplesColumnMajor = spectrum.ToColumnWiseArray(); InverseMultiDim(samplesColumnMajor, new[] { spectrum.ColumnCount, spectrum.RowCount }, options); denseStorage = new DenseColumnMajorMatrixStorage <Complex>(spectrum.RowCount, spectrum.ColumnCount, samplesColumnMajor); denseStorage.CopyToUnchecked(spectrum.Storage, ExistingData.Clear); return; } InverseMultiDim(denseStorage.Data, new[] { spectrum.ColumnCount, spectrum.RowCount }, options); }
/// <summary> /// Applies the inverse Fast Fourier Transform (iFFT) to a two dimensional data in form of a matrix. /// </summary> /// <param name="spectrum">Sample matrix, where the iFFT is evaluated in place</param> /// <param name="options">Fourier Transform Convention Options.</param> public static void Inverse2D(Matrix<Complex> spectrum, FourierOptions options = FourierOptions.Default) { // since dense matrix data is column major, we switch rows and columns var denseStorage = spectrum.Storage as DenseColumnMajorMatrixStorage<Complex>; if (denseStorage == null) { var samplesColumnMajor = spectrum.ToColumnWiseArray(); InverseMultiDim(samplesColumnMajor, new[] { spectrum.ColumnCount, spectrum.RowCount }, options); denseStorage = new DenseColumnMajorMatrixStorage<Complex>(spectrum.RowCount, spectrum.ColumnCount, samplesColumnMajor); denseStorage.CopyToUnchecked(spectrum.Storage, ExistingData.Clear); return; } InverseMultiDim(denseStorage.Data, new[] { spectrum.ColumnCount, spectrum.RowCount }, options); }