[music-dsp] Vocoder Filter Banks
James Chandler Jr
jchandjr at bellsouth.net
Tue Apr 7 13:12:35 EDT 2009
Have never made a vocoder. Perhaps one decision could be whether you
want the vocoder 'obvious electronica' versus 'as natural-sounding as
such an artificial thing might be designed'?
In some 'color organ' spectral-response color lighting controllers,
fairly wide dead-bands were intentionally added. To assure that if a
certain sound turns on the red light, then hopefully that sound will
have minimal effect on the adjacent-band blue or green lights. The
dead bands were to hopefully exaggerate the visual effect of the light
Similarly, PERHAPS if you want a dramatic obvious intelligible
artificial vocoder effect, then some fairly discrete (but narrow) dead
bands between vocoder bands could be an advantage?
Perhaps if you take great care to avoid phase-interference between
bands and to smoothly merge the band boundaries, you might get a more-
realistic 'hi-fi' effect which is less intelligible? Dunno. Just
There is an old analog bandpass filter strategy of pairing series
bandpass filters with slightly-spread Fc, to improve selectivity,
flatten the band-top, and steepen band skirts. Fancier steeper designs
can use more than 2 series staggered bandpass filters.
Some simple math on designing these things was in Don Lancaster's old
Active Filter Cookbook but there must be better academic articles
somewhere. Regurgitating from memory the basic idea-- Given the
desired target Fc, set one bandpass filter to (Fc * X), and set the
other bandpass filter to (Fc / X). This symmetrically spreads the pair
on each side of the center frequency.
For any Q, there is some perfect spread factor X which will give the
flattest-widest band top, and the pair will have skirts at least twice
as steep as a single bandpass filter (of the same Q). Or you could try
a smaller spread to get a slightly-humped Fc. Or a wider spread to get
a wider band which may have a slight dip in the center-- A wider steep
band with a slight camel-back double-hump response at the top.
Mixing a bank of the bandpass pairs would likely sound very
artificial, but for a vocoder perhaps that would not be a disadvantage?
I've experimented with staggered-pair bandpass RBJ filters several
times, and found at least one application where it appears useful.
Made a program which has middlin success in picking enough harmonic
info out of a mix to guess at the chord progression. It uses a
chromatic-tuned filter bank covering about 2 octaves in the midrange
and 2 octaves in the bass. About 48 12th octave bands. Would need to
load up the source code to recall the exact number or the exact params.
Attempting to make each detection band as flat and steep as possible
over 1/12 octave, with minimal ringing, the first filter stage is a
staggered bandpass pair with Q and spread selected to be as steep/flat
as possible over the 1/12 octave. I can't recall how that was
calculated. Am weak on math and I forget it instantly.
The output of the bandpass pair is fed into a Goertzel algorithm tuned
to the frequency of interest. The Goertzel by itself could be fooled
by strong harmonics from other pitch centers, and that is why I wanted
to attenuate out-of-band audio as much as possible before feeding the
It seems to be a pretty selective chromatic filter bank, but of course
strong harmonics also register in the filter bank, and there is ugly
post-processing code to crudely attempt ignoring obvious harmonics and
look for likely fundamentals in the bass/midrange, for the chord
detection. On some songs it is surprisingly accurate, and on a few
songs it is laughably innacurate.
Anyway, that is one instance where the paired-staggered-bandpass seems
to be worth its pay <g>.
James Chandler Jr.
On Apr 6, 2009, at 6:27 PM, Didier Dambrin wrote:
> While I too wouldn't say it's a good idea to build an EQ out of
> filters in parallel, I've done one using RBJ's bandpasses, and its
> flat output is not too far from the dry, better than I expected -
> but I still consider it as a "fancy EQ-like effect" rather than a
> proper EQ tool.
> I'm now evaluating possibilities for something that really does need
> a parallel filterbank: a vocoder.
> One option is to use bandpasses, like RBJ's. Problem here, I'd like
> the freedom of moving bands around, not necessarily having the same
> distance between them.
> So another option would be to build bandpasses out of low/
> highpasses. This would cost a lot of CPU, especially because the
> bands should be narrow, for a minimum of 24dB/oct it would already
> require 2x2 filters per band. And the slopes not being controllable,
> hard to play with the # of bands if they're all too wide.
> This (old?) article also seem to say that bessel filters would be
> better for vocoders, and maybe EQ in parallel too?
More information about the music-dsp