Forums

Multi-stage filter delay!

Started by Atmapuri September 21, 2003
Hi!

I am trying to compute the delay of a multi-stage half band FIR filter
bank (upsampling by factor 2 in each stage).

(N is number of taps).

With one stage (half band filter) I get: (N1-1) /2 + 1.
With two stages: (N1-1)/2 * 2 + 1 + (N2-1)/2 - 4

On stages higher then 2 filter length is equal to N2.

But I am having trouble deriving the general formula...
Any ideas?

Thanks!
Atmapuri


"Atmapuri" <Janez.Makovsek@usa.net> wrote in message
news:N8ibb.3460$2B6.667150@news.siol.net...
> Hi! > > I am trying to compute the delay of a multi-stage half band FIR filter > bank (upsampling by factor 2 in each stage). > > (N is number of taps). > > With one stage (half band filter) I get: (N1-1) /2 + 1. > With two stages: (N1-1)/2 * 2 + 1 + (N2-1)/2 - 4 > > On stages higher then 2 filter length is equal to N2. > > But I am having trouble deriving the general formula... > Any ideas?
You mean *symmetric* FIR filters - only they have constant delay. If they are cascaded then the delay is D1 + D2 + D3 ..... +Dn A halfband filter is of odd length with an even number of delays. So N1-1 is the number of delays. (N1-1)/2 is half the number of delays. If the first tap on the filter has zero delay, then the delay of the filter is just (N1-1)/2 isn't it? Example: Filter length 5. Delay of first tap =0 Delay of middle tap=2 Delay of filter=2 (5-1)/2 = 2. When you upsample are you adding zeros before or after the input samples? How are you defining time after you do this? Are you considering that the added zeros are at half-sample intervals? Or, are you considering that the added zeros are at the original sample rate? The former seems more appropriate but you are free to scale time any way you want if all you're doing is processing arrays of numbers. If you consider the added zeros in upsampling to be at half the input sample interval and if you insert zeros only after the samples and if the insertion doesn't take any time, then there is zero delay introduced by upsampling. This may or may not be the case for your implmentation. Let's assume that you use the same half-band filter at each stage. In effect, the sample rate of the filter increases at each stage then because the upsampler changes the sample rate. So, you will have (where N is the length of the half-band filter and D1, D2, etc. are the filter delays): D1=(N-1)/2 followed by the delay of the upsampler which I will assume is zero D2=(N-1)/4 because N has not changed but the time scale has changed by a factor of 2 due to the upsampling. etc. Oh yes, I am assuming that the multipliers and adders take no time. If this isn't the case, then you have to add the time for them to work - to the filter delay. Fred
"Atmapuri" <Janez.Makovsek@usa.net> wrote in message
news:N8ibb.3460$2B6.667150@news.siol.net...
> Hi! > > I am trying to compute the delay of a multi-stage half band FIR filter > bank (upsampling by factor 2 in each stage). > > (N is number of taps). > > With one stage (half band filter) I get: (N1-1) /2 + 1. > With two stages: (N1-1)/2 * 2 + 1 + (N2-1)/2 - 4 > > On stages higher then 2 filter length is equal to N2. > > But I am having trouble deriving the general formula... > Any ideas? > > Thanks! > Atmapuri
You mean *symmetric* FIR filters - only they have constant delay. If they are cascaded then the delay is D1 + D2 + D3 ..... +Dn A halfband filter is of odd length with an even number of delays. So N1-1 is the number of delays. (N1-1)/2 is half the number of delays. If the first tap on the filter has zero delay, then the delay of the filter is just (N1-1)/2 isn't it? Example: Filter length 5. Delay of first tap =0 Delay of middle tap=2 Delay of filter=2 (5-1)/2 = 2. When you upsample are you adding zeros before or after the input samples? How are you defining time after you do this? Are you considering that the added zeros are at half-sample intervals? Or, are you considering that the added zeros are at the original sample rate? The former seems more appropriate but you are free to scale time any way you want if all you're doing is processing arrays of numbers. If you consider the added zeros in upsampling to be at half the input sample interval and if you insert zeros only after the samples and if the insertion doesn't take any time, then there is zero delay introduced by upsampling. This may or may not be the case for your implmentation. Let's assume that you use the same half-band filter at each stage. In effect, the sample rate of the filter increases at each stage then because the upsampler changes the sample rate. So, you will have (where N is the length of the half-band filter and D1, D2, etc. are the filter delays): D1=(N-1)/2 followed by the delay of the upsampler which I will assume is zero D2=(N-1)/4 because N has not changed but the time scale has changed by a factor of 2 due to the upsampling. etc. Oh yes, I am assuming that the multipliers and adders take no time. If this isn't the case, then you have to add the time for them to work - to the filter delay. Fred
"Fred Marshall" <fmarshallx@remove_the_x.acm.org> writes:

> > You mean *symmetric* FIR filters - only they have constant delay. >
:-) Or anti-symmetric ones... Ciao, Peter K. -- Peter J. Kootsookos "Na, na na na na na na, na na na na" - 'Hey Jude', Lennon/McCartney
Hi!

> If they are cascaded then the delay is D1 + D2 + D3 ..... +Dn
Yes, but the sampling frequency is changing. This is true for a constant frequency.
> A halfband filter is of odd length with an even number of delays. > So N1-1 is the number of delays. (N1-1)/2 is half the number of delays. > If the first tap on the filter has zero delay, then the delay of the
filter
> is just (N1-1)/2 isn't it? > Example: > > Filter length 5. > Delay of first tap =0 > Delay of middle tap=2 > Delay of filter=2 > (5-1)/2 = 2. > > When you upsample are you adding zeros before or after the input samples?
After.
> How are you defining time after you do this?
The time delay must be expressed in number of samples of the final sampling frequency.
> So, you will have (where N is the length of the half-band filter and D1,
D2,
> etc. are the filter delays): > > D1=(N-1)/2 > followed by the delay of the upsampler which I will assume is zero > D2=(N-1)/4 because N has not changed but the time scale has changed by a > factor of 2 due to the upsampling. > etc.
I thought so to. The first thing that I wrote: D = (N-1)/2 UpSample by 2: D1 = D UpSample by 4: D2 = D1*2 + D1 UpSample by 8 :D3 = D2*2 + D1 But the actual numbers are like this: UpSample by 2: D1 = D + 1 UpSample by 4: D2 = D1 * 2 + D1 - 6 This if course was found by guessing. I also tested the filter and works perfectly. Frequency response is as it should be. And time domain samples align up exactly. (interpolated and non interpolated version). I must be missing something, but I dont know what. This is a call to Intel SPL routine, so I dont know what is happening behind it.
> Oh yes, I am assuming that the multipliers and adders take no time. If
this
> isn't the case, then you have to add the time for them to work - to the > filter delay.
You are correct. Thanks! Atmapuri.
Hi!

Got something working:

 D =  (N-1)/2
 UpSample by 2: D1 = D  + 1
 UpSample by 4: D2 = D1*2 + D
 UpSample by 8 :D3 = D2*2 + D + 1
UpSample by 16:D4 = D3*2 + D
UpSample by 32:D5 = D4*2 + D + 1
....

Bits me why...
-- 
Atmapuri


"Atmapuri" <Janez.Makovsek@usa.net> wrote in message
news:ZwBbb.3523$2B6.674188@news.siol.net...
> Hi! > > > If they are cascaded then the delay is D1 + D2 + D3 ..... +Dn > > Yes, but the sampling frequency is changing. This is true for > a constant frequency. > > > A halfband filter is of odd length with an even number of delays. > > So N1-1 is the number of delays. (N1-1)/2 is half the number of delays. > > If the first tap on the filter has zero delay, then the delay of the > filter > > is just (N1-1)/2 isn't it? > > Example: > > > > Filter length 5. > > Delay of first tap =0 > > Delay of middle tap=2 > > Delay of filter=2 > > (5-1)/2 = 2. > > > > When you upsample are you adding zeros before or after the input
samples?
> > After. > > > How are you defining time after you do this? > > The time delay must be expressed in number of samples of the final > sampling frequency.
Ah! Good to have a definition of the objective.... OK. Well, it seems to me that the original sampling interval is a multiple of the interpolation ratio "I". If the original sampling interval is T, and the interpolation ratio is 4, then the final sampling interval is T/4 and any sample intervals in the original frame are increased by the same ratio at the output. So, for odd-length filters, calculating forward: D1=(N1-1)/2 samples After upsampling, (increase the number of sample intervals by 2) D1=N1-1 samples D2=(N2-1)/2 samples D1+D2=N1-1+(N2-1)/2 samples after upsampling (increase the number of sample intervals by 2) D1+D2=2N1-2+N2-1 samples D3=(N3-1)/2 samples D1+D2+D3=2N1-1+N2-1+(N3-1)/2=(2N1-2)+(N2-1)+(N3-1)/2 samples after upsampling (increase the number of sample intervals by 2) D1+D2+D3=4N1-4+2N2-2+N3-1 samples D4=(N4-1)/2 samples D1+D2+D3+D4=(8/2)*(N1-4)+(4/2)*(N2-1)+(2/2)*(N3-1)+(1/2)*(N4-1) samples This is for interpolation ratios of 2 at each stage. You should be able to generalize it for interpolation ratios greater than 2 at each stage or for different interpolation ratios at each stage. Fred