Exemplo n.º 1
0
        public static fftw_plan dft_c2r_3d(int nx, int ny, int nz, fftw_complexarray input, fftw_complexarray output, fftw_direction direction, fftw_flags flags)
        {
            fftw_plan p = new fftw_plan();

            p.handle = fftw.dft_c2r_3d(nx, ny, nz, input.Handle, output.Handle, flags);
            return(p);
        }
Exemplo n.º 2
0
        public static fftw_plan dft_c2r(int rank, int[] n, fftw_complexarray input, fftw_complexarray output, fftw_direction direction, fftw_flags flags)
        {
            fftw_plan p = new fftw_plan();

            p.handle = fftw.dft_c2r(rank, n, input.Handle, output.Handle, flags);
            return(p);
        }
Exemplo n.º 3
0
        public static fftw_plan dft_r2c_2d(int nx, int ny, fftw_complexarray input, fftw_complexarray output, fftw_flags flags)
        {
            fftw_plan p = new fftw_plan();

            p.handle = fftw.dft_r2c_2d(nx, ny, input.Handle, output.Handle, flags);
            return(p);
        }
Exemplo n.º 4
0
        //Complex<->Complex transforms
        public static fftw_plan dft_1d(int n, fftw_complexarray input, fftw_complexarray output, fftw_direction direction, fftw_flags flags)
        {
            fftw_plan p = new fftw_plan();

            p.handle = fftw.dft_1d(n, input.Handle, output.Handle, direction, flags);
            return(p);
        }
Exemplo n.º 5
0
        public static fftw_plan r2r_2d(int nx, int ny, fftw_complexarray input, fftw_complexarray output, fftw_kind kindx, fftw_kind kindy, fftw_flags flags)
        {
            fftw_plan p = new fftw_plan();

            p.handle = fftw.r2r_2d(nx, ny, input.Handle, output.Handle, kindx, kindy, flags);
            return(p);
        }
        public static fftw_plan dft_3d(int nx, int ny, int nz, fftw_complexarray input, fftw_complexarray output, fftw_direction direction, fftw_flags flags)
        {
            FFTW_Semaphore.WaitOne();
            fftw_plan p = new fftw_plan();

            p.handle = fftw.dft_3d(nx, ny, nz, input.Handle, output.Handle, direction, flags);
            FFTW_Semaphore.Release();
            return(p);
        }
Exemplo n.º 7
0
        public static fftw_plan r2r(int rank, int[] n, fftw_complexarray input, fftw_complexarray output,
                                    fftw_kind[] kind, fftw_flags flags)
        {
            fftw_plan p = new fftw_plan();

            p.handle = fftw.r2r(rank, n, input.Handle, output.Handle,
                                kind, flags);
            return(p);
        }
Exemplo n.º 8
0
        public static fftw_plan r2r_2d(int nx, int ny, fftw_complexarray input, fftw_complexarray output, fftw_kind kindx, fftw_kind kindy, fftw_flags flags)
        {
            FFTW_Lock.WaitOne();
            fftw_plan p = new fftw_plan();

            p.handle = fftw.r2r_2d(nx, ny, input.Handle, output.Handle, kindx, kindy, flags);
            FFTW_Lock.ReleaseMutex();

            return(p);
        }
Exemplo n.º 9
0
        public static fftw_plan dft_c2r(int rank, int[] n, fftw_complexarray input, fftw_complexarray output, fftw_direction direction, fftw_flags flags)
        {
            FFTW_Lock.WaitOne();
            fftw_plan p = new fftw_plan();

            p.handle = fftw.dft_c2r(rank, n, input.Handle, output.Handle, flags);
            FFTW_Lock.ReleaseMutex();

            return(p);
        }
Exemplo n.º 10
0
        public static fftw_plan dft_r2c_3d(int nx, int ny, int nz, fftw_complexarray input, fftw_complexarray output, fftw_flags flags)
        {
            FFTW_Lock.WaitOne();
            fftw_plan p = new fftw_plan();

            p.handle = fftw.dft_r2c_3d(nx, ny, nz, input.Handle, output.Handle, flags);
            FFTW_Lock.ReleaseMutex();

            return(p);
        }
Exemplo n.º 11
0
        // Initializes FFTW and all arrays
        // n: Logical size of the transform
        public FFTWtest(int n)
        {
            System.Console.WriteLine("Starting test with n = " + n + " complex numbers");
            fftLength = n;

            // create two unmanaged arrays, properly aligned
            pin = fftwf.malloc(n * 8);
            pout = fftwf.malloc(n * 8);

            // create two managed arrays, possibly misalinged
            // n*2 because we are dealing with complex numbers
            fin = new float[n * 2];
            fout = new float[n * 2];
            // and two more for double FFTW
            din = new double[n * 2];
            dout = new double[n * 2];

            // get handles and pin arrays so the GC doesn't move them
            hin = GCHandle.Alloc(fin, GCHandleType.Pinned);
            hout = GCHandle.Alloc(fout, GCHandleType.Pinned);
            hdin = GCHandle.Alloc(din, GCHandleType.Pinned);
            hdout = GCHandle.Alloc(dout, GCHandleType.Pinned);

            // create a few test transforms
            fplan1 = fftwf.dft_1d(n, pin, pout, fftw_direction.Forward, fftw_flags.Estimate);
            fplan2 = fftwf.dft_1d(n, hin.AddrOfPinnedObject(), hout.AddrOfPinnedObject(),
                fftw_direction.Forward, fftw_flags.Estimate);
            fplan3 = fftwf.dft_1d(n, hout.AddrOfPinnedObject(), pin,
                fftw_direction.Backward, fftw_flags.Measure);
            // end with transforming back to original array
            fplan4 = fftwf.dft_1d(n, hout.AddrOfPinnedObject(), hin.AddrOfPinnedObject(),
                fftw_direction.Backward, fftw_flags.Estimate);
            // and check a quick one with doubles, just to be sure
            fplan5 = fftw.dft_1d(n, hdin.AddrOfPinnedObject(), hdout.AddrOfPinnedObject(),
                fftw_direction.Backward, fftw_flags.Measure);

            // create a managed plan as well
            min = new fftw_complexarray(din);
            mout = new fftw_complexarray(dout);
            mplan = fftw_plan.dft_1d(n, min, mout, fftw_direction.Forward, fftw_flags.Estimate);

            // fill our arrays with an arbitrary complex sawtooth-like signal
            for (int i = 0; i < n * 2; i++)
                fin[i] = i % 50;
            for (int i = 0; i < n * 2; i++)
                fout[i] = i % 50;
            for (int i = 0; i < n * 2; i++)
                din[i] = i % 50;

            // copy managed arrays to unmanaged arrays
            Marshal.Copy(fin, 0, pin, n * 2);
            Marshal.Copy(fout, 0, pout, n * 2);
        }
Exemplo n.º 12
0
        //Complex->Real
        public static fftw_plan dft_c2r_1d(int n, fftw_complexarray input, fftw_complexarray output, fftw_direction direction, fftw_flags flags)
        {
            FFTW_Lock.WaitOne();
            fftw_plan p = new fftw_plan();
            p.handle = fftw.dft_c2r_1d(n, input.Handle, output.Handle, flags);
            FFTW_Lock.ReleaseMutex();

            return p;
        }
Exemplo n.º 13
0
        public static fftw_plan r2r_3d(int nx, int ny, int nz, fftw_complexarray input, fftw_complexarray output,
            fftw_kind kindx, fftw_kind kindy, fftw_kind kindz, fftw_flags flags)
        {
            FFTW_Lock.WaitOne();
            fftw_plan p = new fftw_plan();
            p.handle = fftw.r2r_3d(nx, ny, nz, input.Handle, output.Handle,
                kindx, kindy, kindz, flags);
            FFTW_Lock.ReleaseMutex();

            return p;
        }
 internal static void destroy_plan(fftw_plan mplan)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 15
0
 //Real<->Real
 public static fftw_plan r2r_1d(int n, fftw_complexarray input, fftw_complexarray output, fftw_kind kind, fftw_flags flags)
 {
     fftw_plan p = new fftw_plan();
     p.handle = fftw.r2r_1d(n, input.Handle, output.Handle, kind, flags);
     return p;
 }
Exemplo n.º 16
0
 public static fftw_plan dft_r2c_3d(int nx, int ny, int nz, fftw_complexarray input, fftw_complexarray output, fftw_flags flags)
 {
     fftw_plan p = new fftw_plan();
     p.handle = fftw.dft_r2c_3d(nx, ny, nz, input.Handle, output.Handle, flags);
     return p;
 }
Exemplo n.º 17
0
 public static fftw_plan dft_c2r_2d(int nx, int ny, fftw_complexarray input, fftw_complexarray output, fftw_direction direction, fftw_flags flags)
 {
     fftw_plan p = new fftw_plan();
     p.handle = fftw.dft_c2r_2d(nx, ny, input.Handle, output.Handle, flags);
     return p;
 }
Exemplo n.º 18
0
 public static fftw_plan dft_r2c(int rank, int[] n, fftw_complexarray input, fftw_complexarray output, fftw_flags flags)
 {
     fftw_plan p = new fftw_plan();
     p.handle = fftw.dft_r2c(rank, n, input.Handle, output.Handle, flags);
     return p;
 }
Exemplo n.º 19
0
        public static fftw_plan dft_r2c_2d(int nx, int ny, fftw_complexarray input, fftw_complexarray output, fftw_flags flags)
        {
            FFTW_Lock.WaitOne();
            fftw_plan p = new fftw_plan();
            p.handle = fftw.dft_r2c_2d(nx, ny, input.Handle, output.Handle, flags);
            FFTW_Lock.ReleaseMutex();

            return p;
        }
Exemplo n.º 20
0
 public static fftw_plan r2r(int rank, int[] n, fftw_complexarray input, fftw_complexarray output,
     fftw_kind[] kind, fftw_flags flags)
 {
     fftw_plan p = new fftw_plan();
     p.handle = fftw.r2r(rank, n, input.Handle, output.Handle,
         kind, flags);
     return p;
 }
Exemplo n.º 21
0
        public static fftw_plan r2r(int rank, int[] n, fftw_complexarray input, fftw_complexarray output,
            fftw_kind[] kind, fftw_flags flags)
        {
            FFTW_Lock.WaitOne();
            fftw_plan p = new fftw_plan();
            p.handle = fftw.r2r(rank, n, input.Handle, output.Handle,
                kind, flags);
            FFTW_Lock.ReleaseMutex();

            return p;
        }
Exemplo n.º 22
0
        public static fftw_plan r2r_3d(int nx, int ny, int nz, fftw_complexarray input, fftw_complexarray output, 
			fftw_kind kindx, fftw_kind kindy, fftw_kind kindz, fftw_flags flags)
        {
            fftw_plan p = new fftw_plan();
            p.handle = fftw.r2r_3d(nx, ny, nz, input.Handle, output.Handle,
                kindx, kindy, kindz, flags);
            return p;
        }
		public static fftw_plan dft_3d(int nx, int ny, int nz, fftw_complexarray input, fftw_complexarray output, fftw_direction direction, fftw_flags flags)
		{
            FFTW_Semaphore.WaitOne();
			fftw_plan p = new fftw_plan();
			p.handle = fftw.dft_3d(nx, ny, nz, input.Handle, output.Handle, direction,flags);
            FFTW_Semaphore.Release();
            return p;
		}