Click here to go to the applet.

This java applet is a demonstration of digital filters. You should hear a noise waveform when the applet starts up. If you get a message "Need java 2 for sound", then you should get the Java plug-in.

The applet starts up with a low-pass filter. It shows the frequency response of the filter, the spectrum of the filtered waveform being played, the waveform itself, and the impulse response of the filter. Click on the response curve to change the cutoff frequency.

The freqency response graph shows the filter response (shown vertically, in dB, with lines at 10 dB intervals) versus the frequency (shown horizontally, with vertical lines marking off octaves). The spectrum graph shows the spectrum of the sound output.

The **Input** popup menu allows you to select an input waveform.
The choices are:

- Noise
- Sine Wave - select the frequency by clicking on the spectrum.
- Sawtooth Wave
- Triangle Wave
- Square Wave
- Periodic Noise - select the frequency by clicking on the spectrum.
- Sweep - a sine wave that sweeps across the frequency spectrum at an adjustable rate.
- Impulses
- Various mp3 files (you can add your own by downloading the applet and then editing the index.html file)

The **Filter** popup menu allows you to select a filter. See
this site for technical
details about the filter types.
The choices are:

- FIR Low-pass - filters out high frequencies (everything below the cutoff frequency, which is adjustable by clicking on the response graph with the mouse).
- FIR High-pass - filters out low frequencies.
- FIR Band-pass - filters out everything except a range of frequencies. Use
the
**Center Frequency**and**Passband Width**sliders to adjust the range. - FIR Band-stop - filters out a range of frequencies.
Here are some adjustable parameters that affect the quality of the FIR filters: the number of points, which you can adjust with the

**Order**slider (more points is better); and the window, which you select with the**Window**popup. An FIR filter is defined by its impulse response, which you can view near the bottom of the window. To view the window function, select**FIR Low-pass**, set the cutoff frequency near zero and look at the impulse response. - Custom FIR - draw on the frequency response graph to specify your
own filter. The actual response, shown in red, is affected by the
**Order**slider and**Window**popup. - None - no filtering
- Butterworth Low-pass - a flat filter that filters out high frequencies
- Butterworth High-pass - a flat filter that filters out low frequencies
- Butterworth Band-pass - a flat filter that filters out frequencies outside of a certain band
- Butterworth Band-stop - a flat filter that filters out frequencies inside of a certain band
- Chebyshev Low-pass - a low-pass filter with an adjustable amount of ripple in the passband
- Chebyshev High-pass, Band-pass, Band-stop
- Inv Cheby Low-pass - inverse Chebyshev (also known as Chebyshev type II), a low-pass filter with a flat passband, but an adjustable amount of ripple in the stopband
- Inv Cheby High-pass, Band-pass, Band-stop
- Elliptic Low-pass -
(also known as Cauer) a low-pass filter with an adjustable amount
of ripple in the passband and stopband. Adjusting the
**Transition Band Width**will change the stopband attenuation. - Elliptic High-pass, Band-pass, Band-stop
- Comb (+) - this filter (used on noise) sounds like someone blowing into a tube.
- Comb (-) - this is a tube with one end covered.
- Delay - an echo filter (the same as a comb filter, but with longer delays)
- Plucked-String Filter - when the
**Input**popup is set to "Impulses", this sounds like a string being plucked. - Inverse Comb
- Reson - resonates at one frequency
- Reson w/ Zeros - a reson filter with zeros added at 0 and half the sampling rate
- Notch - filters out a narrow range of frequencies
- Moving Average - a simple FIR attempt at a low-pass filter. This filter (when used on noise) reminds me of an Atari 2600.
- Triangle
- Allpass - passes all frequencies equally, but with different phase delay.
Use the
**Phase Response**item in the**View**menu to view the phase response. For low frequencies, this filter acts as a fractional delay (a delay of less than one sample). - Gaussian - the impulse response and frequency response are both gaussian-shaped
- Random
- Custom IIR - drag the poles and zeros around to change the filter.

The **Sampling Rate** popup allows you to view or change the
sampling rate. You can't change the rate if the input is an MP3.

The **View** menu allows you to turn on or off the various views.
The **Log Frequency Scale** item which shows the
frequency response using a logarithmic plot instead of linear.
The **Show Entire Waveform** item will compress the waveform
segments horizontally so that each one fits in the window; this way, all of the waveform
will be displayed, but the window usually won't be wide enough to show
each sample separately. The **Ferris Plot** item
will display a
Ferris Plot
of the transfer function.

When displaying the frequency response, the applet only shows the portion of the spectrum from 0 to the Nyquist frequency (π). The rest of the response up to 2π is just a mirror image of this, and then the response repeats every 2π. For example, here is a frequency response as displayed in the applet (up to π):

Here is the response up to 4π:

Good books about digital filters:

- Steiglitz (great intro to DSP; has info on comb filters, resons, plucked-string)
- Smith (downloadable)
- Winder
- Mitra

Click here to go to the applet.