Forums

Filter-banks: efficient splitting?

Started by Mr Pook February 8, 2005
I'm trying to split an audio signal into various bands and perform
cross-correlation between bands over a stereo signal, so phase must be
linear.

To make filterbank I just defined X equal-width frequency bands,
generated FIR filters in matlab and filtered the signal X times
-v.slow unsurprisingly.

Now I'm quite sure this is a ludicrous way of doing things but what is
the correct method for what must be a routine task? X could be equal
to a power of two if that helps, i.e. 2 bands, 4, 8,16,32 etc.

Thanks,

Tom
"Mr Pook" <curried_pook@yahoo.co.uk> wrote in message 
news:6b2f594e.0502081452.1c5440e@posting.google.com...
> I'm trying to split an audio signal into various bands and perform > cross-correlation between bands over a stereo signal, so phase must be > linear. > > To make filterbank I just defined X equal-width frequency bands, > generated FIR filters in matlab and filtered the signal X times > -v.slow unsurprisingly. > > Now I'm quite sure this is a ludicrous way of doing things but what is > the correct method for what must be a routine task? X could be equal > to a power of two if that helps, i.e. 2 bands, 4, 8,16,32 etc.
There's nothing "incorrect" about your approach. It is often more efficient to filter using frequency domain multiplication - particularly when the arrays are long. You do an N-point multiplication rather than a time-domain convolution. Just FFT each of those filters of yours (assuming they are FIR filters) and go from there. I'd not though about it before but perhaps there could be fewer multiplications. For example: NOT something I'd recommend without some refinement, but a model for what might be done.... Since your're going to be multiplying by zero over the same spans of frequency time after time, then it seems redundant in some sense. So, maybe you define filters that are so close to zero in the stop band (away from the passband) that all you do is simply zero the array in those regions and don't multiply at all. A lot depends on what your processor can do in one cycle. Similarly, multiply in the passbands and out their skirts some distance for a number of complex frequency samples 2*N/K-x where K is the number of bands and x is some factor that goes beyond the band edges and adjusts for the zeros you'll pack. Someone will complain that this introduces temporal aliasing but that is a matter of degree in the practical world. Then, in order to do the cross correlation, you can complex multiply in the frequency domain between the two bands. But .... doesn't that result in all zeros? Fred
The magic words you want to Google are:  polyphase DCT filter bank

--
Matt


in article yEfOd.3411$504.500893@news20.bellglobal.com, Matt Timmermans at
mt0000@sympatico.nospam-remove.ca wrote on 02/08/2005 22:42:

> The magic words you want to Google are: polyphase DCT filter bank
here's another magic term: "halfband FIR filter". (since efficiency is something you're after.) -- r b-j rbj@audioimagination.com "Imagination is more important than knowledge."
Mr Pook wrote:

> I'm trying to split an audio signal into various bands and perform > cross-correlation between bands over a stereo signal, so phase must be > linear. >=20 > To make filterbank I just defined X equal-width frequency bands, > generated FIR filters in matlab and filtered the signal X times > -v.slow unsurprisingly. >=20 > Now I'm quite sure this is a ludicrous way of doing things but what is > the correct method for what must be a routine task? X could be equal > to a power of two if that helps, i.e. 2 bands, 4, 8,16,32 etc. >=20 > Thanks, >=20 > Tom
Nothing wrong. Take the center of the bands as an integer part (X) of the sample=20 frequency and use complex filters and decimate by that integer. Each=20 filter then moves the center frequency to baseband (0 Hz). Nr computations needed: 2 * filter_length / decimation_factor Ren=E9
>Mr Pook wrote: > >> I'm trying to split an audio signal into various bands and perform >> cross-correlation between bands over a stereo signal, so phase must be >> linear. >>=20 >> To make filterbank I just defined X equal-width frequency bands, >> generated FIR filters in matlab and filtered the signal X times >> -v.slow unsurprisingly. >>=20 >> Now I'm quite sure this is a ludicrous way of doing things but what is >> the correct method for what must be a routine task? X could be equal >> to a power of two if that helps, i.e. 2 bands, 4, 8,16,32 etc. >>=20 >> Thanks, >>=20 >> Tom > >Nothing wrong.
A bit old but perhaps can be useful for future references.. Why not to use wavelet decomposition ? Will split the entire spectrum into equal width frequency bands that can be furethr processed separately ... wavelet discrete transform does it and each subsequent transform split the input band into two equal band (halfband splitting). For instance, 8-level DWT yields 256 (2^8) bands. Alex