Private Homepage of Hartmut Henkel

Fortran Program for Transfer Function Synthesis as a Ratio of Two Complex Polynomials

A linear transfer function of a system, e. g., some electronic component or analog filter, can be written as the ratio of two complex polynomials. For an existing system there is sometimes the problem to estimate its unknown transfer function from a set of gain and phase measurements taken over a frequency range. Or the task is to model its known but rather complex transfer function by a simpler, lower-order transfer function over a given frequency band of interest.

How to solve such a problem is described by the brilliant technical report “Transfer function synthesis as a ratio of two complex polynomials” by C. K. Sanathanan and Judith Koerner, Technical Report ANL-6716, Argonne National Laboratory, 9700 South Cass Avenue, Argonne, Illinois, May 1963. The original report is available for the public and can be freely downloaded as a PDF file here:

The report contains a legible program listing RE277A.FOR (TRAFICORPORATION) together with a subroutine MATINV.FOR for matrix inversion, all written in ancient Fortran II for the mainframe computer IBM 704. From the report i resurrected the original Fortran sources by OCR and manual correction of OCR flaws; no other changes were done to these source files.

Happily a modern Fortran compiler like GNU gfortran can still compile the sources with only minor adaptations, as done by me in files re277a.for and matinv.for. The original test input from the report is in file input.dat, and the Makefile can be used to compile and test the program on a modern Linux PC, e. g., some Raspberry Pi. To solve an own design problem, only file input.dat needs to be adapted accordingly. Here is a list of all mentioned files:

Beware, there is no warranty for correctness!

The program RE277A has nicely helped to solve an approximation problem at an electronic filter network in my company von Hoerner & Sulger GmbH, and it did this pretty fast in a sub-second timeframe, providing a well fitting L-2 norm result.

Sure there are contemporary program libraries to solve synthesis tasks like the described ones, and we are routinely using them with success. But why not, once in a while, try an old program from the masters who had to develop a robust solution when a type of problem may have appeared for the first time ever. And the program RE277A had to be quite robust, given the fact that it was used to model an experimental boiling water reactor at 40 MW and a pressure of 600 psi! Back then, researchers and engineers were facing the strong limitations by processor speed and available memory when trying so solve a problem by computer, so they had to write very compact, efficient code.

It's always enlightening and fun to see how ancient software, here 60 years old, can be used to solve modern design problems.

This page first put online 1 January 2023.