`gmeteor`

is a tool for designing discrete-time equiripple filters with
linear phase and a finite impulse response (FIR). `gmeteor`

runs on
systems that support the Guile extension language from the GNU project
(for example, GNU systems running on a Linux kernel). `gmeteor`

is
free software distributed under the terms of the GNU General Public
License (GPL). See License and Copyright, for details. `gmeteor`

is a powerful filter-design tool because of the following three reasons.

`gmeteor`

can design FIR filters with an arbitrary frequency response. You can even specify the frequency response analytically. In contrast, with other filter-design tools you are limited to piecewise-constant or piecewise-linear frequency responses.`gmeteor`

supports two filter design styles: the approximation style and the limit style. In the approximation style, you specify the desired frequency response of the filter, and`gmeteor`

finds the “best” feasible approximation. (This style is used by the popular Parks-McClellan filter design program.) In the limit style, you specify upper and lower bounds on the frequency response, and`gmeteor`

finds a frequency response that satisfies the bounds. With`gmeteor`

, you can freely intermix the two styles whenever it makes sense.- Since
`gmeteor`

employs an extension language (specifically, the Scheme programming language), you can program it to solve your own filter-design problems. For example, I have used`gmeteor`

to find the optimal minimum-length filter satisfying a given set of constraints, to produce many variations of a given filter, and to produce a ‘`C`’ source file that implements a given filter. Because a full programming language is always available in`gmeteor`

, you can customize the tool to solve your own problems, rather than being limited to what the`gmeteor`

's author had in mind when he wrote the program.

A filter, for the purposes of this manual, is a linear
time-invariant signal-processing system that is designed to modify
certain frequencies relative to others. For example, a system that
eliminates all frequencies above 3500Hz and does not modify lower
frequencies is a “low-pass” filter. (A similar system may be used in
your phone.) This manual assumes that you are familiar with filters and
discrete-time signal processing (also called “digital signal
processing”). Otherwise, many textbooks on the subject are available,
such as Discrete-Time Signal Processing, by Alan Oppenheim and
Ronald Schafer. Without much signal processing knowledge, you can
understand this manual and use `gmeteor`

at an intuitive level, but
in order to exploit `gmeteor`

fully, a systematic training in the
signal-processing field is desirable.

`gmeteor`

is based on the algorithm 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. (Both the paper and the METEOR program are available at
http://www.music.princeton.edu/classes/). In this beautiful and
very readable paper, Steiglitz et al. reduce the filter design problem
to a linear programming problem, which in turn is solved by the simplex
algorithm. This filter-design methodology is elegant and very general,
but unfortunately, the METEOR program falls short of implementing the
methodology in its full generality. For example, the algorithm in the
paper can approximate arbitrary frequency responses, but METEOR is
restricted to piecewise linear or exponential functions. `gmeteor`

implements the ideas described in the METEOR paper without imposing
arbitrary restrictions on the METEOR algorithm.

`gmeteor`

is user-friendly: simple filters can be designed easily,
but complicated filters are possible. To design a filter with
`gmeteor`

, you must first prepare a specification file that
describes the desired filter. If the specification file is called
‘`myfilter`’ (for example), you design the filter by invoking
‘`gmeteor myfilter`’. A simple specification file could be the
following:

(sampling-frequency 8000) (filter-length 21) (limit-= (band 0 2000) 1) (limit-= (band 3000 4000) 0) (go)

The previous specification file describes a low-pass filter of length 21. The sampling frequency is 8000Hz, the frequency response has magnitude 1 for frequencies between 0Hz and 2000Hz, and the frequency response is 0 for frequencies between 3000Hz and 4000Hz.

The specification file is actually a program written in the Scheme
programming language (which accounts for the many parentheses in the
example). You need to know Scheme if you want to use `gmeteor`

's
advanced features, but in most cases and for most users, no knowledge of
Scheme is required.

The rest of this manual is organized as follows. The tutorial chapter,
Tutorial, explains how to use `gmeteor`

with a series of
examples. The reference chapter, gmeteor Reference, documents
`gmeteor`

systematically. Installation explains how to
install `gmeteor`

on your system. License and Copyright
gives license and copyright information.