Hi list, There is a bug in filter which is part of the signals add-on package which, when given stable poles, can generate an unstable impulse response. I probably have an extreme case (a very narrow passband low pass) but nonetheless, the above statement is true. I didn't actually factor the "a" polynomial from the first call to butter to see if it is consistent with the poles in the second call to butter. The poles from this fourth-order Butterworth are _very_ close to the unit circle but from the numerical results, there shouldn't be an unstable result--there are plenty of non-9's at the RHS of the numbers.
Jerry signal *| 1.0.11 | OS X 10.6.8, using the pre-built Octave binary from the HPC site, 3.4.0. This code shows the problem. N = 500000; f_c = 1.0e9; T_counter = 1.0 / f_c; f_Nyquist = f_c / 2.0; f_cutoff = 2.0e4; % For more fun, make this 3.0e4. Filter_Order = 4; grid("on"); format long; % Compute a Butterworth filter. [b, a] = butter(Filter_Order, f_cutoff / f_c); disp("b = "); disp(b); disp("a = "); disp(a); % Do zero-pole-gain form. [z, p, g] = butter(Filter_Order, f_cutoff / f_c); disp("z = "); disp(z); disp("p = "); disp(p); disp("g = "); disp(g); disp("Pole magnitudes = "); disp(abs(p)); % Make time vector, impulse; filter the impulse. t = [0 : T_counter : (N - 1) * T_counter]; Impulse = [1, zeros(1, N - 1)]; h = filter(b, a, Impulse); % Plot the impulse response. plot(t, h); grid("on"); pause; ------------------------------------------------------------------------------ RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1 _______________________________________________ Octave-dev mailing list Octave-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/octave-dev