--- freqz.m.orig 2005-01-12 16:41:23.000000000 +0100 +++ freqz.m 2005-01-13 09:40:48.000000000 +0100 @@ -68,6 +68,10 @@ ## than returning them. ## @end deftypefn +## 12 JAN 2005: modified by : +## -avoid recomputing length(a), length(b) when la, lb are available +## -fix (inverted the polynomial order) such that +## [H1, W1]= freqz(B, A); [H2, W2]=freqz(B, A, W1) give the same result ## Author: jwe ??? function [h_r, w_r] = freqz (b, a, n, region, Fs) @@ -125,6 +129,7 @@ endif n = length (n); extent = 0; + q = exp(-j*w); elseif (strcmp (region, "whole")) w = 2 * pi * (0:n-1) / n; extent = n; @@ -133,8 +138,8 @@ extent = 2 * n; endif - if (length (b) == 1) - if (length (a) == 1) + if (1 == lb ) + if (1 == la) hb = b * ones (1, n); else hb = b; @@ -143,15 +148,15 @@ hb = fft (postpad (b, extent)); hb = hb(1:n); else - hb = polyval (postpad (b, k), exp (j*w)); + hb = polyval (b(lb:-1:1), q); endif - if (length (a) == 1) + if (1 == la) ha = a; elseif (extent >= k) ha = fft (postpad (a, extent)); ha = ha(1:n); else - ha = polyval (postpad (a, k), exp (j*w)); + ha = polyval (a(la:-1:1), q); endif h = hb ./ ha; w = Fs * w / (2*pi);