50 static void window_funct_init(
window_funct_plan* ths,
int m,
int n,
double sigma) {
64 double _Complex *f = (
double _Complex*)
nfft_malloc(that->
M_total*
sizeof(
double _Complex));
65 double _Complex *f_hat = (
double _Complex*)
nfft_malloc(that->
N_total*
sizeof(
double _Complex));
68 window_funct_init(ths,that->plan.
m,that->N3,that->sigma3);
71 that->plan.
f = that->
f;
75 memset(f,0,that->
M_total*
sizeof(
double _Complex));
78 f_hat[j]=that->
f_hat[j];
81 for(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {
83 that->
f_hat[j]*=cexp(-2*
PI*_Complex_I*that->w[j]*((
double)l))/PHI_HUT(ths->n[0]*that->w[j],0);
87 if(fabs(that->t[j]-((
double)l)/((
double)ths->n[0]))<that->plan.
m/((
double)ths->n[0]))
89 double phi_val = PHI(that->t[j]-((
double)l)/((
double)ths->n[0]),0);
90 f[j]+=that->
f[j]*phi_val;
96 that->
f_hat[j]=f_hat[j];
101 that->plan.
f = that->
f;
111 double _Complex *f = (
double _Complex*)
nfft_malloc(that->
M_total*
sizeof(
double _Complex));
112 double _Complex *f_hat = (
double _Complex*)
nfft_malloc(that->
N_total*
sizeof(
double _Complex));
115 window_funct_init(ths,that->plan.
m,that->N3,that->sigma3);
117 memset(f_hat,0,that->
N_total*
sizeof(
double _Complex));
120 that->plan.
f = that->
f;
130 for(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {
134 if(fabs(that->t[j]-((
double)l)/((
double)ths->n[0]))<that->plan.
m/((
double)ths->n[0]))
135 that->
f[j]*=PHI(that->t[j]-((
double)l)/((
double)ths->n[0]),0);
139 nfft_adjoint(&that->plan);
141 f_hat[j]+=that->
f_hat[j]*cexp(2*
PI*_Complex_I*that->w[j]*((
double)l));
148 f_hat[j] /= PHI_HUT(ths->n[0]*that->w[j],0);
162 int m,
double sigma,
unsigned nfft_flags,
unsigned fftw_flags) {
164 nfft_init_guru(&ths->plan,2,N,M,n,m,nfft_flags,fftw_flags);
169 ths->
f = ths->plan.
f;
175 ths->
mv_trafo = (void (*) (
void* ))mri_inh_2d1d_trafo;
176 ths->
mv_adjoint = (void (*) (
void* ))mri_inh_2d1d_adjoint;
184 ths->plan.
f = ths->
f;
187 nfft_finalize(&ths->plan);
197 window_funct_init(ths,that->plan.
m,that->N3,that->sigma3);
200 that->plan.
f =that->
f ;
205 for(l=-ths->n[0]/2;l<ths->n[0]/2;l++)
208 if(fabs(that->w[j]-((
double)l)/((
double)ths->n[0]))<ths->m/((
double)ths->n[0]))
209 that->plan.
f_hat[j*ths->n[0]+(l+ths->n[0]/2)]= that->
f_hat[j]*PHI(that->w[j]-((
double)l)/((double)ths->n[0]),0);
211 that->plan.
f_hat[j*ths->n[0]+(l+ths->n[0]/2)]=0.0;
219 that->
f[j] /= PHI_HUT(ths->n[0]*that->plan.
x[3*j+2],0);
229 window_funct_init(ths,that->plan.
m,that->N3,that->sigma3);
232 that->plan.
f =that->
f ;
236 that->
f[j] /= PHI_HUT(ths->n[0]*that->plan.
x[3*j+2],0);
239 nfft_adjoint(&that->plan);
243 for(l=-ths->n[0]/2;l<ths->n[0]/2;l++)
246 if(fabs(that->w[j]-((
double)l)/((
double)ths->n[0]))<ths->m/((
double)ths->n[0]))
247 that->
f_hat[j]+= that->plan.
f_hat[j*ths->n[0]+(l+ths->n[0]/2)]*PHI(that->w[j]-((
double)l)/((double)ths->n[0]),0);
257 int m,
double sigma,
unsigned nfft_flags,
unsigned fftw_flags) {
260 nfft_init_guru(&ths->plan,3,N,M,n,m,nfft_flags,fftw_flags);
263 ths->
f = ths->plan.
f;
267 ths->
mv_trafo = (void (*) (
void* ))mri_inh_3d_trafo;
268 ths->
mv_adjoint = (void (*) (
void* ))mri_inh_3d_adjoint;
274 nfft_finalize(&ths->plan);
fftw_complex * f_hat
Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )
int N_total
Total number of Fourier coefficients.
fftw_complex * f_hat
Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )
void(* mv_adjoint)(void *)
Pointer to the own adjoint.
window_funct_plan is a plan to use the window functions independent of the nfft
int N_total
Total number of Fourier coefficients.
void(* mv_trafo)(void *)
Pointer to the own transform.
void(* mv_adjoint)(void *)
Pointer to the own adjoint.
fftw_complex * f
Vector of samples, size is M_total * sizeof( fftw_complex )
fftw_complex * f_hat
Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )
fftw_complex * f
Vector of samples, size is M_total * sizeof( fftw_complex )
fftw_complex * f
Vector of samples, size is M_total * sizeof( fftw_complex )
int m
Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)
void nfft_trafo(nfft_plan *ths)
user routines
int M_total
Total number of samples.
Header file for utility functions used by the nfft3 library.
#define PI
Formerly known to be an irrational number.
double * spline_coeffs
input for de Boor algorithm, if B_SPLINE or SINC_2m is defined
void * nfft_malloc(size_t n)
int M_total
Total number of samples.
int M_total
Total number of samples.
void(* mv_trafo)(void *)
Pointer to the own transform.
double * x
Nodes in time/spatial domain, size is doubles.
int N_total
Total number of Fourier coefficients.