"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