I'm working with cascaded second-order allpass filters. Each filter is characterized by conjugate pole/zero pairs. In a long (>50) cascade of identical filters, the pole locations of the overall transfer function begin to diverge from their initial, theoretical location. They seem to fan out in a ring around where the true pole should be. This occasionally leads to instability, as the poles can end up outside the unit circle.
I'm assuming this is some kind of round-off or accuracy error, but haven't had any luck locating resources on this problem. Can anyone point me in the right direction?
Here is a code snippet demonstrating the problem. Uses Numpy/Scipy and the zplane function found here:
b = [0.72986695907729304, -1.0592380171923862e-16, 1] a = [1, -1.0592380171923862e-16, 0.72986695907729304] bN = array(1); aN = array(1); Nf = 10 for nf in range(Nf): bN = array(convolve(b, bN), dtype=float32); aN = array(convolve(a, aN), dtype=float32); z_casc, p_casc, g_casc = zplane(bN, aN)