- fig1.m - This creates Fig. 1 - designs a (20/20) IIR filter by the Steiglitz-McBride method and converts it to the traditional and delayed parallel form - you may experiment with the filter orders, etc.
- fig2.m - This creates Fig. 2 - designs a (25/20) IIR filter by the Steiglitz-McBride method and converts it to the traditional and delayed parallel form - basically the same as fig1.m with different numerator order.
- fig3.m - This creates Fig. 3 - designs a (200/200) IIR filter by the Steiglitz-McBride method and converts it to the delayed parallel filter by partial fraction expansion and by the LS fit. Again it is possible to experiment with different filter orders.
- fig4.m - This creates Fig. 4 - converts a 1000th order (500 section) series IIR filter to the delayed parallel form by the LS fit.
- fig5.m - This creates Fig. 5 - converts an 8th order Butterworth high-pass filter to the factored parallel form via partial fraction expansion applied to the pole-zero form of the filter.
- delparfilt.m - Filtering operation using the delayed parallel filter structure.
- tf2delparf.m - Does the direct form -> delayed parallel form conversion using partial fraction expansion.
- tf2delparf_ls.m - Does the direct form -> delayed parallel form conversion using an LS fit - recommended for large (N>100) filter orders.
- sos2delparf_ls.m - Does the series form -> delayed parallel form conversion using an LS fit.
- residued - Alternate partial fraction expansion with delayed partial fractions (details here)
- rpk2parf - Converts the partial fraction expansion form to parallel second-order sections
- zp2rp.m - Converts the pole-zero from to the residue form
- parfilt - Filtering operation using the normal (non-delayed) parallel filter structure
- tf2parf - Converts the B(z)/A(z) transfer function to normal (non-delayed) parallel form
- fe167.mat - The measured loudspeaker impulse response used in the example scripts creating Figs. 1-2.
- roomresp.mat - The measured room response used in the example creating Fig. 3.
- sosfilt.mat - The 1000th order series IIR filter data required for creating Fig. 4.
- tfplot - Logarithmic transfer-function plot for displaying the results
- puttext - Writing text to the figures

This is the companion page of the paper

Balázs Bank, "Converting Infinite Impulse Response Filters to Parallel Form", (Also available at IEEEXplore)

IEEE Signal Processing Magazine, Vol. 35, Iss. 3, pp. 124-130, May 2018.Companion page address: http://www.mit.bme.hu/~bank/parconv/

## Abstract

Discrete-time rational transfer functions are often converted to parallel second-order sections due to better numerical performance compared to direct form IIR implementations. This is usually done by performing partial fraction expansion over the original transfer function. When the order of the numerator polynomial is greater or equal to that of the denominator, polynomial long division is applied before partial fraction expansion resulting in a parallel FIR path. This paper shows that applying this common procedure can cause a severe dynamic range limitation in the filter because the individual responses can be much larger than the net transfer function. This can be avoided by applying a delayed parallel form where the response of the second-order sections is delayed in such a way that there is no overlap between the IIR and FIR parts. In addition, a simple least-squares procedure is presented to perform the conversion which is numerically more robust than the usual Heaviside partial fraction expansion. Finally, the possibilities of converting series second-order sections to the delayed parallel form are discussed.

Fig. 1: the structure of the delayed parallel filter.## MATLAB code

Here you can find the Matlab code to reproduce the figures of the paper and all the functions needed for converting IIR filters to the delayed parallel second-order form. (all files as a zip file)

Here are the most important commands required for converting a direct-form B(z)/A(z) filter or a series second-order structure to the delayed parallel form:

Some auxiliary files required to run the codes creating the figures:

You can find more info about fixed-pole parallel filters here and you may also want to check my entire list of publications.

(c) Balazs Bank, 2018. All rights of the codes reserved to the author. Non-commercial use permitted, for all other uses, please contact the author.

Last modified: 30.01.2018.