From: <car...@us...> - 2011-10-14 17:13:28
|
Revision: 8746 http://octave.svn.sourceforge.net/octave/?rev=8746&view=rev Author: carandraug Date: 2011-10-14 17:13:21 +0000 (Fri, 14 Oct 2011) Log Message: ----------- impinvar: remove truncation of values below tolerance as it 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(). Modified Paths: -------------- trunk/octave-forge/main/signal/inst/impinvar.m trunk/octave-forge/main/signal/inst/invimpinvar.m Modified: trunk/octave-forge/main/signal/inst/impinvar.m =================================================================== --- trunk/octave-forge/main/signal/inst/impinvar.m 2011-10-13 19:18:05 UTC (rev 8745) +++ trunk/octave-forge/main/signal/inst/impinvar.m 2011-10-14 17:13:21 UTC (rev 8746) @@ -90,10 +90,6 @@ % Shift results right to account for calculating in z instead of z^-1 b_out(end)=[]; - ## respect the required tolerance values - b_out(abs(b_out)<tol) = 0; - a_out(abs(a_out)<tol) = 0; - endfunction ## Convert residue vector for single and multiple poles in s-domain (located at sm) to @@ -118,7 +114,7 @@ %!function err = stozerr(bs,as,fs) %! %! % number of time steps -%! n=10; +%! n=100; %! %! % impulse invariant transform to z-domain %! [bz az]=impinvar(bs,as,fs); @@ -137,15 +133,15 @@ %! err=sqrt(sum((yz*fs.-ys).^2)/length(ys)); %! endfunction %! -%!assert(stozerr([1],[1 1],0.1),0,0.0001); -%!assert(stozerr([1],[1 2 1],0.1),0,0.0001); -%!assert(stozerr([1 1],[1 2 1],0.1),0,0.0001); -%!assert(stozerr([1],[1 3 3 1],0.1),0,0.0001); -%!assert(stozerr([1 1],[1 3 3 1],0.1),0,0.0001); -%!assert(stozerr([1 1 1],[1 3 3 1],0.1),0,0.0001); -%!assert(stozerr([1],[1 0 1],0.1),0,0.0001); -%!assert(stozerr([1 1],[1 0 1],0.1),0,0.0001); -%!assert(stozerr([1],[1 0 2 0 1],0.1),0,0.0001); -%!assert(stozerr([1 1],[1 0 2 0 1],0.1),0,0.0001); -%!assert(stozerr([1 1 1],[1 0 2 0 1],0.1),0,0.0001); -%!assert(stozerr([1 1 1 1],[1 0 2 0 1],0.1),0,0.0001); +%!assert(stozerr([1],[1 1],100),0,0.0001); +%!assert(stozerr([1],[1 2 1],100),0,0.0001); +%!assert(stozerr([1 1],[1 2 1],100),0,0.0001); +%!assert(stozerr([1],[1 3 3 1],100),0,0.0001); +%!assert(stozerr([1 1],[1 3 3 1],100),0,0.0001); +%!assert(stozerr([1 1 1],[1 3 3 1],100),0,0.0001); +%!assert(stozerr([1],[1 0 1],100),0,0.0001); +%!assert(stozerr([1 1],[1 0 1],100),0,0.0001); +%!assert(stozerr([1],[1 0 2 0 1],100),0,0.0001); +%!assert(stozerr([1 1],[1 0 2 0 1],100),0,0.0001); +%!assert(stozerr([1 1 1],[1 0 2 0 1],100),0,0.0001); +%!assert(stozerr([1 1 1 1],[1 0 2 0 1],100),0,0.0001); Modified: trunk/octave-forge/main/signal/inst/invimpinvar.m =================================================================== --- trunk/octave-forge/main/signal/inst/invimpinvar.m 2011-10-13 19:18:05 UTC (rev 8745) +++ trunk/octave-forge/main/signal/inst/invimpinvar.m 2011-10-14 17:13:21 UTC (rev 8746) @@ -1,4 +1,4 @@ -## Copyright 2007 R.G.H. Eschauzier <res...@ya...> +## Copyright (c) 2007 R.G.H. Eschauzier <res...@ya...> ## Copyright (c) 2011 Carnë Draug <car...@gm...> ## ## This program is free software; you can redistribute it and/or modify @@ -86,10 +86,6 @@ a_out = to_real(a_out); % Get rid of spurious imaginary part b_out = to_real(b_out); - ## respect the required tolerance values - b_out(abs(b_out)<tol) = 0; - a_out(abs(a_out)<tol) = 0; - b_out = polyreduce(b_out); endfunction @@ -118,7 +114,7 @@ %!function err = ztoserr(bz,az,fs) %! %! % number of time steps -%! n=10; +%! n=100; %! %! % make sure system is realizable (no delays) %! bz=prepad(bz,length(az)-1,0,2); @@ -140,15 +136,15 @@ %! err=sqrt(sum((yz*fs.-ys).^2)/length(ys)); %! endfunction %! -%!assert(ztoserr([1],[1 -0.5],10),0,0.0001); -%!assert(ztoserr([1],[1 -1 0.25],10),0,0.0001); -%!assert(ztoserr([1 1],[1 -1 0.25],10),0,0.0001); -%!assert(ztoserr([1],[1 -1.5 0.75 -0.125],10),0,0.0001); -%!assert(ztoserr([1 1],[1 -1.5 0.75 -0.125],10),0,0.0001); -%!assert(ztoserr([1 1 1],[1 -1.5 0.75 -0.125],10),0,0.0001); -%!assert(ztoserr([1],[1 0 0.25],10),0,0.0001); -%!assert(ztoserr([1 1],[1 0 0.25],10),0,0.0001); -%!assert(ztoserr([1],[1 0 0.5 0 0.0625],10),0,0.0001); -%!assert(ztoserr([1 1],[1 0 0.5 0 0.0625],10),0,0.0001); -%!assert(ztoserr([1 1 1],[1 0 0.5 0 0.0625],10),0,0.0001); -%!assert(ztoserr([1 1 1 1],[1 0 0.5 0 0.0625],10),0,0.0001); +%!assert(ztoserr([1],[1 -0.5],0.01),0,0.0001); +%!assert(ztoserr([1],[1 -1 0.25],0.01),0,0.0001); +%!assert(ztoserr([1 1],[1 -1 0.25],0.01),0,0.0001); +%!assert(ztoserr([1],[1 -1.5 0.75 -0.125],0.01),0,0.0001); +%!assert(ztoserr([1 1],[1 -1.5 0.75 -0.125],0.01),0,0.0001); +%!assert(ztoserr([1 1 1],[1 -1.5 0.75 -0.125],0.01),0,0.0001); +%!assert(ztoserr([1],[1 0 0.25],0.01),0,0.0001); +%!assert(ztoserr([1 1],[1 0 0.25],0.01),0,0.0001); +%!assert(ztoserr([1],[1 0 0.5 0 0.0625],0.01),0,0.0001); +%!assert(ztoserr([1 1],[1 0 0.5 0 0.0625],0.01),0,0.0001); +%!assert(ztoserr([1 1 1],[1 0 0.5 0 0.0625],0.01),0,0.0001); +%!assert(ztoserr([1 1 1 1],[1 0 0.5 0 0.0625],0.01),0,0.0001); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |