Doxygen Source Code Documentation
Wavelets.c File Reference
#include "Haar.c"#include "Daubechies.c"Go to the source code of this file.
Functions | |
| void | WA_error (char *message) |
| void | ts_print (int npts, float *data) |
| void | ts_fprint (char *filename, int npts, float *data) |
| int | powerof2 (int n) |
| int | my_log2 (int n) |
| void | FWT_1d_filter (float *filter, int N, float *s) |
| float * | FWT_1d_stop_filter (int num_stop_filters, int *stop_band, int *stop_mintr, int *stop_maxtr, int NFirst, int NPTS) |
| float * | FWT_1d_pass_filter (int num_pass_filters, int *pass_band, int *pass_mintr, int *pass_maxtr, int NFirst, int NPTS) |
| float | calc_sse (int NPTS, float *trueData, float *est) |
| float | calc_freg (int n, int p, int q, float ssef, float sser) |
| float | calc_rsqr (float ssef, float sser) |
| void | wavelet_analysis (int wavelet_type, int f, float *stop_filter, int q, float *base_filter, int p, float *full_filter, int NPTS, float *ts_array, float *coef, float *sse_base, float *sse_full, float *ffull, float *rfull, float *coefts, float *fitts, float *sgnlts, float *errts) |
| double | fstat_t2p (double ff, double dofnum, double dofden) |
| void | report_results (int N, int NFirst, int f, int p, int q, float *base_filter, float *sgnl_filter, float *coef, float sse_base, float sse_full, float ffull, float rfull, char **label) |
Variables | |
| char | lbuf [4096] |
| char | sbuf [256] |
Function Documentation
|
||||||||||||||||||||||||
|
Definition at line 310 of file Wavelets.c. Referenced by glt_analysis(), regression_analysis(), and wavelet_analysis().
00318 {
00319 const float MAXF = 1000.0; /* maximum value for F-statistic */
00320 const float EPSILON = 1.0e-2; /* protection against divide by zero */
00321 float msef; /* mean square error for the full model */
00322 float msreg; /* mean square due to the regression */
00323 float freg; /* F-statistic for the full regression model */
00324
00325
00326 /*----- Order of reduced model = order of full model ??? -----*/
00327 if (p <= q) return (0.0);
00328
00329
00330 /*----- Calculate numerator and denominator of F-statistic -----*/
00331 msreg = (sser - ssef) / (p - q); if (msreg < 0.0) msreg = 0.0;
00332 msef = ssef / (n - p); if (msef < 0.0) msef = 0.0;
00333
00334
00335 if (msef < EPSILON)
00336 freg = 0.0;
00337 else
00338 if (msreg > MAXF*msef) freg = MAXF;
00339 else freg = msreg / msef;
00340
00341
00342 /*----- Limit range of values for F-statistic -----*/
00343 if (freg < 0.0) freg = 0.0;
00344 if (freg > MAXF) freg = MAXF;
00345
00346
00347 /*----- Return F-statistic for significance of the regression -----*/
00348 return (freg);
00349
00350 }
|
|
||||||||||||
|
Definition at line 359 of file Wavelets.c. Referenced by analyze_results(), glt_analysis(), regression_analysis(), and wavelet_analysis().
00364 {
00365 const float EPSILON = 1.0e-2; /* protection against divide by zero */
00366 float rsqr; /* coeff. of multiple determination R^2 */
00367
00368
00369 /*----- coefficient of multiple determination R^2 -----*/
00370 if (sser < EPSILON)
00371 rsqr = 0.0;
00372 else
00373 rsqr = (sser - ssef) / sser;
00374
00375
00376 /*----- Limit range of values for R^2 -----*/
00377 if (rsqr < 0.0) rsqr = 0.0;
00378 if (rsqr > 1.0) rsqr = 1.0;
00379
00380
00381 /*----- Return coefficient of multiple determination R^2 -----*/
00382 return (rsqr);
00383 }
|
|
||||||||||||||||
|
Definition at line 282 of file Wavelets.c. References NPTS. Referenced by do_xrestore_stuff(), glt_analysis(), initialize_simplex(), random_search(), regression_analysis(), restart(), simplex_initialize(), simplex_optimization(), and wavelet_analysis().
00288 {
00289 int ipt; /* time point index */
00290 float diff; /* difference between actual and estimated data */
00291 float sse; /* estimation error sum of squares */
00292
00293 sse = 0.0;
00294 for (ipt = 0; ipt < NPTS; ipt++)
00295 {
00296 diff = trueData[ipt] - est[ipt];
00297 sse += diff * diff;
00298 }
00299
00300 return (sse);
00301 }
|
|
||||||||||||||||
|
Definition at line 586 of file Wavelets.c. Referenced by fstat_t2z(), report_results(), and THD_stat_to_pval().
00587 {
00588 int which , status ;
00589 double p , q , f , dfn , dfd , bound ;
00590
00591 which = 1 ;
00592 p = 0.0 ;
00593 q = 0.0 ;
00594 f = ff ;
00595 dfn = dofnum ;
00596 dfd = dofden ;
00597
00598 cdff( &which , &p , &q , &f , &dfn , &dfd , &status , &bound ) ;
00599
00600 if( status == 0 ) return q ;
00601 else return 1.0 ;
00602 }
|
|
||||||||||||||||
|
Definition at line 125 of file Wavelets.c. References NPTS, and powerof2(). Referenced by wavelet_analysis().
|
|
||||||||||||||||||||||||||||
|
Definition at line 216 of file Wavelets.c. References malloc, MTEST, my_log2(), NPTS, and powerof2(). Referenced by calculate_results(), and initialize_filters().
00225 {
00226 int N; /* log2(NPTS) */
00227 int ipts; /* wavelet coefficient index */
00228 int band; /* frequency band */
00229 int mintr; /* min. value for time window (in TR) */
00230 int maxtr; /* max. value for time window (in TR) */
00231 int ifilter; /* filter index */
00232 float * pass_filter = NULL; /* select wavelet coefficients to pass */
00233
00234
00235 N = my_log2 (NPTS);
00236 pass_filter = (float *) malloc (sizeof(float) * NPTS); MTEST (pass_filter);
00237
00238
00239 for (ipts = 0; ipts < NPTS; ipts++)
00240 {
00241 if (ipts == 0)
00242 {
00243 band = -1;
00244 mintr = 0;
00245 maxtr = NPTS-1;
00246 }
00247 else
00248 {
00249 band = my_log2(ipts);
00250 mintr = (ipts - powerof2(band)) * powerof2(N-band);
00251 maxtr = mintr + powerof2(N-band) - 1;
00252 }
00253
00254 mintr += NFirst;
00255 maxtr += NFirst;
00256
00257 pass_filter[ipts] = 0.0;
00258 for (ifilter = 0; ifilter < num_pass_filters; ifilter++)
00259 {
00260 if (band == pass_band[ifilter])
00261 {
00262 if ((mintr >= pass_mintr[ifilter])
00263 && (maxtr <= pass_maxtr[ifilter]))
00264 pass_filter[ipts] = 1.0;
00265 }
00266 }
00267
00268 }
00269
00270
00271 return (pass_filter);
00272
00273 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 150 of file Wavelets.c. References malloc, MTEST, my_log2(), NPTS, and powerof2(). Referenced by calculate_results(), and initialize_filters().
00159 {
00160 int N; /* log2(NPTS) */
00161 int ipts; /* wavelet coefficient index */
00162 int band; /* frequency band */
00163 int mintr; /* min. value for time window (in TR) */
00164 int maxtr; /* max. value for time window (in TR) */
00165 int ifilter; /* filter index */
00166 float * stop_filter = NULL; /* select wavelet coefficients to stop */
00167
00168
00169 N = my_log2(NPTS);
00170 stop_filter = (float *) malloc (sizeof(float) * NPTS); MTEST (stop_filter);
00171
00172
00173 for (ipts = 0; ipts < NPTS; ipts++)
00174 {
00175 if (ipts == 0)
00176 {
00177 band = -1;
00178 mintr = 0;
00179 maxtr = NPTS-1;
00180 }
00181 else
00182 {
00183 band = my_log2(ipts);
00184 mintr = (ipts - powerof2(band)) * powerof2(N-band);
00185 maxtr = mintr + powerof2(N-band) - 1;
00186 }
00187
00188 mintr += NFirst;
00189 maxtr += NFirst;
00190
00191 stop_filter[ipts] = 1.0;
00192 for (ifilter = 0; ifilter < num_stop_filters; ifilter++)
00193 {
00194 if (band == stop_band[ifilter])
00195 {
00196 if ((mintr >= stop_mintr[ifilter])
00197 && (maxtr <= stop_maxtr[ifilter]))
00198 stop_filter[ipts] = 0.0;
00199 }
00200 }
00201
00202 }
00203
00204
00205 return (stop_filter);
00206
00207 }
|
|
|
Definition at line 110 of file Wavelets.c. References i. Referenced by calculate_results(), FWT_1d_pass_filter(), FWT_1d_stop_filter(), initialize_filters(), report_results(), wavelet_analysis(), and write_bucket_data().
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 613 of file Wavelets.c. References fstat_t2p(), lbuf, my_log2(), p, powerof2(), q, and sbuf. Referenced by calculate_results(), main(), and nlfit().
00629 {
00630 int it; /* time index */
00631 int icoef; /* coefficient index */
00632 double pvalue; /* p-value */
00633
00634
00635 /** 22 Apr 1997: create label if desired by AFNI **/
00636 /** [This is in static storage, since AFNI will copy it] **/
00637
00638 if( label != NULL ){ /* assemble this 1 line at a time from sbuf */
00639
00640 lbuf[0] = '\0' ; /* make this a 0 length string to start */
00641
00642 /** for each reference, make a string into sbuf **/
00643
00644
00645 /*----- Display wavelet coefficients for full model -----*/
00646 icoef = 0;
00647 for (it = 0; it < N; it++)
00648 {
00649 if (sgnl_filter[it])
00650 {
00651 {
00652 int band, mintr, maxtr;
00653
00654 if (it == 0)
00655 {
00656 band = -1;
00657 mintr = 0;
00658 maxtr = N-1;
00659 }
00660 else
00661 {
00662 band = my_log2(it);
00663 mintr = (it - powerof2(band)) * powerof2(my_log2(N)-band);
00664 maxtr = mintr + powerof2(my_log2(N)-band) - 1;
00665 }
00666
00667 mintr += NFirst;
00668 maxtr += NFirst;
00669
00670 if (base_filter[it])
00671 sprintf (sbuf, "B(%2d)[%3d,%3d] = %f \n",
00672 band, mintr, maxtr, coef[icoef]);
00673 else
00674 sprintf (sbuf, "S(%2d)[%3d,%3d] = %f \n",
00675 band, mintr, maxtr, coef[icoef]);
00676 }
00677
00678 strcat(lbuf,sbuf);
00679
00680 icoef++;
00681 }
00682
00683 } /* End loop over Wavelet coefficients */
00684
00685
00686 /*----- Statistical results for baseline fit -----*/
00687 sprintf (sbuf, "\nBaseline: \n");
00688 strcat(lbuf,sbuf);
00689 sprintf (sbuf, "# params = %4d \n", q);
00690 strcat (lbuf, sbuf);
00691 sprintf (sbuf, "SSE = %10.3f \n", sse_base);
00692 strcat (lbuf, sbuf);
00693 sprintf (sbuf, "MSE = %10.3f \n", sse_base/(N-f-q));
00694 strcat (lbuf, sbuf);
00695
00696
00697 /*----- Statistical results for full model -----*/
00698 sprintf (sbuf, "\nFull Model: \n");
00699 strcat (lbuf, sbuf);
00700 sprintf (sbuf, "# params = %4d \n", p);
00701 strcat (lbuf, sbuf);
00702 sprintf (sbuf, "SSE = %10.3f \n", sse_full);
00703 strcat (lbuf, sbuf);
00704 sprintf (sbuf, "MSE = %10.3f \n", sse_full/(N-f-p));
00705 strcat (lbuf, sbuf);
00706
00707
00708 /*----- Summary statistics -----*/
00709 sprintf (sbuf, "\nSummary Statistics: \n");
00710 strcat (lbuf, sbuf);
00711
00712 sprintf (sbuf, "R^2 = %10.3f \n", rfull);
00713 strcat (lbuf, sbuf);
00714
00715 sprintf (sbuf, "F[%2d,%3d] = %10.3f \n", p-q, N-f-p, ffull);
00716 strcat (lbuf, sbuf);
00717
00718 pvalue = fstat_t2p ( (double) ffull, (double) p-q, (double) N-f-p);
00719 sprintf (sbuf, "p-value = %e \n", pvalue);
00720 strcat (lbuf, sbuf);
00721
00722
00723 *label = lbuf ; /* send address of lbuf back in what label points to */
00724 }
00725
00726 }
|
|
||||||||||||||||
|
Definition at line 65 of file Wavelets.c. References i. Referenced by calculate_results().
|
|
||||||||||||
|
Definition at line 45 of file Wavelets.c. References i.
|
|
|
Definition at line 33 of file Wavelets.c. Referenced by check_for_valid_inputs(), check_one_output_file(), extract_ts_array(), get_options(), read_input_data(), and read_time_series().
00034 {
00035 fprintf (stderr, "%s Error: %s \n", PROGRAM_NAME, message);
00036 exit(1);
00037 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 392 of file Wavelets.c. References calc_freg(), calc_rsqr(), calc_sse(), Daubechies_forward_FWT_1d(), Daubechies_inverse_FWT_1d(), free, FWT_1d_filter(), Haar_forward_FWT_1d(), Haar_inverse_FWT_1d(), malloc, MTEST, my_log2(), NPTS, p, q, WA_DAUBECHIES, and WA_HAAR. Referenced by calculate_results().
00415 {
00416 int N; /* log2(NPTS) */
00417 int it; /* time point index */
00418 int ip; /* full model parameter index */
00419 float * filtts = NULL; /* stop filtered time series */
00420 float * basefwt = NULL; /* baseline model FWT coefficients */
00421 float * basets = NULL; /* baseline model time series */
00422 float * fullfwt = NULL; /* full model FWT coefficients */
00423 float * fullts = NULL; /* full model time series */
00424
00425
00426 /*----- Initialize local variables -----*/
00427 N = my_log2(NPTS);
00428
00429
00430 /*----- Allocate memory for arrays -----*/
00431 filtts = (float *) malloc (sizeof(float) * NPTS); MTEST (filtts);
00432 basefwt = (float *) malloc (sizeof(float) * NPTS); MTEST (basefwt);
00433 basets = (float *) malloc (sizeof(float) * NPTS); MTEST (basets);
00434 fullfwt = (float *) malloc (sizeof(float) * NPTS); MTEST (fullfwt);
00435 fullts = (float *) malloc (sizeof(float) * NPTS); MTEST (fullts);
00436
00437
00438 /*----- Forward Fast Wavelet Transform -----*/
00439 for (it = 0; it < NPTS; it++)
00440 coefts[it] = ts_array[it];
00441 switch (wavelet_type)
00442 {
00443 case WA_HAAR:
00444 Haar_forward_FWT_1d (N, coefts);
00445 break;
00446
00447 case WA_DAUBECHIES:
00448 Daubechies_forward_FWT_1d (N, coefts);
00449 break;
00450 }
00451
00452
00453 /*----- Apply stop filter to wavelet transform coefficients -----*/
00454 FWT_1d_filter (stop_filter, N, coefts);
00455
00456
00457 /*----- Inverse Fast Wavelet Transform of filtered FWT -----*/
00458 for (it = 0; it < NPTS; it++)
00459 filtts[it] = coefts[it];
00460 switch (wavelet_type)
00461 {
00462 case WA_HAAR:
00463 Haar_inverse_FWT_1d (N, filtts);
00464 break;
00465
00466 case WA_DAUBECHIES:
00467 Daubechies_inverse_FWT_1d (N, filtts);
00468 break;
00469 }
00470
00471
00472 /*----- Apply baseline pass filter to wavelet transform coefficients -----*/
00473 for (it = 0; it < NPTS; it++)
00474 basefwt[it] = coefts[it];
00475 FWT_1d_filter (base_filter, N, basefwt);
00476
00477
00478 /*----- Inverse Fast Wavelet Transform of baseline FWT -----*/
00479 for (it = 0; it < NPTS; it++)
00480 basets[it] = basefwt[it];
00481 switch (wavelet_type)
00482 {
00483 case WA_HAAR:
00484 Haar_inverse_FWT_1d (N, basets);
00485 break;
00486
00487 case WA_DAUBECHIES:
00488 Daubechies_inverse_FWT_1d (N, basets);
00489 break;
00490 }
00491
00492
00493 /*----- Calculate error sum of squares (SSE) for baseline model -----*/
00494 *sse_base = calc_sse (NPTS, filtts, basets);
00495
00496
00497 /*----- Apply full model filter to wavelet transform coefficients -----*/
00498 for (it = 0; it < NPTS; it++)
00499 fullfwt[it] = coefts[it];
00500 FWT_1d_filter (full_filter, N, fullfwt);
00501
00502
00503 /*----- Save full model wavelet coefficients -----*/
00504 ip = 0;
00505 for (it = 0; it < NPTS; it++)
00506 if (full_filter[it] == 1.0)
00507 {
00508 coef[ip] = fullfwt[it];
00509 ip++;
00510 if (ip >= p) break;
00511 }
00512
00513
00514 /*----- Inverse Fast Wavelet Transform of full model FWT -----*/
00515 for (it = 0; it < NPTS; it++)
00516 fullts[it] = fullfwt[it];
00517 switch (wavelet_type)
00518 {
00519 case WA_HAAR:
00520 Haar_inverse_FWT_1d (N, fullts);
00521 break;
00522
00523 case WA_DAUBECHIES:
00524 Daubechies_inverse_FWT_1d (N, fullts);
00525 break;
00526 }
00527
00528
00529 /*----- Calculate error sum of squares (SSE) for signal model -----*/
00530 *sse_full = calc_sse (NPTS, filtts, fullts);
00531
00532
00533 /*----- Calculate coefficient of multiple determination R^2 -----*/
00534 *rfull = calc_rsqr (*sse_full, *sse_base);
00535
00536
00537 /*----- Calculate F-statistic for significance of the signal model -----*/
00538 *ffull = calc_freg (NPTS-f, p, q, *sse_full, *sse_base);
00539
00540
00541 /*----- Calculate residual errors -----*/
00542 for (it = 0; it < NPTS; it++)
00543 {
00544 if (p == 0)
00545 errts[it] = ts_array[it] - filtts[it];
00546 else
00547 errts[it] = filtts[it] - fullts[it];
00548 }
00549
00550
00551 /*----- Calculate "pure" signal time series -----*/
00552 for (it = 0; it < NPTS; it++)
00553 sgnlts[it] = fullts[it] - basets[it];
00554
00555
00556 /*----- Save the fitted time series -----*/
00557 for (it = 0; it < NPTS; it++)
00558 {
00559 if (p == 0)
00560 fitts[it] = filtts[it];
00561 else
00562 fitts[it] = fullts[it];
00563 }
00564
00565
00566 /*----- Release memory -----*/
00567 free (filtts); filtts = NULL;
00568 free (basefwt); basefwt = NULL;
00569 free (basets); basets = NULL;
00570 free (fullfwt); fullfwt = NULL;
00571 free (fullts); fullts = NULL;
00572
00573
00574 return;
00575
00576 }
|
Variable Documentation
|
|
Definition at line 609 of file Wavelets.c. Referenced by report_results(). |
|
|
Definition at line 610 of file Wavelets.c. Referenced by report_results(). |