DSPRelated.com
Forums

Half band interpolating by 2 FIR not appropriate?

Started by alek...@gmail.com January 5, 2010
Hi,

I am trying to design Half Band Interpolating by 2 FIR, something that should be straight forward, however, I came across the problem that raises suspicion. Since the filter I am going to use is half-band, every second coefficient is 0, and in order to perform interpolation by 2, I am adding 0's on every second place. For number of coefficients of 9, coefficients 0, 2, 4, 6 and 8 are non-zero (and symmetrical around coef 4), while 1, 3, 5 and 7 are 0. Since I need to pad in 0’s for every other sample it seems that my output samples are still padded with zeroes??? For example:

out(0) = c0 x in(0) + c1 x 0 + c2 x in(1) + c3 x 0 + c4 x in(2) + c5 x 0 + c6 x in(3) + c7 x 0 + c8 x in(4) = c0 x (in(0) + in(4)) + c2 x (in(1) + in(3)) + c4 x in(2)
out(1) = c0 x 0 + c1 x in(1) + c2 x 0 + c3 x in(2) + c4 x 0 + c5 x in(3) + c6 x 0 + c7 x in(4) + c8 x 0 = 0
out(2) = c0 x in(1) + c1 x 0 + c2 x in(2) + c3 x 0 + c4 x in(3) + c5 x 0 + c6 x in(4) + c7 x 0 + c8 x in(5) = c0 x (in(1) + in(5)) + c2 x (in(2) + in(4)) + c4 x in(3)
etc...

I don’t understand why is this the case? It seems like half-band filter is not capable of attenuating spectral component produced by zero padding, yet I do not see why? That component is located at initial Fs which is becoming Fsnew/2, so there is plenty attenuation between Fsnew/4 and Fsnew/2 that this filter would provide. I could not find the answer to this problem so I can assume that one of the following is correct:
1. Half band filter cannot be used for interpolation by 2
2. There is something wrong with my approach and my calculations are incorrect
3. I am just being paranoid – it is totally ok to have every second sample as 0, the rest of the samples are filtered so that spectrum is corrected for initial zero padding (phantom component is attenuated with half band FIR)...

Regards,

Aleksandar

Yahoo! Groups Links
I got the answer to this - mistake was that coefficients around middle one must be non-zero, which I missed to notice. Thanks Alain.