00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <math.h>
00021 #include <stdio.h>
00022 #include <lal/LALStdlib.h>
00023 #include <lal/AVFactories.h>
00024 #include <lal/Units.h>
00025 #include <lal/TimeFreqFFT.h>
00026 #include <lal/Window.h>
00027 #include <lal/Random.h>
00028 #include <lal/ResampleTimeSeries.h>
00029
00030 #include <lal/LALRCSID.h>
00031 NRCSID (AVGSPECTESTC,"$Id: AvgSpecTest.c,v 1.6 2008/07/08 22:13:24 kipp Exp $");
00032
00033 #define TESTSTATUS( s ) \
00034 if ( (s)->statusCode ) { REPORTSTATUS( s ); exit( 1 ); } else ((void)0)
00035
00036 int main( void )
00037 {
00038 UINT4 resamplefac = 4;
00039 UINT4 seglen = 64 * 1024;
00040 UINT4 numovrlpseg = 10;
00041 UINT4 stride = seglen / 2;
00042 UINT4 reclen = numovrlpseg * stride + stride;
00043
00044
00045
00046
00047 static LALStatus status;
00048
00049 static AverageSpectrumParams specpar;
00050 static REAL4FrequencySeries fseries;
00051 static REAL4TimeSeries tseries;
00052 static RandomParams *randpar;
00053 static ResampleTSParams resamplepar;
00054 static PassBandParamStruc highpasspar;
00055 REAL8 avg;
00056 UINT4 j;
00057 UINT4 k;
00058 FILE *fp;
00059
00060 lalDebugLevel = 3;
00061
00062
00063 tseries.deltaT = 0.1;
00064 LALCreateVector( &status, &tseries.data, reclen * resamplefac );
00065 TESTSTATUS( &status );
00066 LALCreateVector( &status, &fseries.data, seglen / 2 + 1 );
00067 TESTSTATUS( &status );
00068
00069 for ( j = 0; j < tseries.data->length; ++j )
00070 tseries.data->data[j] = sin( 0.1 * j );
00071
00072
00073
00074
00075
00076
00077
00078
00079 LALCreateRandomParams( &status, &randpar, 0 );
00080 TESTSTATUS( &status );
00081 LALNormalDeviates( &status, tseries.data, randpar );
00082 TESTSTATUS( &status );
00083 LALDestroyRandomParams( &status, &randpar );
00084 TESTSTATUS( &status );
00085
00086
00087 resamplepar.deltaT = resamplefac * tseries.deltaT;
00088 resamplepar.filterType = defaultButterworth;
00089 LALResampleREAL4TimeSeries( &status, &tseries, &resamplepar );
00090 TESTSTATUS( &status );
00091
00092
00093 highpasspar.nMax = 4;
00094 highpasspar.f1 = -1;
00095 highpasspar.a1 = -1;
00096 highpasspar.f2 = 0.1 / tseries.deltaT;
00097 highpasspar.a2 = 0.9;
00098 LALDButterworthREAL4TimeSeries( &status, &tseries, &highpasspar );
00099 TESTSTATUS( &status );
00100
00101 specpar.method = useMean;
00102 specpar.overlap = seglen - stride;
00103
00104 LALCreateForwardRealFFTPlan( &status, &specpar.plan, seglen, 0 );
00105 TESTSTATUS( &status );
00106 specpar.window = XLALCreateRectangularREAL4Window(seglen);
00107
00108
00109 LALREAL4AverageSpectrum( &status, &fseries, &tseries, &specpar );
00110 TESTSTATUS( &status );
00111
00112
00113 fp = fopen( "out1.dat", "w" );
00114 for ( k = 0; k < fseries.data->length; ++k )
00115 fprintf( fp, "%e\t%e\n", k * fseries.deltaF, fseries.data->data[k] );
00116 fclose( fp );
00117
00118
00119 avg = 0;
00120 for ( k = 1; k < fseries.data->length - 1; ++k )
00121 avg += fseries.data->data[k];
00122 avg /= ( fseries.data->length - 2 );
00123 printf( "lal mean:\t%g\n", avg );
00124
00125
00126 XLALREAL4AverageSpectrumWelch( &fseries, &tseries, seglen, stride,
00127 specpar.window, specpar.plan );
00128 if ( xlalErrno )
00129 {
00130 XLAL_PERROR( "main" );
00131 exit( 1 );
00132 }
00133
00134
00135 fp = fopen( "out2.dat", "w" );
00136 for ( k = 0; k < fseries.data->length; ++k )
00137 fprintf( fp, "%e\t%e\n", k * fseries.deltaF, fseries.data->data[k] );
00138 fclose( fp );
00139
00140
00141 avg = 0;
00142 for ( k = 1; k < fseries.data->length - 1; ++k )
00143 avg += fseries.data->data[k];
00144 avg /= ( fseries.data->length - 2 );
00145 printf( "xlal mean:\t%g\n", avg );
00146
00147
00148 XLALREAL4AverageSpectrumMedianMean( &fseries, &tseries, seglen, stride,
00149 specpar.window, specpar.plan );
00150 if ( xlalErrno )
00151 {
00152 XLAL_PERROR( "main" );
00153 exit( 1 );
00154 }
00155
00156
00157 fp = fopen( "out3.dat", "w" );
00158 for ( k = 0; k < fseries.data->length; ++k )
00159 fprintf( fp, "%e\t%e\n", k * fseries.deltaF, fseries.data->data[k] );
00160 fclose( fp );
00161
00162
00163 avg = 0;
00164 for ( k = 1; k < fseries.data->length - 1; ++k )
00165 avg += fseries.data->data[k];
00166 avg /= ( fseries.data->length - 2 );
00167 printf( "med mean:\t%g\n", avg );
00168
00169
00170 XLALREAL4AverageSpectrumMedian( &fseries, &tseries, seglen, stride,
00171 specpar.window, specpar.plan );
00172 if ( xlalErrno )
00173 {
00174 XLAL_PERROR( "main" );
00175 exit( 1 );
00176 }
00177
00178
00179 fp = fopen( "out4.dat", "w" );
00180 for ( k = 0; k < fseries.data->length; ++k )
00181 fprintf( fp, "%e\t%e\n", k * fseries.deltaF, fseries.data->data[k] );
00182 fclose( fp );
00183
00184
00185 avg = 0;
00186 for ( k = 1; k < fseries.data->length - 1; ++k )
00187 avg += fseries.data->data[k];
00188 avg /= ( fseries.data->length - 2 );
00189 printf( "median:\t\t%g\n", avg );
00190
00191
00192 XLALDestroyREAL4Window( specpar.window );
00193 LALDestroyRealFFTPlan( &status, &specpar.plan );
00194 TESTSTATUS( &status );
00195 LALDestroyVector( &status, &fseries.data );
00196 TESTSTATUS( &status );
00197 LALDestroyVector( &status, &tseries.data );
00198 TESTSTATUS( &status );
00199
00200
00201 LALCheckMemoryLeaks();
00202 return 0;
00203 }