View Single Post
  #16 (permalink)  
Old 12-16-2004, 06:32 PM
Randy Yates
Guest
 
Posts: n/a
Default Re: Sample Rate Conversion (Downsampling)

"Jaime Andrés Aranguren Cardona" <[email protected]> writes:

> > > My understanding is that polyphase only comes into play during

> interpolation.
> > > It's only during interpolation that you get the opportunity to skip
> > > through the coefs - essentially choosing a phase of the impulse
> > > response. In decimation you work on contiguous samples, but only
> > > calculate the outputs you're going to keep.
> > >
> > >
> > > Am I wrong?

> >
> >
> > In a polyphase M-fold decimator, you have M polyphase filter coefficient

> sets
> > E_0 through E_{M-1} that each operate at the outgoing sample rate. Each

> section
> > is fed from an M-fold downsampler. M phases of the input signal are

> obtained
> > at the M downsampler outputs by delaying the input of each by a sample.

> Then
> > each polyphase section is convolved and the results summed. Again
> > your computations require M*K*Fs multiplications/second instead of

> M^2*K*Fs,
> > where Fs is the output sample rate.

>
> This is how I understand it is, too... Don't see the reason for Jim to say
> that polyphase only comes into play during interpolation. Could you Jim
> please explain me your point of view?


I know I'm not Jim, but I see what he was saying. Think of it like
this. The meat-headed way to do decimation is to compute the
convolution of the full (non-polyphase) filter and input data at every
input sample. Then you toss M-1 out of M of those computed
outputs. The non-polyphase but still-computationally-efficient way is
to perform a full filter convolution at every Mth input sample but
using all K*M input samples to do it with, i.e.,

y[n] = sum_{j=0}^{K*M-1} x[n*M - j] * h[j].

(Remember here that the filter length is K*M.)

This method still only takes M*K*Fs multiplies/second but it doesn't require
the filter to be partitioned.

> As I see on most diagrams, you have the filter splitted in branches, each
> one having a different phase response, thus the term "polyphase", both in
> interpolation and decimation filters.
>
> I ask too, "Am I wrong?".


It's almost a matter of how you write it. The linear convolution is

y[n] = x[n*M + 0*M - 0] * h[ 0*M + 0] + x[n*M + 0*M - 1] * h[ 0*M + 1] + ... + x[n*M + 0*M - (M-1)] * h[ 0*M + (M-1)]
+ x[n*M + 1*M - 0] * h[ 1*M + 0] + x[n*M + 1*M - 1] * h[ 1*M + 1] + ... + x[n*M + 1*M - (M-1)] * h[ 1*M + (M-1)]
+ ...
+ x[n*M + (K-1)*M - 0] * h[(K-1)*M + 0] + x[n*M + (K-1)*M - 1] * h[(K-1)*M + 1] + ... + x[n*M + (K-1)*M - (M-1)] * h[(K-1)*M + (M-1)]

To get the "polyphase" version just look at this column-wise instead of row-wise.
--
Randy Yates
Sony Ericsson Mobile Communications
Research Triangle Park, NC, USA
[email protected], 919-472-1124
Reply With Quote