The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

SYNOPSIS

PERL PROGRAM NAME:

AUTHOR: Juan Lorenzo (Perl module only)

DATE:

DESCRIPTION:

Version:

USE

NOTES

Examples

SYNOPSIS

SEISMIC UNIX NOTES SUBFILT - apply Butterworth bandpass filter

 subfilt <stdin >stdout [optional parameters]                   



 Required parameters:                                           

        if dt is not set in header, then dt is mandatory        



 Optional parameters: (nyquist calculated internally)           

        zerophase=1             =0 for minimum phase filter     

        locut=1                 =0 for no low cut filter        

        hicut=1                 =0 for no high cut filter       

        fstoplo=0.10*(nyq)      freq(Hz) in low cut stop band   

        astoplo=0.05            upper bound on amp at fstoplo   

        fpasslo=0.15*(nyq)      freq(Hz) in low cut pass band   

        apasslo=0.95            lower bound on amp at fpasslo   

        fpasshi=0.40*(nyq)      freq(Hz) in high cut pass band  

        apasshi=0.95            lower bound on amp at fpasshi   

        fstophi=0.55*(nyq)      freq(Hz) in high cut stop band  

        astophi=0.05            upper bound on amp at fstophi   

        verbose=0               =1 for filter design info       

        dt = (from header)      time sampling interval (sec)    



 ... or  set filter by defining  poles and 3db cutoff frequencies

        npoleselo=calculated     number of poles of the lo pass band

        npolesehi=calculated     number of poles of the lo pass band

        f3dblo=calculated       frequency of 3db cutoff frequency

        f3dbhi=calculated       frequency of 3db cutoff frequency



 Notes:                                                 

 Butterworth filters were originally of interest because they  

 can be implemented in hardware form through the combination of

 inductors, capacitors, and an amplifier. Such a filter can be 

 constructed in such a way as to have very small oscillations   

 in the flat portion of the bandpass---a desireable attribute.  

 Because the filters are composed of LC circuits, the impulse  

 response is an ordinary differential equation, which translates

 into a polynomial in the transform domain. The filter is expressed

 as the division by this polynomial. Hence the poles of the filter

 are of interest.                                               



 The user may define low pass, high pass, and band pass filters

 that are either minimum phase or are zero phase.  The default  

 is to let the program calculate the optimal number of poles in

 low and high cut bands.                                        



 Alternately the user may manually define the filter by the 3db

 frequency and by the number of poles in the low and or high    

 cut region.                                                    



 The advantage of using the alternate method is that the user  

 can control the smoothness of the filter. Greater smoothness  

 through a larger pole number results in a more bell shaped    

 amplitude spectrum.                                            



 For simple zero phase filtering with sin squared tapering use 

 "sufilter".                                                    



 Credits:

        CWP: Dave Hale c. 1993 for bf.c subs and test drivers

        CWP: Jack K. Cohen for su wrapper c. 1993

      SEAM Project: Bruce Verwest 2009 added explicit pole option

                    in a program called "subfiltpole"

      CWP: John Stockwell (2012) combined Bruce Verwests changes

           into the original subfilt.



 Caveat: zerophase will not do good if trace has a spike near

           the end.  One could make a try at getting the "effective"

           length of the causal filter, but padding the traces seems

           painful in an already expensive algorithm.





 Theory:

 The 



 Trace header fields accessed: ns, dt, trid

User's notes (Juan Lorenzo) untested

CHANGES and their DATES

Import packages

instantiation of packages

Encapsulated hash of private variables

sub Step

collects switches and assembles bash instructions by adding the program name

sub note

collects switches and assembles bash instructions by adding the program name

sub clear

sub apasshi

sub apasslo

sub astophi

sub astoplo

sub dt

sub f3dbhi

sub f3dblo

sub fpasshi

sub fpasslo

sub fstophi

sub fstoplo

sub hicut

sub locut

sub npolesehi

sub npoleselo

sub verbose

sub zerophase

sub get_max_index

max index = number of input variables -1