/// <summary>
        /// Executes the fourier transformation itself (without data pretreatment).
        /// </summary>
        /// <exception cref="System.InvalidOperationException">The Fourier transformation was already executed.</exception>
        protected virtual void ExecuteFourierTransformation()
        {
            if (_arraysContainTransformation)
            {
                throw new InvalidOperationException("The Fourier transformation was already executed.");
            }

            var numColumns = NumberOfColumns;
            var numRows    = NumberOfRows;

            var rePart = ((IMatrixInArray1DRowMajorRepresentation <double>)_realMatrix).GetArray1DRowMajor();

            _imagMatrix = new DoubleMatrixInArray1DRowMajorRepresentation(numRows, numColumns);
            var imPart = ((IMatrixInArray1DRowMajorRepresentation <double>)_imagMatrix).GetArray1DRowMajor();

            // fourier transform either with Pfa (faster) or with the Chirp-z-transform
            if (Pfa235FFT.CanFactorized(numRows) && Pfa235FFT.CanFactorized(numColumns))
            {
                var fft = new Pfa235FFT(numRows, numColumns);
                fft.FFT(rePart, imPart, FourierDirection.Forward);
            }
            else
            {
                var matrixRe = new DoubleMatrixInArray1DRowMajorRepresentation(rePart, numRows, numColumns);
                ChirpFFT.FourierTransformation2D(matrixRe, _imagMatrix, FourierDirection.Forward);
            }

            _arraysContainTransformation = true;
        }
		/// <summary>
		/// Executes the fourier transformation itself (without data pretreatment).
		/// </summary>
		/// <exception cref="System.InvalidOperationException">The Fourier transformation was already executed.</exception>
		protected virtual void ExecuteFourierTransformation()
		{
			if (_arraysContainTransformation)
				throw new InvalidOperationException("The Fourier transformation was already executed.");

			var numColumns = NumberOfColumns;
			var numRows = NumberOfRows;

			var rePart = ((IMatrixInArray1DRowMajorRepresentation<double>)_realMatrix).GetArray1DRowMajor();

			_imagMatrix = new DoubleMatrixInArray1DRowMajorRepresentation(numRows, numColumns);
			var imPart = ((IMatrixInArray1DRowMajorRepresentation<double>)_imagMatrix).GetArray1DRowMajor();

			// fourier transform either with Pfa (faster) or with the Chirp-z-transform
			if (Pfa235FFT.CanFactorized(numRows) && Pfa235FFT.CanFactorized(numColumns))
			{
				Pfa235FFT fft = new Pfa235FFT(numRows, numColumns);
				fft.FFT(rePart, imPart, FourierDirection.Forward);
			}
			else
			{
				var matrixRe = new DoubleMatrixInArray1DRowMajorRepresentation(rePart, numRows, numColumns);
				ChirpFFT.FourierTransformation2D(matrixRe, _imagMatrix, FourierDirection.Forward);
			}

			_arraysContainTransformation = true;
		}