1
$\begingroup$

When splitting higher order recursive filters into more convenient 2nd order sections (biquads), in matlab, we usually use zp2sos to convert. In document, there's a couple of lines , which I am quoting below,

[sos,g] = zp2sos(z,p,k,''order') specifies the order of the rows in sos, where 'order' is

'down', to order the sections so the first row of sos contains the poles closest to the unit circle

'up', to order the sections so the first row of sos contains the poles farthest from the unit circle (default)

Here i can't remember that I had read something relevant to arranging the biquads on the basis of poles location.

Now Can anyone explain me, why should we arrange the biquads in a specific manner while cascading them ?

What that arrangement is to deal with the poles being closer or farthe from unit circle, as Matlab documents says?

What specifics need to be considered while ordering the biquads to get higher order filters.

It'll be so nice to illustrate by using some case study, for example, designing the A weighting filter (8th order IIR), and converting it ino biquads, and arranging them in a specific manner which is under discussion.

Thanks in advance.

$\endgroup$
1
$\begingroup$

Different orderings of second-order blocks have different behavior with respect to quantization noise and overflow. Usually it is best to avoid very peaky transfer functions in second order blocks, because these peaks may cause overflow and quantization noise amplification. This is why it is common to pair poles and zeros that are close to each other, so the zeros cancel part of the peaks caused by the poles. The pole-zero pairing determines the second-order sections, but not their order. Concerning the order, there is always a best choice minimizing the quantization noise, but this order needs to be determined individually for the filter under consideration. However, there are two types of ordering that work well in most cases. Depending on the way scaling is performed, either ordering the sections with increasing or decreasing pole radii is best. In Matlab, these two common ways of ordering are referred to as 'up' and 'down', respectively. Have a look at this document for more detailed information.

$\endgroup$
0
$\begingroup$

Here is an example that you can play around with to get the better intuition that you seek. I.e. design a few different filters and hack the zp2sos method (which is not a MATLAB port, despite the name) to create biquad sections in different ways. There are also a couple other filter design codebases that may be of interest, referenced in the readme:

https://github.com/ruohoruotsi/Butterworth-Filter-Design

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.