In any analog filter circuit, as long as it is of the minimum phase type, the phase shift between input and output signal is strictly coupled to the filter attenuation characteristic (the link being the Hilbert transform). So, if one has some attenuation plot of a minimum phase filter, and knowing the required algorithm (see below), one can calculate the input-output phase relationship.

The same works also vice versa, that is, calculating attenuation from phase, but it seems that going from known attenuation is the most common or useful one, so only this is covered here.

How to calculate the phase can be read in the -- now almost forgotten -- article Tables of Phase Associated with a Semi-Infinite Unit Slope of Attenuation by D. E. Thomas, which appeared in BSTJ 26: 4. October 1947, pages 870--899. Thomas did not invent the principle and cites the seminal book from 1945, Network Analysis and Feedback Amplifier Design by Hendrik W. Bode, where the topic is covered in chapters XIV and XV.

The important progress provided by Thomas is in that he made Bode's ideas accessible for engineers by calculating and publishing a set of helper tables, which greatly simplify the manual calculation of phase from attenuation.

About Thomas' contribution i read for the first time in the brilliantly didactic book Electric Networks by David F. Tuttle (McGraw-Hill, 1965), highly recommended if you want to learn about network analysis and design. Chapter 11.12 is named ‘The Thomas Tables’. The book has a copy of the tables together with examples.

The Thomas Tables were a great help at at their pre-PC time. Nowadays one can quickly calculate the relevant table values together with the phase from arbitrary attenuation characteristics by a small program. But the theory behind is still the same as it was in 1945.

The tiny Lua program

allows quick phase calculation from a Lua table of frequency/attenuation data pairs. The attenuation data may come from various sources, e. g., Spice (LTspice, ngspice) simulation output, attenuation data read or downloaded from a spectrum analyzer or oscilloscope, or arbitrary attenuation slopes manually put together, even for completely fictional circuits. The data only need to be brought into the Lua table form as required by the program. The more dense the attenuation samples are, the more precise will the calculated phase be.

Data pairs need to be given in ascending frequency order, with attenuation in decibels. The two first (lowest frequent) data pairs define the attenuation slope towards frequency zero, whereas the two last (highest frequent) data pairs define the attenuation slope towards frequency infinity.

A few usage examples are collected in the Lua file:

Have fun!

This page first put online 11 February 2020.