i'm quite lazy with ASCII math notation ,
The differential matrix represents the one pole filter as an autonomous cell and how it behaves during a time step t.
Code: Select all
x y
dx/dt 0 0
dy/dt a -a
The output y, varies depending on the difference between x and y so dx/dt = a (x - y).
The exponentiation correspond accurately to what happens during a time step t.
The differencial "analog" matrix is M.
The transition "digital" matrix is exp(M * t). (the matrix exponentiation is the discretization step).
Code: Select all
exp(M*t) transition matrix for the low pass cell
xn-1 yn-1
xn 1 0 input does not change xn = xn-1 (step invariant)
-at -at
yn 1-e e output varies according to exp(-at) like a nice RC circuit
I have used the step invariant transform for low pass cells and for the state variable filter.
This method does not preserve topology, and it gets too complicated for filters with long feedback loops (such as the Moog filter).
I've also experimented with the "ramp" invariant transform (that considers the input as linearly varying during the sample step). This did not had noticeable effects on my low pass filters, but it improved slightly the high pass filters.
By the way, something i really like in your book is that you show the various integrators as real life stuff: with block diagrams. Most of the DSP books and tutorials show the different options as somewhat abstract Laplace to Z transforms. You give body to these transforms !
Did you experimented designs combining different kinds of integrators ?