For those who are interested in how I derived this:
A feedback delay network with a unitary feedback matrix will have no "loss". A "circulant" feedback matrix circulates the data through the delay lines. This is just math-speak for cross-coupling of the delay lines.
So start with a lossless feedback delay network.
First you want a unitary matrix. A unitary matrix is such that A* A = I.
If we let A =
Taking A* A we get:
Code:
| a^2 + b^2 ac + bd |
| ac + bd c^2 + d^2 |
To get the identity matrix we need ac + bd = 0 and a^2 + b^2 = c^2 + d^2 = 1.
if we let c = -b and d = a we get
Code:
| a^2 + b^2 -ab +ab |
| -ab +ab a^2 + b^2 |
=
| a^2 + b^2 0 |
| 0 a^2 + b^2 |
Now use just need a^2 + b^2 = 1 which is simply the quadratic equation.
If a^2 + b^2 < 1 then the echoes will decay. If a^2 + b^2 == 1 the echoes will continue on infinitely. If a^2 + b^2 > 1 the echo intensity will increase. Therefore you need to be a bit careful as you can introduce runaway feedback at high values of 'a' and 'b'.
I could make this a dedicated type with parameterized controls to simplify programming and protect against runaway feedback. Not sure if there's enough interest though.