Hi Carnë,

Looking into it some more, I found that even setting small values in the output 
polynomials to zero is an error. We need to remove lines like this:

b_out(abs(b_out)<tol) = 0;
a_out(abs(a_out)<tol) = 0;

The reason is that the tolerance applies to the positions of the poles, but not 
necessarily to the coefficients of the z and s-domain polynomials. This becomes 
a problem for relatively high sample rates in impinvar() and low sample rates 
in invimpinvar().

As an example, take

octave:1> [b a]=impinvar([1], [1, 2, 1], 100)
b =

   0   0

a =

   1.00000  -1.98010   0.98020

Note how the coefficients of b are rounded to zero.

The correct result, taking out the offending lines, is

octave:1> [b a]=impinvar([1], [1, 2, 1], 100)
b =

   0.0000e+00   9.9005e-05

a =

   1.00000  -1.98010   0.98020

which is also what Matlab gives.

Attached are the updated files, along with a patch file to the current svn 
revision. I have also updated the test cases to catch these type of issues in 
the future.

Thanks,
Rudy.

Attachment: impinvar101211.tar.gz
Description: GNU Zip compressed data

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
_______________________________________________
Octave-dev mailing list
Octave-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/octave-dev

Reply via email to