Skip to main content

Parallel programming of a digital filter

Short answer

Expand G(z) in partial fractions in z^{-1}: G(z)=-50 + 46.619/(1+0.1z^{-1}) + (7.381+4.0476z^{-1})/(1-0.3z^{-1}+0.8z^{-2}). Realize constant gain, first-order, and second-order branches separately, then sum outputs. Uses three delay elements and offers low coefficient sensitivity.

Consider the digital filter defined by parallel programming: Y(z)/X(z)=4(z-1)(z²+1.2z+1)/((z+0.1)(z²-0.3z+0.8)).

In parallel programming, G(z)G(z) is expanded into partial fractions in z−1z^{-1}. Each term is realized separately (first- or second-order), and the outputs are added.

Step 1: Write in powers of z−1z^{-1}

Y(z)X(z)=4(1−z−1)(1+1.2z−1+z−2)(1+0.1z−1)(1−0.3z−1+0.8z−2)\frac{Y(z)}{X(z)} = \frac{4(1-z^{-1})(1+1.2z^{-1}+z^{-2})}{(1+0.1z^{-1})(1-0.3z^{-1}+0.8z^{-2})}

The numerator and denominator have equal degree. So there is a constant term, plus a first-order term for the real pole and a second-order term for the complex pair, z=0.15±j0.882z = 0.15 \pm j0.882.

Step 2: Partial fractions (let w=z−1w = z^{-1})

G=C0+C11+0.1w+D0+D1w1−0.3w+0.8w2G = C_0 + \frac{C_1}{1+0.1w} + \frac{D_0 + D_1w}{1 - 0.3w + 0.8w^2}
  • C0=lim⁡w→∞G=4(−1)(1)(0.1)(0.8)=−50C_0 = \lim_{w\to\infty} G = \dfrac{4(-1)(1)}{(0.1)(0.8)} = -50
  • C1=4(1−w)(1+1.2w+w2)1−0.3w+0.8w2∣w=−10=4(11)(89)84=46.619C_1 = \dfrac{4(1-w)(1+1.2w+w^2)}{1-0.3w+0.8w^2}\Big|_{w=-10} = \dfrac{4(11)(89)}{84} = 46.619
  • D0D_0 and D1D_1: at w=0w = 0, 4=−50+46.619+D04 = -50 + 46.619 + D_0, so D0=7.381D_0 = 7.381. At w=1w = 1 (that is, z=1z = 1, where G=0G = 0): 0=−50+46.6191.1+7.381+D11.50 = -50 + \dfrac{46.619}{1.1} + \dfrac{7.381 + D_1}{1.5}, so D1=4.0476D_1 = 4.0476.
Y(z)X(z)=−50+46.6191+0.1z−1+7.381+4.0476z−11−0.3z−1+0.8z−2\frac{Y(z)}{X(z)} = -50 + \frac{46.619}{1 + 0.1z^{-1}} + \frac{7.381 + 4.0476z^{-1}}{1 - 0.3z^{-1} + 0.8z^{-2}}

Check: At z=2z = 2, both forms give the same value. At z→∞z \to \infty: −50+46.619+7.381=4-50 + 46.619 + 7.381 = 4. ✔

Step 3: Difference equations of the branches

  • y1(k)=−50x(k)y_1(k) = -50x(k)
  • w2(k)=x(k)−0.1w2(k−1)w_2(k) = x(k) - 0.1w_2(k-1), and y2(k)=46.619 w2(k)y_2(k) = 46.619\,w_2(k)
  • w3(k)=x(k)+0.3w3(k−1)−0.8w3(k−2)w_3(k) = x(k) + 0.3w_3(k-1) - 0.8w_3(k-2), and y3(k)=7.381w3(k)+4.0476w3(k−1)y_3(k) = 7.381w_3(k) + 4.0476w_3(k-1)
  • y(k)=y1(k)+y2(k)+y3(k)y(k) = y_1(k) + y_2(k) + y_3(k)

Step 4: Block diagram

Overall structure:

        +-------------[-50]-------------+ y1
        |                               v
x(k)-o--+-->[ 46.619/(1+0.1z^-1) ]--->(S)--> y(k)
        |                       y2      ^
        +-->[ second-order branch ]-----+ y3

Branch 2:

x(k)-->(S)------------o--[1]-------->(S)->[46.619]-> y2(k)
        ^             |
        |          [z^-1]
        |             | w2(k-1)
        +<[-0.1]------o

Branch 3:

x(k)-->(S)------------o--[7.381]---->(S)--> y3(k)
        ^             |               ^
        |          [z^-1]             |
        |             | w3(k-1)       |
       (S)<[0.3]------o--[4.0476]-----+
        ^             |
        |          [z^-1]
        |             | w3(k-2)
        +<[-0.8]------o

Total delays: 1+2=31 + 2 = 3, the minimum for a third-order controller. A coefficient error in one branch affects only that branch's pole(s).

✓ Answer checked by Claude Opus 5.5 (high effort)

All Digital Control System chapter 4 questions →