1 #define CONCAT2x(a,b) a##b
2 #define CONCAT2(a,b) CONCAT2x(a,b)
6 # define DBLDATATYPE COMPLEX16
7 # ifdef SINGLE_PRECISION
8 # define DATATYPE COMPLEX8
10 # define DATATYPE COMPLEX16
13 # define DBLDATATYPE REAL8
14 # ifdef SINGLE_PRECISION
15 # define DATATYPE REAL4
17 # define DATATYPE REAL8
22 #define VECTORTYPE CONCAT2(DATATYPE,Vector)
23 #define FILTERTYPE CONCAT2(DBLDATATYPE,IIRFilter)
25 #define FUNC CONCAT2(XLALIIRFilter,VECTORTYPE)
41 if ( ! vector || ! filter )
45 if ( ! filter->directCoef || ! filter->recursCoef || ! filter->history
46 || ! filter->directCoef->data || ! filter->recursCoef->data
47 || ! filter->history->data )
50 length=vector->length;
52 directOrder=filter->directCoef->length;
53 recursOrder=filter->recursCoef->length;
54 directCoef=filter->directCoef->data;
55 recursCoef=filter->recursCoef->data;
56 numHist=filter->history->length+1;
57 temp =
LALMalloc( numHist*
sizeof(*temp) );
60 memcpy(temp,filter->history->data,(numHist-1)*
sizeof(*temp));
66 for(j=numHist-1;j>=recursOrder;j--)
70 w+=recursCoef[j]*(temp[j]=temp[j-1]);
73 datum=*directCoef*(*temp=w);
74 for(j=1;j<directOrder;j++)
75 datum+=directCoef[j]*temp[j];
80 memcpy(filter->history->data,temp,(numHist-1)*
sizeof(*temp));
double REAL8
Double precision real floating-point number (8 bytes).
int32_t INT4
Four-byte signed integer.
#define XLAL_ERROR(...)
Macro to invoke a failure from a XLAL routine returning an integer.
@ XLAL_ENOMEM
Memory allocation error.
@ XLAL_EFAULT
Invalid pointer.
@ XLAL_EINVAL
Invalid argument.