00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <stdio.h>
00023 #include <math.h>
00024 #include <string.h>
00025 #include <stdlib.h>
00026
00027 #include <complex.h>
00028
00029 #include "nfft3.h"
00030 #include "nfft3util.h"
00031 #include "infft.h"
00032
00033 static void simple_test_nfsft(void)
00034 {
00035 const int N = 4;
00036 const int M = 8;
00037 nfsft_plan plan;
00038 int j, k, n;
00039
00040
00041 nfsft_precompute(N,1000.0,0U,0U);
00042
00043
00044
00045
00046
00047
00048
00049 nfsft_init_guru(&plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
00050 NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
00051 PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);
00052
00053
00054 for (j = 0; j < plan.M_total; j++)
00055 {
00056 plan.x[2*j]= RAND - K(0.5);
00057 plan.x[2*j+1]= K(0.5) * RAND;
00058 }
00059
00060
00061 nfsft_precompute_x(&plan);
00062
00063
00064 for (k = 0; k <= plan.N; k++)
00065 for (n = -k; n <= k; n++)
00066 plan.f_hat[NFSFT_INDEX(k,n,&plan)] =
00067 RAND - K(0.5) + _Complex_I*(RAND - K(0.5));
00068
00069
00070 ndsft_trafo(&plan);
00071 printf("Vector f (NDSFT):\n");
00072 for (j = 0; j < plan.M_total; j++)
00073 printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
00074 creal(plan.f[j]), cimag(plan.f[j]));
00075
00076 printf("\n");
00077
00078
00079 printf("Vector f (NDSFT):\n");
00080 for (j = 0; j < plan.M_total; j++)
00081 printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
00082 creal(plan.f[j]), cimag(plan.f[j]));
00083
00084 printf("\n");
00085
00086
00087 ndsft_adjoint(&plan);
00088 printf("Vector f_hat (NDSFT):\n");
00089 for (k = 0; k <= plan.N; k++)
00090 for (n = -k; n <= k; n++)
00091 fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
00092 creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
00093 cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
00094
00095 printf("\n");
00096
00097
00098 nfsft_adjoint(&plan);
00099 printf("Vector f_hat (NFSFT):\n");
00100 for (k = 0; k <= plan.N; k++)
00101 {
00102 for (n = -k; n <= k; n++)
00103 {
00104 fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
00105 creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
00106 cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
00107 }
00108 }
00109
00110
00111 nfsft_finalize(&plan);
00112
00113
00114 nfsft_forget();
00115 }
00116
00117 int main(void)
00118 {
00119 printf("Computing an NDSFT, an NFSFT, an adjoint NDSFT, and an adjoint NFSFT"
00120 "...\n\n");
00121 simple_test_nfsft();
00122 return EXIT_SUCCESS;
00123 }