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).
free software distributed under the terms of the GNU General Public
License (GPL). See License and Copyright, for details.
is a powerful filter-design tool because of the following three reasons.
gmeteorcan 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.
gmeteorsupports 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
gmeteorfinds 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
gmeteorfinds a frequency response that satisfies the bounds. With
gmeteor, you can freely intermix the two styles whenever it makes sense.
gmeteoremploys an extension language (specifically, the Scheme programming language), you can program it to solve your own filter-design problems. For example, I have used
gmeteorto 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.
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
(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
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
gmeteor on your system. License and Copyright
gives license and copyright information.