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
Filter-banks: efficient splitting?
Started by ●February 8, 2005
Reply by ●February 8, 20052005-02-08
"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
Reply by ●February 8, 20052005-02-08
Reply by ●February 9, 20052005-02-09
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 bankhere'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."
Reply by ●February 9, 20052005-02-09
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 > TomNothing 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
Reply by ●July 25, 20062006-07-25
>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