[music-dsp] Hilbert/Freq.shifter
Olli Niemitalo
music-dsp@shoko.calarts.edu
Tue, 4 Sep 2001 00:35:03 +0300
I've been playing with 90 degree phase difference IIR allpass filter pairs
for a while now. Seems like the cheapest structure is one that has the
first allpass filter delayed by 1 sample, and both allpass filters are of
the same order, and both of the allpass filters consists of cascaded
normalized second-order allpass sections of form:
H(z) = (a^2 - z^-2) / (1 - a^2 z^-2)
It has poles located at a and -a and zeros at 1/a and -1/a. One section
like that can be implemented efficiently with one multiplication and some
other operations.
I calculated coefficients (using Differential Evolution) for a filter
pair with both allpasses being cascades of 4 of that kinda sections,
meaning total 8 multiplications. The characteristics are:
Sampling frequency: 44100Hz. Band: 20-22030Hz. Maximum absolute phase
difference deviation from 90 degrees in that band: 0.7 degrees.
The "a" coefficients are:
filter1:
0.6923877778065, 0.9360654322959, 0.9882295226860, 0.9987488452737
filter2:
0.4021921162426, 0.8561710882420, 0.9722909545651, 0.9952884791278
This is purely theoretical, so it would be cool if someone would actually
implement that filter and tell me how it works!
-olli
p.s. remember to delay filter1 by 1 sample and to do a^2 before using the
coefficients. I think filter2 is the +90 degree one.
dupswapdrop -- the music-dsp mailing list and website: subscription info,
FAQ, source code archive, list archive, book reviews, dsp links
http://shoko.calarts.edu/musicdsp/