Analog Filters -> Digital
Sean Costello
costello at seanet.com
Wed Feb 3 20:08:07 CET 1999
Brian Patrick Towles wrote:
>
> sorry, if this is a little off topic.
>
> for a class design project, i've tricked my group into programming a
> software vocoder :) we're going to implement the filterbanks as discrete
> bandpass filters - the same way analog vocoders work. however, none of
> the group members knows a good approach to designing these digital
> filters. optimally, we would have a procedure for turning s-domain (
> continuous ) filters into z-domain ( discrete ) filters - just because i'm
> fairly confident i could design the filterbank using analog filters.
>
> i've read a little about the bilinear-transform, which seems to do
> continuous to discrete transformation, but i don't know if that's what we
> are looking for ... does anyone have any ideas or algorithms for
> converting analog filters into their digital counterparts?
Well, there is plenty of theory out there on implementing bandpass
filters digitally. Ken Steiglitz implemented a reson filter in Music 4B
around 1966-67; "reson" is the unit generator that implements bandpass
filters in most languages. Steiglitz's book, "A Digital Signal
Processing Primer," goes into the theory of this, as well as most other
digital music things. Julius Smith developed a different version of
this filter, with better amplitude response (i.e. it doesn't "blow up"
as easily) in a Computer Music Journal article from the early 80's.
One place you might want to look for C code is in the source code for
Csound, where there are implementations of reson, as well as Butterworth
bandpass filters. Go to ftp://ftp.maths.bath.ac.uk/pub/dream/newest/
and get csound_src.zip for Windows (or Csound.tar.gz for UNIX). The
reson filter is described in ugen5.c and ugen5.h. Good luck figuring
out what the hell is going on in Csound (I'm starting to work on that
myself).
One other thing: I think that computers are getting to the point where
you CAN implement an FFT-based vocoder in real time. I think that the
basic idea is to take an FFT of the two signals, and transfer the
modulus (amplitude) of each frequency bin in the signal that is the
modulating signal to the corresponding frequency bin of the "source"
signal. It would be very cool, no?
Later,
Sean Costello
More information about the Synth-diy
mailing list