 |
This module refers to LabVIEW, a software development environment that features a graphical programming language.
Please see the LabVIEW QuickStart Guide module for tutorials and documentation that will help you: |
| • Apply LabVIEW to Audio Signal Processing |
| • Get started with LabVIEW |
| • Obtain a fully-functional evaluation edition of LabVIEW |
Subtractive Synthesis Model
Subtractive synthesis describes a wide range of synthesis techniques that apply a
filter (usually time-varying) to a wideband excitation source such as noise or a pulse train. The filter
shapes the wideband spectrum into the desired spectrum. The excitation/filter technique describes
the sound-producing mechanism of many types of physical instruments as well as the human voice, making
subtractive synthesis an attractive method for physical modeling of real instruments.
Figure 1 illustrates the general model of subtractive synthesis.
The excitation source parameters may include amplitude, bandwidth, and frequency (for repetitive
pulse train input), and each parameter may change independently as a function of time. The filter
parameters likewise may vary with time, and include center frequency, bandwidth, and resonant gain.
Excitation Sources
Excitation sources for subtractive synthesis must be wideband in nature, i.e., they must contain significant
spectral energy over a wide frequency range. A white noise source is an idealized source that contains
constant energy over all frequencies. Practical noise sources do not have infinite bandwidth but can create uniform
spectral energy over a suitable range such as the audio spectrum.
Random number generators form the basis of a variety of noise sources on digital computers. For example, the LabVIEW
"Signal Processing" palette contains the following noise sources: uniform, Gaussian, random, gamma, Poisson,
binomial, and Bernoulli.
A
pulse train is a repetitive series of pulses. It provides an excitation source that has
a perceptible pitch, so in a sense the excitation spectrum is "pre-shaped" before applying it to a filter.
Many types of musical instruments use some sort of pulse train as an excitation, notably wind instruments such
as brass (trumpet, trombone, tuba) and woodwinds (clarinet, saxophone, oboe, bassoon). For example, consider the
trumpet and its mouthpiece (
Figure 2 and
Figure 3, respectively).
Listen to the "buzzing" sound of the trumpet mouthpiece alone
trumpet_mouthpiece.wav, and
compare it to the mouthpiece plus trumpet
trumpet.wav.
Figure 4
compares the time-domain waveform and frequency spectrum of each sound. Both sounds are the same pitch, so the
same harmonics are visible in each. However, the mouthpiece buzz contains more spectral energy at higher frequencies.
Time-Varying Digital Filters
Time-varying digital filters are typically implemented with block processing, in which an input
signal is subdivided into short blocks (also called frames) for filtering. Each frame is
processed by a constant-coefficient digital filter. However, the constants change from one frame to the
next, thereby creating the effect of a time-varying filter.
The choice of frame length involves a trade-off between the rate at which the filter coefficients
must change and the amount of time required for the filter's transient response. Higher-order filters require
more time to reach steady state, and the frame length should be no shorter than the length of the
filter's impulse response.
Digital filters may be broadly classified as either finite impulse response (FIR) or
infinite impulse response (IIR). The latter type is preferred for most implementations
(especially for real-time filtering) because IIR filters have many fewer coefficients than comparable FIR filters.
However, IIR filters have the disadvantage of potential stability problems, especially when finite-precision
calculations are used.
The digital filter coefficients usually are calculated independently for each frame. That is, it is generally not
possible to calculate only two sets of filter coefficients and then interpolate in between. For example, suppose
a digital filter is required to have a cutoff frequency that varies anywhere from 100 Hz to 5,000 Hz. Ideally one
would be able to calculate a set of filter coefficients for the 100 Hz filter and another set for the 5,000 Hz filter,
and then use linear interpolation to determine the coefficients for any intermediate frequency, i.e., 650 Hz.
Unfortunately the interpolation technique does not work. For off-line or batch-type processing, filter coefficients
can be computed for each frame. For real-time implementation, the filter coefficients must be pre-computed and
stored in a lookup table for fast retrieval.

Download and run the LabVIEW VI
filter_coeffs.vi.
This VI illustrates why it is generally not possible to interpolate filter coefficients
between blocks. Try this: increase the "low cutoff frequency" slider and observe the values of the coefficients. Some
coefficients vary monotonically (such as a[1]), but others such as a[2] decrease and then increase again. Still
others such as the "b" coefficients remain at a constant level and then begin increasing. You can also try different
filter types (highpass, bandpass, bandstop) and filter orders.
"This online course covers signal processing concepts using music and audio to keep the subject relevant and interesting. Written by Prof. Ed Doering from the Rose-Hulman Institute of Technology, […]"