* Bug #13692 fixed - group returned an error for a system with a specified sample... 19/15819/2
Adeline CARNIS [Thu, 15 Jan 2015 09:56:06 +0000 (10:56 +0100)]
Change-Id: I6eea47e8ea083225b95d50ee194e59a16e79d5f1

scilab/CHANGES_5.5.X
scilab/modules/signal_processing/macros/group.sci
scilab/modules/signal_processing/tests/nonreg_tests/bug_13692.dia.ref [new file with mode: 0644]
scilab/modules/signal_processing/tests/nonreg_tests/bug_13692.tst [new file with mode: 0644]

index f619039..4f8e338 100644 (file)
@@ -35,6 +35,8 @@ Scilab Bug Fixes
 
 * Bug #13690 fixed - tight_limits property can now manage X, Y and Z axis separately.
 
+* Bug #13692 fixed - group returned an error for a discrete dynamical system with a specified sample time.
+
 * Bug #13694 fixed - Calling wfir without input arguments produced an error instead of calling wfir_gui.
 
 * Bug #13712 fixed - Details added in strcat help page for strcat(strings, "", "r") case.
index 6f13cc5..ac06aef 100644 (file)
@@ -56,7 +56,7 @@ function [tg,fr]=group(npts,a1i,a2i,b1i,b2i)
         if and(ht <> [1 2 15 16]) then
             error(sprintf(_("%s: Wrong type for input argument #%d: A real or polynomial matrix or a rational expected.\n"), "group", 2));
         end
-        if or(ht == 16) & h.dt <> "d" then
+        if ht == 16 & or(h.dt == "c" | h.dt == []) then
             error(sprintf(_("%s: Wrong type for input argument #%d: A discrete system expected.\n"), "group", 2));
         end
 
@@ -66,60 +66,47 @@ function [tg,fr]=group(npts,a1i,a2i,b1i,b2i)
 
             //make h a rational polynomial
 
-            hs=max(size(h));
+            hcs=max(size(h));
             z=poly(0,"z");
             h=poly(h,"z","c");
-            h=gtild(h,"d")*(1/z^(hs-1));
-            ht=16;
-        end,
-
-        //if ht==16 then h is a rational polynomial
-        //(perhaps in cascade form)
-
-        //-compat ht==15 retained for list/tlist compatibility
-        if ht==15|ht==16 then
-            z=varn(h(3));
+            h=gtild(h,"d")*(1/z^(hcs-1));
+        elseif ht == 2 then
+            z = poly(0, varn(h));
+        else  //ht==15|ht==16
+            z=poly(0, varn(h(3)));
             hcs=max(size(h(2)));
         end,
 
         //if the rational polynomial is not in cascade form then
 
         if hcs==1 then
-
-            //if ht==2 then h is a regular polynomial
-
-            if ht==2 then
-                z=varn(h);
-            end,
-
             //get the derivative of h(z)
 
             hzd=derivat(h);
 
             //get the group delay of h(z)
-
-            z=poly(0,z);
             tgz=-z*hzd/h;
 
             //evaluate tg
 
             rfr=exp(2*%pi*%i*fr);
+
+
             tg=real(freq(tgz(2),tgz(3),rfr));
 
             //done with non-cascade calculation of group delay
 
         end,
-    end,
-
-    //re-organize if h is in cascade form
-
-    if hcs>1 then
-        xc=[coeff(h(2)),coeff(h(3))];
-        a2i=xc(1:hcs);
-        a1i=xc(hcs+1:2*hcs);
-        b2i=xc(3*hcs+1:4*hcs);
-        b1i=xc(4*hcs+1:5*hcs);
-        ne=5;
+        //re-organize if h is in cascade form
+
+        if hcs>1 then
+            xc=[coeff(h(2)),coeff(h(3))];
+            a2i=xc(1:hcs);
+            a1i=xc(hcs+1:2*hcs);
+            b2i=xc(3*hcs+1:4*hcs);
+            b1i=xc(4*hcs+1:5*hcs);
+            ne=5;
+        end,
     end,
 
     //if implementation is in cascade form
diff --git a/scilab/modules/signal_processing/tests/nonreg_tests/bug_13692.dia.ref b/scilab/modules/signal_processing/tests/nonreg_tests/bug_13692.dia.ref
new file mode 100644 (file)
index 0000000..71fbf39
--- /dev/null
@@ -0,0 +1,27 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13692 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13205
+//
+// <-- Short Description -->
+// group returned an error for a discrete dynamical system with a specified 
+// sample time.
+S = syslin(0.5, 1/%z);
+[tg, fr] = group(10, S);
+assert_checkequal(tg, ones(1, 10));
+assert_checkequal(fr, [0:0.05:0.45]);
+// An expected error
+refMsg = msprintf(_("%s: Wrong type for input argument #%d: A discrete system expected.\n"), "group", 2);
+S = syslin("c", (1+%s)/(1+0.5*%s+%s^2));
+assert_checkerror("group(10, S)", refMsg);
+S = syslin([], (1+%s)/(1+0.5*%s+%s^2));
+assert_checkerror("group(10, S)", refMsg);
diff --git a/scilab/modules/signal_processing/tests/nonreg_tests/bug_13692.tst b/scilab/modules/signal_processing/tests/nonreg_tests/bug_13692.tst
new file mode 100644 (file)
index 0000000..4f6d3b4
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13692 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13205
+//
+// <-- Short Description -->
+// group returned an error for a discrete dynamical system with a specified
+// sample time.
+
+S = syslin(0.5, 1/%z);
+[tg, fr] = group(10, S);
+assert_checkequal(tg, ones(1, 10));
+assert_checkequal(fr, [0:0.05:0.45]);
+
+// An expected error
+refMsg = msprintf(_("%s: Wrong type for input argument #%d: A discrete system expected.\n"), "group", 2);
+S = syslin("c", (1+%s)/(1+0.5*%s+%s^2));
+assert_checkerror("group(10, S)", refMsg);
+
+S = syslin([], (1+%s)/(1+0.5*%s+%s^2));
+assert_checkerror("group(10, S)", refMsg);