DSPRelated.com
Forums

Pole-Zero Association When Forming Biquads

Started by Greg Berchin April 13, 2013
What is the current thinking on how to associate zero pairs with
pole pairs when decomposing a rational transfer function into
2nd-order sections? Keep the zeros and associated poles as close
together as possible? Keep them as far apart as possible? Keep
their angles from the x-axis approximately equal? Something else?

This will be a floating-point implementation.

Thanks,
Greg
On 4/13/2013 6:56 AM, Greg Berchin wrote:
> What is the current thinking on how to associate zero pairs with > pole pairs when decomposing a rational transfer function into > 2nd-order sections? Keep the zeros and associated poles as close > together as possible? Keep them as far apart as possible? Keep > their angles from the x-axis approximately equal? Something else? > > This will be a floating-point implementation.
Hello Greg, It is good to see you posting again. Unless you can check through all possible arrangements, common practice is put sections in the order of decreasing Q, keep together nearest poles and zeroes, alternate HPF and LPF type of sections. The result would be generally not too far from optimal. Vladimir Vassilevsky DSP and Mixed Signal Designs www.abvolt.com
On 4/13/13 10:47 AM, Vladimir Vassilevsky wrote:
> On 4/13/2013 6:56 AM, Greg Berchin wrote: >> What is the current thinking on how to associate zero pairs with >> pole pairs when decomposing a rational transfer function into >> 2nd-order sections? Keep the zeros and associated poles as close >> together as possible? Keep them as far apart as possible? Keep >> their angles from the x-axis approximately equal? Something else? >> >> This will be a floating-point implementation. > > Hello Greg, > > It is good to see you posting again.
for sure. hey, i noticed a reference to something with your name on it the other day. i need to look it up again.
> Unless you can check through all possible arrangements, common practice > is put sections in the order of decreasing Q, keep together nearest > poles and zeroes, alternate HPF and LPF type of sections. The result > would be generally not too far from optimal.
the alternate HPF/LPF doesn't happen while there are remaining zeros not on either z=1 or z=-1. then they're BPFs. but i agree, start with the least stable pair of poles and match the zeros that are closest to them. -- r b-j rbj@audioimagination.com "Imagination is more important than knowledge."
On Saturday, April 13, 2013 9:47:13 AM UTC-5, Vladimir Vassilevsky wrote:

> It is good to see you posting again.
Thanks, Vladimir. My latest contract gig is not in signal processing (been working in differential GNSS -- it's not DSP but I got two patent applications out of it, and it at least shows a potential client/employer that I am flexible), so I've only been lurking here.
> Unless you can check through all possible arrangements, common practice > is put sections in the order of decreasing Q, keep together nearest > poles and zeroes, alternate HPF and LPF type of sections. The result > would be generally not too far from optimal.
Thank you; that is exactly what I was looking for. I was pretty sure about the "nearest poles and zeroes", but frankly ordering by Q hadn't occurred to me. It does make sense, though, particularly in a fixed-point implementation (though mine is float). Greg
On Saturday, April 13, 2013 10:07:02 AM UTC-5, robert bristow-johnson wrote:

> for sure. hey, i noticed a reference to something with your name on it > the other day. i need to look it up again.
Must be something old. I've been keeping a low profile lately.
> the alternate HPF/LPF doesn't happen while there are remaining zeros not > on either z=1 or z=-1. then they're BPFs.
My overall transfer function is in the form of a deemphasis filter with multiple time constants and an extra zero at z=1. So there should be some of all types. Greg
On Sat, 13 Apr 2013 06:56:28 -0500, Greg Berchin
<gjberchin@chatter.net.invalid> wrote:

>What is the current thinking on how to associate zero pairs with >pole pairs when decomposing a rational transfer function into >2nd-order sections? Keep the zeros and associated poles as close >together as possible? Keep them as far apart as possible? Keep >their angles from the x-axis approximately equal? Something else? > >This will be a floating-point implementation. > >Thanks, >Greg
Hi Greg, to expand on this, a little for those here that may be somewhat new to high-order IIR filters, one reasonable way of breaking up a high-order IIR filter into cascaded 2nd-order sections (biquads) recommended by Reference [1], goes something like this: First, factor a high-order IIR filter's H(z) transfer function into a ratio of the form (z-z0)(z-z1)(z-z2)(z-z3)... H(z) = ------------------------- (z-p0)(z-p1)(z-p2)(z-p3)... with z0, z1, z2, and z3 being the zeros in the numerator and p0, p1, p2, and p3 being the poles in the denominator. (Hopefully you have a signal processing software package to perform the factorization.) Next, the 2nd-order section assignments go like this: 1. Find the pole, or pole pair, in H(z) closest to the unit circle (highest Q). 2. Find the zero, or zero pair, closest to the pole, or pole pair, found in step 1. 3. Combine those poles and zeros into a single 2nd-order filter section. This means your first 2nd-order section may be something like: (z-z2)(z-z3) H1(z) = -------------- (z-p2)(z-p3) 4. Repeat steps 1 to 3 until all poles and zeros have been combined into 2nd-order sections. The final ordering (cascaded sequence) of the 2nd-order sections is based on how far those 2nd-order sections' poles are from the unit circle. Vlad said, "put sections in the order of decreasing Q." Reference one gives some reasons to implement the final filter in order of decreasing Q. Then they give other reasons to implement the final filter in order of increasing Q. Apparently reference [2] gives some further guidance on this 'section ordering' issue. [1] Oppenheim, A., Schafer, R., and Buck, J. Discrete-Time Signal Processing, 2nd ed., Prentice Hall, Upper Saddle River, New Jersey, 1999Section 6.8. [2] Jackson, L. B. "Roundoff Noise Analysis for Fixed-Point Digital Filters Realized in Cascade or Parallel Form," IEEE Trans. Audio Electroacoustics, Vol. AU-18, June 1970, pp. 107-122. See Ya', [-Rick-]
On Wednesday, April 17, 2013 5:46:11 AM UTC-5, Rick Lyons wrote:

> Hi Greg,
Hi Rick.
> First, factor a high-order IIR filter's H(z) transfer > function into a ratio of the form > > (z-z0)(z-z1)(z-z2)(z-z3)... > H(z) = ------------------------- > (z-p0)(z-p1)(z-p2)(z-p3)...
... recognizing that most of the poles and zeroes will occur in complex-conjugate pairs that must be kept together.
> (Hopefully you have a signal > processing software package to perform the > factorization.)
Judging from the number of MATLAB-specific questions we get on comp.dsp, I think that most people do. For the MATLAB addicts, "roots()" will do it.
> 1. Find the pole, or pole pair, in H(z) closest to > the unit circle (highest Q). > 2. Find the zero, or zero pair, closest to the pole, > or pole pair, found in step 1.
The idea here is to keep the gain of the numerator and the gain of the denominator as close to each other as possible, so that their ratio is as close to unity as possible. This helps avoid numerical precision problems.
> 3. Combine those poles and zeros into a single > 2nd-order filter section. This means your first > 2nd-order section may be something like: > > (z-z2)(z-z3) > H1(z) = -------------- > (z-p2)(z-p3)
... again, where the poles and zeroes are likely to occur in conplex-conjugate pairs.
> The final ordering (cascaded sequence) of the > 2nd-order sections is based on how far those 2nd-order > sections' poles are from the unit circle. Vlad > said, "put sections in the order of decreasing Q."
I should mention that "decreasing Q" does not specify whether it is the Q of the pole pair or the Q of the zero pair. Recall that high-Q poles result in sharp peaks, while high-Q zeroes result in sharp valleys. They are equally troublesome in a fixed-point implementation. Thanks, Greg
On Apr 17, 10:25&#4294967295;am, Greg Berchin <gjberc...@charter.net> wrote:
> > I should mention that "decreasing Q" does not specify whether it is the Q of the pole pair or the Q of the zero pair. Recall that high-Q poles result in sharp peaks, while high-Q zeroes result in sharp valleys. They are equally troublesome in a fixed-point implementation. >
yeah, but high-Q zeros don't dance closely to instability. i think the poles are more troublesome. fixed-point can deal with underflow (in magnitude) better than overflow. anyway, just my opinion. do you guys know of a good reference to comparing the cascade to partial fraction expansion and having all of these biquads (actually the numerator would be 1st-order) in parallel? then it doesn't matter what the order is, at least in fixed-point (and it would be nice to add up all those outputs into a double wide accumulator). i would like to see a 31-band graphic-EQ conceptually implemented as 31 biquads in cascade (each biquad is one of those "parametric EQs" we talk about occasionally), with that well-defined transfer function busted up into parallel sections (plus a constant gain wire added in parallel). i would like to see a nice, straight-forward algorithm that busts that transfer function up. i s'pose the "cover method" (a.k.a. Heaviside expansion) would work. r b-j
On 4/13/2013 2:34 PM, Greg Berchin wrote:
> On Saturday, April 13, 2013 9:47:13 AM UTC-5, Vladimir Vassilevsky > wrote: > >> It is good to see you posting again. > > Thanks, Vladimir. My latest contract gig is not in signal processing > (been working in differential GNSS -- it's not DSP but I got two > patent applications out of it, and it at least shows a potential > client/employer that I am flexible), so I've only been lurking here. > >> Unless you can check through all possible arrangements, common >> practice is put sections in the order of decreasing Q, keep >> together nearest poles and zeroes, alternate HPF and LPF type of >> sections. The result would be generally not too far from optimal. > > Thank you; that is exactly what I was looking for. I was pretty sure > about the "nearest poles and zeroes", but frankly ordering by Q > hadn't occurred to me. It does make sense, though, particularly in a > fixed-point implementation (though mine is float).
Quantization noise is getting shaped by recursive path of a section. So, the noise would be peaking at location of the pole; with the heigth of the peak proportional to Q. The idea is put most noisy sections first, so the noise of the high Q sections would be partially filtered out by the subsequent sections. This applies to fixed as well as floating point. Vladimir Vassilevsky DSP and Mixed Signal Designs www.abvolt.com
On Apr 17, 12:01&#4294967295;pm, Vladimir Vassilevsky <nos...@nowhere.com> wrote:
> > Quantization noise is getting shaped by recursive path of a section. So, > the noise would be peaking at location of the pole; with the heigth of > the peak proportional to Q. The idea is put most noisy sections first, > so the noise of the high Q sections would be partially filtered out by > the subsequent sections. This applies to fixed as well as floating point.
something i just thought of: with the exception of the input and output to the whole cascaded thing, cascaded DF1 looks just like cascaded DF2. for DF1, the two output states for section n are precisely the same states as the two input states for section n+1. so, while N cascaded DF2 sections require 2N states, N cascaded DF1 sections require 2N+2 states (you do *not* need 4N states, unless N=1). so i wonder if it's best for cascaded DF2, to pair the zeros of the section immediately following with the poles of the previous. like for the first section, pick the highest Q poles and then the pair of zeros closest to those poles should be the zeros for the second section. that would mean the last zeros picked at the end of the process, those would be the zeros for the first section. i dunno. just a thought. r b-j