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.
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.