This section describes the algorithm used by `gmeteor`

to design a
filter. This algorithm was originally described in the paper
METEOR: a Constraint-based FIR Filter Design Program, by K.
Steiglitz, T. W. Parks, and J. F. Kaiser, published in IEEE
Trans. Signal Processing, vol. 40, no. 8, pp. 1901-1909, August
1992.

The inputs to the algorithm are the filter length l, the symmetry (either sine or cosine symmetry), the sampling frequency, the grid density, and a list of specifications. Each specification consists of a band B, a weight w(f), and a constraint that has one of the following six forms: H(f) <= u(f), H(f) >= u(f), H'(f) <= 0, H'(f) >= 0, H”(f) <= 0, or H”(f) >= 0. We think of each specification as a compact representation for an infinite number of constraints, one for each frequency f in the band B.

The algorithm begins by rewriting the specifications as follows. Constraints of the form H(f) <= u(f) are rewritten as H(f) + w(f) y <= u(f). Constraints of the form H(f) >= u(f) are rewritten as H(f) - w(f) y >= u(f). In the other four cases (specifications on the derivatives of H(f)) the constraint is left unchanged and the weight is ignored.

Next, from the filter length, symmetry, and sampling frequency,
`gmeteor`

derives an analytic expression for H(f) in terms of
the filter coefficients h[i]. This analytic
expression is the discrete-time Fourier transform of the
h[i]'s, but without diving into too many details, we can
simply state that H(f) has the general form
where t is some function. The important property is that, for a
fixed f, H(f) is a linear combination of the filter
coefficients.

At this point, `gmeteor`

solves the following optimization problem:
find the filter coefficients h[i]'s so as to maximize
y, subject to the constraints rewritten as discussed above. This
optimization problem has an infinite number of constraints. To solve
it, `gmeteor`

samples the constraints on a finite grid of frequencies.
The grid is determined by the `grid-density`

parameter, which
specifies the number of grid points in the range [0..F/2]. After
this sampling, the filter-design problem has been reduced a
linear-programming problem, which `gmeteor`

solves by means of the dual
simplex algorithm. (I believe it is possible to solve the unsampled
continuous problem using symbolic algebra and a modification of the
revised dual simplex algorithm, but the finite algorithm works well
already.)