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
Parallel realization of high-order filters?
Started by ●August 12, 2005
Reply by ●August 17, 20052005-08-17
Reply by ●August 17, 20052005-08-17
"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, > RobHello 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