23 #include <lal/LALStdlib.h>
24 #include <lal/LALConstants.h>
30 #include <lal/AVFactories.h>
31 #include <lal/Random.h>
32 #include <lal/IIRFilter.h>
33 #include <lal/ZPGFilter.h>
179 #define IIRFILTERTESTC_ENORM 0
180 #define IIRFILTERTESTC_ESUB 1
181 #define IIRFILTERTESTC_EARG 2
182 #define IIRFILTERTESTC_EBAD 3
183 #define IIRFILTERTESTC_EFILE 4
187 #define IIRFILTERTESTC_MSGENORM "Normal exit"
188 #define IIRFILTERTESTC_MSGESUB "Subroutine failed"
189 #define IIRFILTERTESTC_MSGEARG "Error parsing arguments"
190 #define IIRFILTERTESTC_MSGEBAD "Bad argument value"
191 #define IIRFILTERTESTC_MSGEFILE "Could not create output file"
195 #define NPTS_T 4194304
201 #define SQRT3_2 0.8660254037844386467637231707529361L
204 #define USAGE "Usage: %s [-d debuglevel] [-f filtertag] [-n npts]\n" \
205 "\t[-r reps] [-w freq] [-o] [-t]\n"
208 #define ERROR( code, msg, statement ) \
210 if ( lalDebugLevel & LALERROR ) \
211 LALPrintError( "Error[0] %d: program %s, file %s, line %d, %s\n" \
212 " %s %s\n", (code), *argv, __FILE__, \
213 __LINE__, "$Id$", statement ? statement : \
217 #define INFO( statement ) \
219 if ( lalDebugLevel & LALINFO ) \
220 LALPrintError( "Info[0]: program %s, file %s, line %d, %s\n" \
221 " %s\n", *argv, __FILE__, __LINE__, \
222 "$Id$", (statement) ); \
225 #define SUB( func, statusptr ) \
227 if ( (func), (statusptr)->statusCode ) { \
228 ERROR( IIRFILTERTESTC_ESUB, IIRFILTERTESTC_MSGESUB, \
229 "Function call \"" #func "\" failed:" ); \
230 return IIRFILTERTESTC_ESUB; \
236 #define ASSIGNFILTER \
238 zpgFilter->poles->data[0] = wc*SQRT3_2; \
239 zpgFilter->poles->data[0] += I*wc*0.5; \
240 zpgFilter->poles->data[1] = 0.0; \
241 zpgFilter->poles->data[1] += I*wc; \
242 zpgFilter->poles->data[2] = -wc*SQRT3_2; \
243 zpgFilter->poles->data[2] += I*wc*0.5; \
244 zpgFilter->gain = 0.0; \
245 zpgFilter->gain = I*wc*wc*wc; \
250 #define PRINTDATA( outfile ) \
252 FILE *fp = fopen( (outfile), "w" ); \
254 ERROR( IIRFILTERTESTC_EFILE, IIRFILTERTESTC_MSGEFILE, 0 ); \
255 return IIRFILTERTESTC_EFILE; \
259 fprintf( fp, "%23.16e\n", *(data++) ); \
264 main(
int argc,
char **argv)
287 while ( arg < argc ) {
289 if ( !strcmp( argv[arg],
"-d" ) ) {
290 if ( argc > arg + 1 ) {
299 else if ( !strcmp( argv[arg],
"-f" ) ) {
300 if ( argc > arg + 1 ) {
310 else if ( !strcmp( argv[arg],
"-n" ) ) {
311 if ( argc > arg + 1 ) {
313 npts = atoi( argv[arg++] );
322 else if ( !strcmp( argv[arg],
"-r" ) ) {
323 if ( argc > arg + 1 ) {
325 reps = strtoul( argv[arg++], NULL, 10 );
333 else if ( !strcmp( argv[arg],
"-w" ) ) {
334 if ( argc > arg + 1 ) {
336 wc = atof( argv[arg++] );
344 else if ( !strcmp( argv[arg],
"-t" ) ) {
348 else if ( !strcmp( argv[arg],
"-o" ) ) {
361 if ( doTime && !points )
380 if ( strchr(
tag,
'a' ) || strchr(
tag,
'b' ) ||
381 strchr(
tag,
'c' ) || strchr(
tag,
'd' ) ) {
391 if ( strchr(
tag,
'A' ) || strchr(
tag,
'B' ) ||
392 strchr(
tag,
'C' ) || strchr(
tag,
'D' ) ||
393 strchr(
tag,
'e' ) || strchr(
tag,
'f' ) ) {
403 if ( !sIIRFilter && !dIIRFilter ) {
414 INFO(
"Begining generation of Gaussian random deviates.\n" );
416 INFO(
"Finished generating random deviates.\n" );
419 memset( sInput->
data, 0, npts*
sizeof(
REAL4) );
420 sInput->
data[npts/2] = 1.0;
424 PRINTDATA(
"out.0" );
428 if ( strchr(
tag,
'a' ) || strchr(
tag,
'b' ) ||
429 strchr(
tag,
'c' ) || strchr(
tag,
'd' ) ||
430 strchr(
tag,
'e' ) || strchr(
tag,
'f' ) ) {
433 if ( strchr(
tag,
'A' ) || strchr(
tag,
'B' ) ||
434 strchr(
tag,
'C' ) || strchr(
tag,
'D' ) ) {
437 for ( i = 0; i < npts; i++ )
444 fprintf( stdout,
"Filtering %i points:\n", npts );
446 fprintf( stdout,
"Filtering %i points %i times:\n", npts,
451 if ( strchr(
tag,
'a' ) ) {
465 fprintf( stdout,
"Elapsed time for LALSIIRFilter(): %.2f"
466 " s\n", (
double)( stop - start )/CLOCKS_PER_SEC );
469 PRINTDATA(
"out.a" );
474 if ( strchr(
tag,
'A' ) ) {
488 fprintf( stdout,
"Elapsed time for LALDIIRFilter(): %.2f"
489 " s\n", (
double)( stop - start )/CLOCKS_PER_SEC );
492 PRINTDATA(
"out.A" );
497 if ( strchr(
tag,
'b' ) ) {
514 fprintf( stdout,
"Elapsed time for LALIIRFilterREAL4(): %.2f"
515 " s\n", (
double)( stop - start )/CLOCKS_PER_SEC );
518 PRINTDATA(
"out.b" );
523 if ( strchr(
tag,
'B' ) ) {
540 fprintf( stdout,
"Elapsed time for LALIIRFilterREAL8(): %.2f"
541 " s\n", (
double)( stop - start )/CLOCKS_PER_SEC );
544 PRINTDATA(
"out.B" );
549 if ( strchr(
tag,
'c' ) ) {
560 fprintf( stdout,
"Elapsed time for LALIIRFilterREAL4Vector(): %.2f"
561 " s\n", (
double)( stop - start )/CLOCKS_PER_SEC );
564 PRINTDATA(
"out.c" );
569 if ( strchr(
tag,
'C' ) ) {
580 fprintf( stdout,
"Elapsed time for LALIIRFilterREAL8Vector(): %.2f"
581 " s\n", (
double)( stop - start )/CLOCKS_PER_SEC );
584 PRINTDATA(
"out.C" );
589 if ( strchr(
tag,
'd' ) ) {
598 fprintf( stdout,
"Elapsed time for LALIIRFilterREAL4VectorR(): %.2f"
599 " s\n", (
double)( stop - start )/CLOCKS_PER_SEC );
602 PRINTDATA(
"out.d" );
607 if ( strchr(
tag,
'D' ) ) {
616 fprintf( stdout,
"Elapsed time for LALIIRFilterREAL8VectorR(): %.2f"
617 " s\n", (
double)( stop - start )/CLOCKS_PER_SEC );
620 PRINTDATA(
"out.D" );
625 if ( strchr(
tag,
'e' ) ) {
636 fprintf( stdout,
"Elapsed time for LALDIIRFilterREAL4Vector(): %.2f"
637 " s\n", (
double)( stop - start )/CLOCKS_PER_SEC );
640 PRINTDATA(
"out.e" );
645 if ( strchr(
tag,
'f' ) ) {
654 fprintf( stdout,
"Elapsed time for LALDIIRFilterREAL4VectorR(): %.2f"
655 " s\n", (
double)( stop - start )/CLOCKS_PER_SEC );
658 PRINTDATA(
"out.f" );
675 INFO( IIRFILTERTESTC_MSGENORM );
#define LALDIIRFilter(x, f)
#define IIRFILTERTESTC_EBAD
Bad argument value.
#define IIRFILTERTESTC_ENORM
Normal exit.
#define IIRFILTERTESTC_EARG
Error parsing arguments.
void LALCheckMemoryLeaks(void)
#define SUB(func, statusptr)
#define ERROR(code, msg, statement)
int main(int argc, char *argv[])
void LALCreateREAL4IIRFilter(LALStatus *stat, REAL4IIRFilter **output, COMPLEX8ZPGFilter *input)
Deprecated.
void LALCreateREAL8IIRFilter(LALStatus *stat, REAL8IIRFilter **output, COMPLEX16ZPGFilter *input)
Deprecated.
void LALCreateCOMPLEX8ZPGFilter(LALStatus *stat, COMPLEX8ZPGFilter **output, INT4 numZeros, INT4 numPoles)
void LALCreateCOMPLEX16ZPGFilter(LALStatus *stat, COMPLEX16ZPGFilter **output, INT4 numZeros, INT4 numPoles)
void LALDestroyREAL4IIRFilter(LALStatus *stat, REAL4IIRFilter **input)
Deprecated.
void LALDestroyREAL8IIRFilter(LALStatus *stat, REAL8IIRFilter **input)
Deprecated.
void LALDestroyCOMPLEX16ZPGFilter(LALStatus *stat, COMPLEX16ZPGFilter **input)
void LALDestroyCOMPLEX8ZPGFilter(LALStatus *stat, COMPLEX8ZPGFilter **input)
void LALIIRFilterREAL8(LALStatus *stat, REAL8 *output, REAL8 input, REAL8IIRFilter *filter)
WARNING: THIS FUNCTION IS OBSOLETE.
REAL4 LALSIIRFilter(REAL4 x, REAL4IIRFilter *filter)
WARNING: THIS FUNCTION IS OBSOLETE.
void LALIIRFilterREAL4(LALStatus *stat, REAL4 *output, REAL4 input, REAL4IIRFilter *filter)
WARNING: THIS FUNCTION IS OBSOLETE.
void LALDIIRFilterREAL4Vector(LALStatus *status, REAL4Vector *vector, REAL8IIRFilter *filter)
WARNING: THIS FUNCTION IS OBSOLETE.
void LALIIRFilterREAL8Vector(LALStatus *status, REAL8Vector *vector, REAL8IIRFilter *filter)
WARNING: THIS FUNCTION IS OBSOLETE.
void LALIIRFilterREAL4Vector(LALStatus *status, REAL4Vector *vector, REAL4IIRFilter *filter)
WARNING: THIS FUNCTION IS OBSOLETE.
void LALDIIRFilterREAL4VectorR(LALStatus *status, REAL4Vector *vector, REAL8IIRFilter *filter)
WARNING: THIS FUNCTION IS OBSOLETE.
void LALIIRFilterREAL4VectorR(LALStatus *status, REAL4Vector *vector, REAL4IIRFilter *filter)
WARNING: THIS FUNCTION IS OBSOLETE.
void LALIIRFilterREAL8VectorR(LALStatus *status, REAL8Vector *vector, REAL8IIRFilter *filter)
WARNING: THIS FUNCTION IS OBSOLETE.
unsigned char BOOLEAN
Boolean logical type, see Headers LAL(Atomic)Datatypes.h for more details.
double REAL8
Double precision real floating-point number (8 bytes).
char CHAR
One-byte signed integer, see Headers LAL(Atomic)Datatypes.h for more details.
int32_t INT4
Four-byte signed integer.
float REAL4
Single precision real floating-point number (4 bytes).
int LALPrintError(const char *fmt,...)
RandomParams * XLALCreateRandomParams(INT4 seed)
void XLALDestroyRandomParams(RandomParams *params)
int XLALNormalDeviates(REAL4Vector *deviates, RandomParams *params)
void LALDCreateVector(LALStatus *, REAL8Vector **, UINT4)
void LALDDestroyVector(LALStatus *, REAL8Vector **)
void LALSDestroyVector(LALStatus *, REAL4Vector **)
void LALSCreateVector(LALStatus *, REAL4Vector **, UINT4)
See DATATYPE-ZPGFilter types for details.
See DATATYPE-ZPGFilter types for details.
LAL status structure, see The LALStatus structure for more details.
This structure stores the direct and recursive REAL4 filter coefficients, as well as the history of t...
REAL4Vector * history
The previous values of w.
Vector of type REAL4, see DATATYPE-Vector types for more details.
REAL4 * data
Pointer to the data array.
UINT4 length
Number of elements in array.
This structure stores the direct and recursive REAL8 filter coefficients, as well as the history of t...
REAL8Vector * history
The previous values of w.
Vector of type REAL8, see DATATYPE-Vector types for more details.
REAL8 * data
Pointer to the data array.
UINT4 length
Number of elements in array.
This structure contains the parameters necessary for generating the current sequence of random number...