Acfilt

Digital dataloggers oversample the input analog data stream and decimate to the desired sample rate.  
Prior to decimation, anti-alias filters are applied to the data to remove signal that is beyond the 
Nyquist frequency of the decimated sample interval. In many cases, acausal filters are used because 
of their desirable phase response over a wide range of frequencies.  While this is useful for many 
analysis tasks, it is a problem for earthquake location routines that rely upon picking a first arrival.

Acausal anti-alias filters have little effect upon emergent or low frequency first arrivals.  
If the first arrival is large and impulsive, however, (a large event or one very near the sensor) 
a series of precursor artifacts will precede the recorded first arrival. These precursors are 
essentially the side-lobes of the acausal anti-alias filter function.

The appearance of these artifacts causes one of two results. 1) A pick is made, but it is too early; 
occurring at the onset of the artifact rather than at the first arrival or 2) The waveform is deemed 
to be too emergent for a valid pick and none is made. Either of these events means that the closest 
stations, those contributing most to depth control, give erroneous or missing information. 

This is a well-documented phenomenon. Solutions in both the frequency and time-domain are given by 
Scherbaum (Of Poles and Zeros, 1996). These solutions, which back out the acausal effects of 
multi-stage anti-alias filters step by step, are relatively compute intensive and our needs for 
near-real-time processing of tens, if not hundreds, of data streams requires a 
compact and efficient algorithm.

To accomplish this, we collapse the cascade of anti-alias filters to a single filter kernel and 
seek the best filter function to negate the acausal effects of this kernel.  The result is a 
single recursive filter that can be efficiently applied to numerous channels in near-real-time.

There is a filter function for each datalogger/sample rate. I have built filter functions for 
those configurations I have to deal with in Northern California. These are:

HRD_50 - Nanometrics HRD at 50 sps.
HRD_100 - Nanometrics HRD at 100 sps.
HRD_200 - Nanometrics HRD at 200 sps.
HRD_500 - Nanometrics HRD at 500 sps.
Quanterra_40 - Quanterra at 40 sps.
Quanterra_80 - Quanterra at 80 sps.
RefTek72a - Reftek 72a at 100 sps.
Reftek_130 - Reftek 130 at 100 sps.

If you have other configurations using acausal filters, send me a SEED response file 
(luetgert@usgs.gov) and I will generate the filter function and add it to the list.

We have implemented acfilt within earthworm as follows:
All incoming tracebufs are written to WAVE_RING.  
Acfilt reads from WAVE_RING those channels it is interested in and, after filtering, 
writes them to ACFILT_RING.  
Two pickers are run; one grabs tracebufs of causal channels from WAVE_RING and 
writes picks to PICK_RING, the other grabs tracebufs of acausal channels from 
ACFILT_RING and writes picks to PICK_RING.  
Tracebufs that end up on ACFILT_RING are used only by the picker. 
(Unless you want to put them in a waveserver as a check on the filter)

Run acfilt as a real-time process.


Jim Luetgert - 11 Oct 2006
