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); }
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); }
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); }
//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); }
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); }
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); }
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); }
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); }
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); }
// 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); }
//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; }
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(); }
//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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }