[music-dsp] Vocoder Filter Banks

James Chandler Jr jchandjr at bellsouth.net
Tue Apr 7 13:12:35 EDT 2009


Hi Didier

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

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

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

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?
> http://scitation.aip.org/getabs/servlet/GetabsServlet?prog=normal&id=JASMAN000043000004000803000001&idtype=cvips&gifs=yes


More information about the music-dsp mailing list