Esempio n. 1
0
        /// <summary>
        /// Create a real transform plan (fftwf_plan_r2r).
        /// </summary>
        /// <param name="rank">Number of dimensions.</param>
        /// <param name="n">Array containing the logical size along each dimension.</param>
        /// <param name="input">FFTW array of 4-byte real numbers.</param>
        /// <param name="output">FFTW array of 4-byte real numbers.</param>
        /// <param name="kind">An array containing the kind of real-to-real transform to compute along each dimension.</param>
        /// <param name="flags">Flags that specify the behavior of the planner.</param>
        /// <returns>The FFTW plan.</returns>
        public static Plan Create(int rank, int[] n, RealArray input, RealArray output, Transform[] kind, Options flags)
        {
            mutex.WaitOne();
            var handle = NativeMethods.fftwf_plan_r2r(rank, n, input.Handle, output.Handle, kind, flags);

            mutex.ReleaseMutex();

            return(new Plan(handle, input, output, false));
        }
Esempio n. 2
0
        /// <summary>
        /// Create a 1D real to complex transform plan (fftwf_plan_dft_r2c_1d).
        /// </summary>
        /// <param name="n">The logical size of the transform.</param>
        /// <param name="input">FFTW array of 4-byte real numbers.</param>
        /// <param name="output">FFTW array of 8-byte complex numbers.</param>
        /// <param name="flags">Flags that specify the behavior of the planner.</param>
        /// <returns>The FFTW plan.</returns>
        public static Plan Create1(int n, RealArray input, ComplexArray output, Options flags)
        {
            mutex.WaitOne();
            var handle = NativeMethods.fftwf_plan_dft_r2c_1d(n, input.Handle, output.Handle, flags);

            mutex.ReleaseMutex();

            return(new Plan(handle, input, output, false));
        }
Esempio n. 3
0
        /// <summary>
        /// Create a 2D real transform plan (fftwf_plan_r2r_2d).
        /// </summary>
        /// <param name="nx">The logical size of the transform along the first dimension.</param>
        /// <param name="ny">The logical size of the transform along the second dimension.</param>
        /// <param name="input">FFTW array of 4-byte real numbers.</param>
        /// <param name="output">FFTW array of 4-byte real numbers.</param>
        /// <param name="kindx">The kind of real-to-real transform to compute along the first dimension.</param>
        /// <param name="kindy">The kind of real-to-real transform to compute along the second dimension.</param>
        /// <param name="flags">Flags that specify the behavior of the planner.</param>
        /// <returns>The FFTW plan.</returns>
        public static Plan Create2(int nx, int ny, RealArray input, RealArray output, Transform kindx, Transform kindy, Options flags)
        {
            mutex.WaitOne();
            var handle = NativeMethods.fftwf_plan_r2r_2d(nx, ny, input.Handle, output.Handle, kindx, kindy, flags);

            mutex.ReleaseMutex();

            return(new Plan(handle, input, output, false));
        }