Exemplo n.º 1
0
void // space to frequency
mad_cmat_nfft (const cnum_t x[], const num_t x_node[], cnum_t r[], ssz_t m, ssz_t n, ssz_t nr)
{
  assert( x && r );
  int precomp = 0;
  if (m != p_n1 || n != p_n2 || nr != p_m) {
    nfft_finalize(&p);
    nfft_init_2d (&p, m, n, nr);
    p_n1 = m, p_n2 = n, p_m = nr, precomp = 1;
  }
  if (x_node || precomp) {
    for (ssz_t i=0; i < m*n; i++)  // adjoint transform needs -x_node
      p.x[i] = x_node[i] == -0.5 ? 0.4999999999999999 : -x_node[i];
    if(p.flags & PRE_ONE_PSI) nfft_precompute_one_psi(&p);
  }
  mad_cvec_copy(x, p.f, m*n);
  const char *error_str = nfft_check(&p);
  if (error_str) error("%s", error_str);
  nfft_adjoint(&p); // nfft_adjoint_direct(&p);
//  mad_cvec_copy(p.f_hat, r, nr);
  mad_cvec_copy(p.f_hat+nr/2, r, nr/2); // for compatibility with FFTW ?? (TBC)
  mad_cvec_copy(p.f_hat, r+nr/2, nr/2);
}
Exemplo n.º 2
0
void // frequency to space
mad_cmat_infft (const cnum_t x[], const num_t r_node[], cnum_t r[], ssz_t m, ssz_t n, ssz_t nx)
{
  assert( x && r );
  int precomp = 0;
  if (m != p_n1 || n != p_n2 || nx != p_m) {
    nfft_finalize(&p);
    nfft_init_2d (&p, m, n, nx);
    p_n1 = m, p_n2 = n, p_m = nx, precomp = 1;
  }
  if (r_node || precomp) {
    for (ssz_t i=0; i < m*n; i++) // forward transform needs -r_node
      p.x[i] = r_node[i] == -0.5 ? 0.4999999999999999 : -r_node[i];
    if(p.flags & PRE_ONE_PSI) nfft_precompute_one_psi(&p);
  }
  // mad_cvec_copy(x, p.f_hat, nx);
  mad_cvec_copy(x+nx/2, p.f_hat, nx/2); // for compatibility with FFTW ?? (TBC)
  mad_cvec_copy(x, p.f_hat+nx/2, nx/2);
  const char *error_str = nfft_check(&p);
  if (error_str) error("%s", error_str);
  nfft_trafo(&p); // nfft_trafo_direct(&p);
  mad_cvec_copy(p.f, r, m*n);
  mad_cvec_muln(r, 1.0/(m*n), r, m*n);
}
Exemplo n.º 3
0
void 	FC_FUNC(oct_nfft_check, OCT_NFFT_CHECK) 
  (nfft_plan *ths)
{
  nfft_check (ths);
}