DSPRelated.com
Forums

Parallel realization of high-order filters?

Started by dialectics August 12, 2005
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
bump
		
This message was sent using the Comp.DSP web interface on
www.DSPRelated.com
"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