"dialectics" <rob@ee.columbia.edu> wrote in message
news:IMKdnQiVBNMiOmHfRVn-pg@giganews.com...
> Anybody ever implement polynomial long division or partial fraction
> decomposition given second-order-sections or zeros and poles?
>
> Thanks,
> Rob
Hello Rob,
Partial fraction decomp is not that hard from a factored form. Look at how
you would do this by hand. You use the denominator terms from the serial
form as the denominators in the terms to be summed up. Then the numerator
terms will guide you with what to use as the trial numerator for each of
your parallel factors. Use the rules for repeated roots if you have them.
Then follow the standard approach of cross multiplication and evaluation at
each of the poles. This will give you a set of equations in the unknowns.
Place them in an array and solve.
Clay
Reply by dialectics●August 17, 20052005-08-17
bump
This message was sent using the Comp.DSP web interface on
www.DSPRelated.com
Reply by dialectics●August 12, 20052005-08-12
Hi all,
My (non-commercial) project requires a parallel implementation of a
high order filter with poles close to the unit circle. I've
discovered that I can have the filter set up as either zpk or
second-order-sections, but if i ever try and expand the polynomial
(e.g. with poly) or have the filter design return a rational
polynomial transfer function, i get a bad error. For example,
compare this 16th order lowpass filter in cascade vs direct form.
%get the filter in tf, sos
[z,p,k] = cheby2(16,60,.05);
[num,den] = zp2tf(z,p,k);
sos = zp2sos(z,p,k);
%get frequency response
H_cascade = ones(1,700);
for i=1:8
H_cascade = H_cascade .* freqz(sos(i,1:3), sos(i,4:6), 1:700, 20000);
end
H_direct = freqz(num,den,1:700,20000);
%plot
plot(1:700,abs(H_cascade),'r-',1:700,abs(H_direct),'b-');
axis([0 700 0 3]);
I have to convert filters like this to the parallel realization. Now
assuming that we could expand to polynomial form without such
horrible error, I would be able to say [r,p,k] = residuez(num,den).
However that doesn't work out very well because it means expanding
the polynomial. Also,
So as a workaround, you can take the partial fraction decomposition
directly on a sos cascade. Sounds simple right? Well it is,
provided that there are more poles then zeros in your filter.
Otherwise, you have to perform long division somehow on the filter
without actually expanding.
So my problem is how to compute polynomial long division, but without
the polynomial. In other words, to have a function like
[q,r]=deconv(z,p,k). As of now, I can compute the quotients (e.g.
the k's from residuez) by flipping the coefficients, and taking the
impulse response, and flipping the result.
But how to compute the remainder? In polynomial form, you could do
it like you would do 4th grade long division, e.g. den - conv(num,
k), but that doesn't work (you guessed it) without expanding the
polynomial.
Anybody ever implement polynomial long division or partial fraction
decomposition given second-order-sections or zeros and poles?
Thanks,
Rob
This message was sent using the Comp.DSP web interface on
www.DSPRelated.com