Doxygen Source Code Documentation
model_squarewave_apf.c
Go to the documentation of this file.00001 /***************************************************************************** 00002 Major portions of this software are copyrighted by the Medical College 00003 of Wisconsin, 1994-2000, and are released under the Gnu General Public 00004 License, Version 2. See the file README.Copyright for details. 00005 ******************************************************************************/ 00006 00007 /* 00008 This file contains routines to initialize and implement the 00009 square wave (amplitude, phase, and frequency parameters) signal model. 00010 00011 File: model_squarewave_apf.c 00012 Author: B. Douglas Ward 00013 Date: 29 May 1997 00014 */ 00015 00016 00017 /*---------------------------------------------------------------------------*/ 00018 00019 #include <math.h> 00020 #include "NLfit_model.h" 00021 00022 void signal_model 00023 ( 00024 float * gs, /* parameters for signal model */ 00025 int ts_length, /* length of time series data */ 00026 float ** x_array, /* independent variable matrix */ 00027 float * ts_array /* estimated signal model time series */ 00028 ); 00029 00030 00031 /*---------------------------------------------------------------------------*/ 00032 /* 00033 Routine to initialize the signal model by defining the number of parameters 00034 in the signal model, the name of the signal model, and the default values 00035 for the minimum and maximum parameter constraints. 00036 */ 00037 00038 DEFINE_MODEL_PROTOTYPE 00039 00040 MODEL_interface * initialize_model () 00041 { 00042 MODEL_interface * mi = NULL; 00043 00044 00045 /*----- allocate memory space for model interface -----*/ 00046 mi = (MODEL_interface *) XtMalloc (sizeof(MODEL_interface)); 00047 00048 00049 /*----- define interface for the square wave model -----*/ 00050 00051 /*----- name of this model -----*/ 00052 strcpy (mi->label, "SquareWave_APF"); 00053 00054 /*----- this is a signal model -----*/ 00055 mi->model_type = MODEL_SIGNAL_TYPE; 00056 00057 /*----- number of parameters in the model -----*/ 00058 mi->params = 3; 00059 00060 /*----- parameter labels -----*/ 00061 strcpy (mi->plabel[0], "amplitude"); 00062 strcpy (mi->plabel[1], "phase"); 00063 strcpy (mi->plabel[2], "frequency"); 00064 00065 /*----- minimum and maximum parameter constraints -----*/ 00066 mi->min_constr[0] = -100.0; mi->max_constr[0] = 100.0; 00067 mi->min_constr[1] = -90.0; mi->max_constr[1] = 0.00; 00068 mi->min_constr[2] = 0.1; mi->max_constr[2] = 0.15; 00069 00070 /*----- function which implements the model -----*/ 00071 mi->call_func = &signal_model; 00072 00073 00074 /*----- return pointer to the model interface -----*/ 00075 return (mi); 00076 } 00077 00078 00079 /*---------------------------------------------------------------------------*/ 00080 /* 00081 Routine to calculate the time series which results from using the 00082 square wave model with specified amplitude, phase, and frequency 00083 model parameters. 00084 00085 Definition of model parameters: 00086 00087 gs[0] = amplitude of square wave 00088 gs[1] = phase angle of square wave (degrees) 00089 gs[2] = frequency of square wave 00090 */ 00091 00092 void signal_model 00093 ( 00094 float * gs, /* parameters for signal model */ 00095 int ts_length, /* length of time series data */ 00096 float ** x_array, /* independent variable matrix */ 00097 float * ts_array /* estimated signal model time series */ 00098 ) 00099 00100 { 00101 int it; /* time index */ 00102 float t; /* time */ 00103 float fval; /* time series value at time t */ 00104 00105 00106 /*----- calculate time series corresponding to the given parameters -----*/ 00107 for (it = 0; it < ts_length; it++) 00108 { 00109 t = x_array[it][1]; 00110 fval = sin( 2.0*PI*gs[2]*t + (PI/180.0)*gs[1] ); 00111 if (fval >= 0.0) 00112 fval = gs[0]; 00113 else 00114 fval = -gs[0]; 00115 ts_array[it] = fval; 00116 } 00117 00118 } 00119 00120 00121 00122