[Fpga-synth] music-dsp list thread about Filterbanks
Magnus Danielson
magnus at rubidium.dyndns.org
Fri May 8 18:35:12 CEST 2009
Eric Brombaugh skrev:
> Magnus Danielson wrote:
>> Scott Gravenhorst skrev:
>>> Is anyone here watching this? I'd like to try my hand at this in an
>>> FPGA. Possible? What would be the
>>> minimum size device to try this?
>>
>> Depends on what detailed variant of filter you want to use and how
>> many bands. Doable? Probably.
>>
>> What topology is it? Give me a pointer!
>>
>> IIRs in some smart combination is probably what I would do.
>
> I'm watching that thread too. Coming from a background in wireless
> communications, the first thing I'd try for a filter bank would be some
> sort of transmultiplexer structure:
>
> http://www.google.com/url?sa=t&source=web&ct=res&cd=9&url=http%3A%2F%2Fwww.telfor.rs%2Ftelfor2004%2Fradovi%2FSPS-5-28.PDF&ei=AFgEStLTEZiQmAfP17DlBA&usg=AFQjCNFw9zusG7bxAf1qXeMvcSgcJt0NdA&sig2=zHOG-TfN9IfNmO9GsC9OKw
>
>
> These are combinations of polyphase FIRs with short FFTs to split a
> signal sampled at Fs into N even subbands at Fs/N sample rate. Put two
> of these back to back with a gain control in between and you could make
> a EQ-like processor. I've got a 16-channel constant bandwidth EQ that
> I've designed in Virtex 5 for my day job that is pretty efficient.
>
> While computationally efficient, the main disadvantage of using
> something like this for audio is that all the bands are the same width,
> rather than increasing bandwidth with frequency as is most commonly
> found in traditional EQs. OTOH, with a sufficiently large number of
> bands you could fake it by ganging bands together at higher frequencies.
I have never done my own filter bank, but I would consider using a
number of parallel IIRs setup for a number of cut-off frequencies and
then combined the outputs of band-border filters for weigthed summation
such that their HP/LP properties gets used. Using the input as part of
the summation is probably a wise step.
The degree of the IIRs can be adapted as needed for slopes.
I'd go for something like Butterworth, Bessel or Gauss approximations
for the pole-positions and see what works best for the application.
If we assume 31 bands and 4 poles, then the IIRs would require 30x4 MACS
and 30x4 MOVE (can be hidden) and the summation would require 31x3
MACS, all in all 213 MACSs per sample. This requires 10,224 MACS per
second for a 48 kHz sampling rate. I'd say that this rought estimate
puts it in doable for a single multiplier and a single adder chain.
Maybe the bank strategy isn't optimal, but it is just a hint and play
with numbers.
Cheers,
Magnus
More information about the Fpga-synth
mailing list