Polyphase structure for interpolation

Started by Clay July 18, 2012
Hi everyone,

I'm new to DSP and I have just been recently learning the concepts. And I
don't really understand the polyphase filtering. 

I have to increase the sampling rate by a factor of 8, and I'm doing that
in two stages: interpolate by 2 in the first stage, then by 4. I get the
basic interpolation process which involves upsampling the signal by a
factor of L (inserting zeros in between samples), and lowpass filtering the
upsampled version. But we know that's not efficient because L-1 samples are
zeros and anything multipled by zero is a 0. Fine. I get this!
 
But what I don't get is the polyphase implementation and noble identities.
I have been readig lots of articles online but none of them is really
helping.

I know polyphase structure divides the filter into L sub-filters, but is
this the only thing that it's doing? Do we still insert zeros between
samples? 
And what about noble identies? From what I got, it's changing the order of
upsampling and filtering. So it's filtering it first, then upsampling it.
But I don't really understand how these two concepts are being used
together to efficiently increase the sampling rate. 

Also, I have been reading that using a halfband filter for interpolation by
2 is efficient because almost half the coefficients are zero. But when
implementing it, are we just skipping those zeros?

Overall it would be great if someone could give me a small example that
covered all these concepts, so I could understand them better. 


Thank you in advance!


On Wed, 18 Jul 2012 17:31:48 -0500, "Clay" <1@dsprelated> wrote:

>Hi everyone, > >I'm new to DSP and I have just been recently learning the concepts. And I >don't really understand the polyphase filtering. > >I have to increase the sampling rate by a factor of 8, and I'm doing that >in two stages: interpolate by 2 in the first stage, then by 4. I get the >basic interpolation process which involves upsampling the signal by a >factor of L (inserting zeros in between samples), and lowpass filtering the >upsampled version. But we know that's not efficient because L-1 samples are >zeros and anything multipled by zero is a 0. Fine. I get this! > >But what I don't get is the polyphase implementation and noble identities. >I have been readig lots of articles online but none of them is really >helping. > >I know polyphase structure divides the filter into L sub-filters, but is >this the only thing that it's doing? Do we still insert zeros between >samples?
I think of it as a single filter with L coefficient sets that are just "phases" of a single impulse response that is oversampled by a factor of L with respect to the input rate. From that perspective you do not need to insert zeros between samples.
>And what about noble identies? From what I got, it's changing the order of >upsampling and filtering. So it's filtering it first, then upsampling it. >But I don't really understand how these two concepts are being used >together to efficiently increase the sampling rate. > >Also, I have been reading that using a halfband filter for interpolation by >2 is efficient because almost half the coefficients are zero. But when >implementing it, are we just skipping those zeros?
You can always skip an operation that multiplies anything by zero when the result is to be summed with another quantity.
>Overall it would be great if someone could give me a small example that >covered all these concepts, so I could understand them better. > > >Thank you in advance! > >
Eric Jacobsen Anchor Hill Communications www.anchorhill.com
Hello,

for example, a polyphase filter that interpolates by 4 has 4 sets of
coefficients but only one delay line. It gives 4 output samples per input
sample:

- output sample 1 using coefficient set 1
- output sample 2 using coefficient set 2
- output sample 3 using coefficient set 3
- output sample 4 using coefficient set 4
- then shift a new input sample into the delay line and start all over.

You design a FIR filter at the high (output rate).
Then, the first coefficient set is taken from impulse response positions
[1, 5, 9, 13, ..]. The second coefficient set is taken from positions [2,
6, 10, 14, ..] and so on.

It's exactly the same as inserting 3 samples after each input sample, and
then filtering with the original FIR filter.

The Noble identities may be (IMHO) more confusing than useful, as they give
an abstract explanation for something that is immediately obvious if I look
at it for a while.
Powerpoint about polyphase filters
http://www.ee.ic.ac.uk/hp/staff/dmb/courses/DSPDF/01200_Polyphase.pdf

MATLAB demo
http://www.dsplog.com/2007/05/12/polyphase-filters-for-interpolation/


note that the above course notes describe a filter that has equal input-
and output rate. This is quite a bit more complicated than a plain
polyphase interpolator. 

The term 'phase' refers to a time-delayed replica of the signal. A
'poly'phase filter simply means that several 'phases' are computed in
parallel, 

What I'm calling a 'polyphase' interpolator is referred to as 'commutator'
in the slides ('upsampler implementation'). 


>Hello, > >for example, a polyphase filter that interpolates by 4 has 4 sets of >coefficients but only one delay line. It gives 4 output samples per input >sample: > >- output sample 1 using coefficient set 1 >- output sample 2 using coefficient set 2 >- output sample 3 using coefficient set 3 >- output sample 4 using coefficient set 4 >- then shift a new input sample into the delay line and start all over. > >You design a FIR filter at the high (output rate). >Then, the first coefficient set is taken from impulse response positions >[1, 5, 9, 13, ..]. The second coefficient set is taken from positions [2, >6, 10, 14, ..] and so on. > >It's exactly the same as inserting 3 samples after each input sample, and >then filtering with the original FIR filter. > >The Noble identities may be (IMHO) more confusing than useful, as they
give
>an abstract explanation for something that is immediately obvious if I
look
>at it for a while. >
Hi, Thanks everyone for the answers. I finally get how polyphase filters work, but I still don't understand how Noble identities work. From the explanations online, it's basically reversing the order of upsampling and filtering so we can operate at the lower rate. But I thought using the polyphase filtering was actually eliminating the upsampling part by combining the two stages(because we aren't actually inserting zeros between samples since it's inefficient). So why does it even matter that we reverse the order? Thanks
Hello,

reading your original question: 
Here is a somewhat lengthy design example that includes interpolation by 2
and by 4 in the final stages. 

http://www.dsprelated.com/showarticle/156.php

I wouldn't use Noble identities to explain a FIR polyphase interpolator,
it's too abstract IMHO.

Instead (short version):
If I upsample and filter by n, there will be (n-1) zero samples for each
non-zero sample at the input of the filter. This stream is shifted through
the delay line one step per output sample.
If I keep track on which samples in the delay line are non-zero, I can omit
(n-1) out of n FIR taps, as their output contribution must be zero.
All it takes is a simple state machine that keeps track on where the
non-zero samples are. Which is a counter that wraps at n:

if counter == 0 then use first coefficient bank 
if counter == 1 then use second coefficient bank 
..
and counter = n wraps around to counter = 0.