.. _ahelp_FIRdesign:
*********
FIRdesign
*********
.. contents:: :local:

.. codeblock:: none
Usage: FIRdesign [options] fbot ftop ntap
Uses the Remez algorithm to calculate the FIR filter weights
for a bandpass filter; results are written to stdout in an
unadorned (no header) column of numbers.
Inputs are
fbot = lowest freqency in the pass band.
ftop = highest frequency in the pass band.
* 0 <= fbot < ftop <= 0.5/TR
* Unless the 'TR' option is given, TR=1.
ntap = Number of filter weights (AKA 'taps') to use.
* Define df = 1/(ntap*TR) = frequency resolution:
* Then if fbot < 1.1*df, it will be replaced by 0;
in other words, a pure lowpass filter. This change
is necessary since the duration ntap*TR must be longer
than 1 full cycle of the lowest frequency (1/fbot) in
order to filter out slower frequency components.
* Similarly, if ftop > 0.5/TR1.1*df, it will be
replaced by 0.5/TR; in other words, a pure
highpass filter.
* If ntap is odd, it will be replaced by ntap+1.
* ntap must be in the range 8..2000 (inclusive).
OPTIONS:

TR dd = Set time grid spacing to 'dd' [default is 1.0]
band fbot ftop = Alternative way to specify the passband
ntap nnn = Alternative way to specify the number of taps
EXAMPLES:

FIRdesign 0.01 0.10 180  1dplot stdin
FIRdesign 0.01 0.10 180  1dfft nodetrend nfft 512 stdin:  \
 1dplot stdin xaxis 0:0.5:10:10 dt 0.001953
The first line plots the filter weights
The second line plots the frequency response (0.001953 = 1/512)
NOTES:

* http://en.wikipedia.org/wiki/ParksMcClellan_filter_design_algorithm
* The Remez algorithm code is written and GPLed by Jake Janovetz
* Multiple passbands could be designed this way; let me know if you
need such an option; a Hilbert transform FIR is also possible
* Don't try to be stupidly clever when using this program