* Bug #12793 fixed (proposal 2) - Cacsd: improve the bode() plots 37/12337/12
A. Khorshidi [Mon, 26 Aug 2013 09:23:06 +0000 (11:23 +0200)]
In the first proposal, bode_asymp() is an input parameter to bode().

Here, bode_asymp() has its own file, which simplifies maintenance.

Change-Id: I2286e823c7cf3b2e30a56798e0395c2efb739227

36 files changed:
SEP/INDEX
SEP/SEP_115_bode_asymp.odt [new file with mode: 0644]
scilab/CHANGES_5.5.X
scilab/modules/cacsd/help/en_US/plot_display/bode.xml
scilab/modules/cacsd/help/en_US/plot_display/bode_asymp.xml [new file with mode: 0644]
scilab/modules/cacsd/help/fr_FR/plot_display/bode_asymp.xml [new file with mode: 0644]
scilab/modules/cacsd/macros/bode.sci
scilab/modules/cacsd/macros/bode_asymp.sci [new file with mode: 0644]
scilab/modules/cacsd/tests/unit_tests/bode.dia.ref
scilab/modules/cacsd/tests/unit_tests/bode.tst
scilab/modules/helptools/etc/images_md5.txt
scilab/modules/helptools/images/bode_asymp_en_US_1.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_en_US_2.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_en_US_3.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_en_US_4.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_fr_FR_1.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_fr_FR_2.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_fr_FR_3.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_fr_FR_4.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_ja_JP_1.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_ja_JP_2.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_ja_JP_3.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_ja_JP_4.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_pt_BR_1.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_pt_BR_2.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_pt_BR_3.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_pt_BR_4.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_ru_RU_1.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_ru_RU_2.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_ru_RU_3.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_asymp_ru_RU_4.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_en_US_3.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_fr_FR_3.png [new file with mode: 0644]
scilab/modules/helptools/images/bode_ru_RU_1.png
scilab/modules/helptools/images/bode_ru_RU_2.png
scilab/modules/helptools/images/bode_ru_RU_3.png [new file with mode: 0644]

index 76f5cf5..2732f6c 100644 (file)
--- a/SEP/INDEX
+++ b/SEP/INDEX
@@ -110,3 +110,4 @@ SEP #111: /* RESERVED */
 SEP #112: variance and variancef can now return the mean of the input in a new output argument and take the a priori mean as input.
 SEP #113: resize_matrix hypermatrices support.
 SEP #114: New function jcreatejar.
+SEP #115: New function bode_asymp.
diff --git a/SEP/SEP_115_bode_asymp.odt b/SEP/SEP_115_bode_asymp.odt
new file mode 100644 (file)
index 0000000..93528b1
Binary files /dev/null and b/SEP/SEP_115_bode_asymp.odt differ
index 9e365c7..4fbf2bc 100644 (file)
@@ -862,6 +862,9 @@ Scilab Bug Fixes
 * Bug #12791 fixed - More information is now given in case of failure during the ATOMS
                     autoload step.
 
+* Bug #12793 fixed - Improved the bode() plots with a new option "rad" to convert plot into rad/s
+                     and a new function bode_asymp() to draw the system asymptotes.
+
 * Bug #12794 fixed - calfrq.sci code did not follow Scilab standard.
 
 * Bug #12795 fixed - Typos fixed in CACSD help page.
index 4de1bbf..0ed18ac 100644 (file)
@@ -2,11 +2,11 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) INRIA
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
  *
  -->
     </refnamediv>
     <refsynopsisdiv>
         <title>Calling Sequence</title>
-        <synopsis>bode(sl,[fmin,fmax] [,step] [,comments] )
-            bode(sl,frq [,comments] )
-            bode(frq,db,phi [,comments])
-            bode(frq, repf [,comments])
+        <synopsis>
+            bode(sl, [fmin, fmax] [,step] [,comments] )
+            bode(sl, [fmin, fmax] [,step] [,comments] [,"rad"] )
+            bode(sl, frq [,comments] )
+            bode(sl, frq [,comments] [,"rad"] )
+            bode(frq, db, phi [,comments] )
+            bode(frq, repf [,comments] [,"rad"] )
         </synopsis>
     </refsynopsisdiv>
     <refsection>
                     </para>
                 </listitem>
             </varlistentry>
+            <varlistentry>
+                <term>"rad"</term>
+                <listitem>
+                    <para>converts the frequency from Hz into rad/s (multiplies by 2&#960;),
+                    </para>
+                </listitem>
+            </varlistentry>
         </variablelist>
     </refsection>
     <refsection>
             frequencies is made by <literal>calfrq</literal>.
         </para>
         <para>
-            The 
-            <member>
-                <link linkend="datatips">datatips</link>
-            </member>
+            The
+            <link linkend="datatips">datatips</link>
             tool may be used
             to display data along the phase and modulus curves.
         </para>
     </refsection>
     <refsection>
         <title>Examples</title>
-        <programlisting role="example"><![CDATA[ 
-s=poly(0,'s')
-h=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01))
-clf();bode(h,0.01,100);
+        <programlisting role="example"><![CDATA[
+s = poly(0, 's');
+h = syslin('c', (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+
+clf(); bode(h, 0.01, 100);
  ]]></programlisting>
         <para>
             <scilab:image localized="true">
-                s=poly(0,'s')
-                h=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01))
-                clf();bode(h,0.01,100);
+                s = poly(0, 's');
+                h = syslin('c', (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+                clf(); bode(h, 0.01, 100);
             </scilab:image>
         </para>
-        <programlisting role="example"><![CDATA[ 
-s=poly(0,'s')
-h1=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01))
-num=22801+4406.18*s+382.37*s^2+21.02*s^3+s^4;
-den=22952.25+4117.77*s+490.63*s^2+33.06*s^3+s^4
-h2=syslin('c',num/den);
+        <programlisting role="example"><![CDATA[
+s = poly(0, 's');
+h1 = syslin('c', (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+num = 22801+4406.18*s+382.37*s^2+21.02*s^3+s^4;
+den = 22952.25+4117.77*s+490.63*s^2+33.06*s^3+s^4;
+h2 = syslin('c', num/den);
 
-clf();bode([h1;h2],0.01,100,['h1';'h2'])
+clf(); bode([h1; h2], 0.01, 100, ['h1'; 'h2']);
  ]]></programlisting>
         <para>
             <scilab:image localized="true">
-                s=poly(0,'s')
-                h1=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01))
-                num=22801+4406.18*s+382.37*s^2+21.02*s^3+s^4;
-                den=22952.25+4117.77*s+490.63*s^2+33.06*s^3+s^4
-                h2=syslin('c',num/den);
-                
-                clf();bode([h1;h2],0.01,100,['h1';'h2'])
+                s = poly(0, 's');
+                h1 = syslin('c', (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+                num = 22801+4406.18*s+382.37*s^2+21.02*s^3+s^4;
+                den = 22952.25+4117.77*s+490.63*s^2+33.06*s^3+s^4;
+                h2 = syslin('c', num/den);
+                clf(); bode([h1; h2], 0.01, 100, ['h1'; 'h2']);
+            </scilab:image>
+        </para>
+        <programlisting role="example"><![CDATA[
+s = %s;
+G = (10*(s+3))/(s*(s+2)*(s^2+s+2)); // A rational matrix
+sys = syslin('c', G); // A continuous-time linear system in transfer matrix representation.
+f_min = .0001; f_max = 16; // Frequencies in Hz
+
+clf(); bode(sys, f_min, f_max, "rad"); // Converts Hz to rad/s
+ ]]></programlisting>
+        <para>
+            <scilab:image localized="true">
+                s = %s;
+                G = (10*(s+3))/(s*(s+2)*(s^2+s+2)); // A rational matrix
+                sys = syslin('c', G); // A continuous-time linear system in transfer matrix representation.
+                f_min = .0001; f_max = 16; // Frequencies in Hz
+                clf(); bode(sys, f_min, f_max, "rad"); // Converts Hz to rad/s
             </scilab:image>
         </para>
     </refsection>
@@ -174,6 +199,9 @@ clf();bode([h1;h2],0.01,100,['h1';'h2'])
         <title>See Also</title>
         <simplelist type="inline">
             <member>
+                <link linkend="bode_asymp">bode_asymp</link>
+            </member>
+            <member>
                 <link linkend="black">black</link>
             </member>
             <member>
diff --git a/scilab/modules/cacsd/help/en_US/plot_display/bode_asymp.xml b/scilab/modules/cacsd/help/en_US/plot_display/bode_asymp.xml
new file mode 100644 (file)
index 0000000..49a9b98
--- /dev/null
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+ * Copyright (C) 09/2013 - A. Khorshidi
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ -->
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"  xml:id="bode_asymp" xml:lang="en">
+    <refnamediv>
+        <refname>bode_asymp</refname>
+        <refpurpose>Bode plot asymptote</refpurpose>
+    </refnamediv>
+    <refsynopsisdiv>
+        <title>Calling Sequence</title>
+        <synopsis>
+            bode_asymp(sl, [wmin, wmax])
+        </synopsis>
+    </refsynopsisdiv>
+    <refsection>
+        <title>Arguments</title>
+        <variablelist>
+            <varlistentry>
+                <term>sl</term>
+                <listitem>
+                    <para>
+                        <literal>syslin</literal> list (SISO or SIMO linear system)
+                        in continuous time (type state-space or rational).
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>wmin, wmax</term>
+                <listitem>
+                    <para>Real scalars: lower and upper frequency bounds (in rad/s).</para>
+                </listitem>
+            </varlistentry>
+        </variablelist>
+    </refsection>
+    <refsection>
+        <title>Description</title>
+        <para>Plots the asymptote of the system
+            <literal>sl</literal>.
+        </para>
+        <para>
+            The optional arguments <literal>wmin</literal> and <literal>wmax</literal> (in rad/s) can be used to plot asymptote in a specific range of frequency.
+        </para>
+        <para>
+            <note>
+                Note that the function <code>bode()</code> or <code>gainplot()</code> must be called before <code>bode_asymp()</code>.
+            </note>
+        </para>
+        <para>
+            <warning>
+                Warning: this function is not applicable when the first input argument is a real matrix.
+            </warning>
+        </para>
+    </refsection>
+    <refsection>
+        <title>Examples</title>
+        <programlisting role="example"><![CDATA[
+s = poly(0, "s");
+h = syslin("c", (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+
+clf(); bode(h, 0.01, 100); bode_asymp(h);
+ ]]></programlisting>
+        <para>
+            <scilab:image localized="true">
+                s = poly(0, "s");
+                h = syslin("c", (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+                clf(); bode(h, 0.01, 100); bode_asymp(h);
+            </scilab:image>
+        </para>
+        <programlisting role="example"><![CDATA[
+s = poly(0, "s");
+h1 = syslin("c", (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+h2 = syslin("c", (10*(s+3))/(s*(s+2)*(s^2+s+2)));
+
+clf(); bode([h1; h2], 0.01, 100, ["h1"; "h2"]); bode_asymp([h1; h2]);
+ ]]></programlisting>
+        <para>
+            <scilab:image localized="true">
+                s = poly(0, "s");
+                h1 = syslin("c", (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+                h2 = syslin("c", (10*(s+3))/(s*(s+2)*(s^2+s+2)));
+                clf(); bode([h1; h2], 0.01, 100, ["h1"; "h2"]); bode_asymp([h1; h2]);
+            </scilab:image>
+        </para>
+        <programlisting role="example"><![CDATA[
+s = %s;
+G = (s+10)/(s*(s+100)); // A rational matrix
+sys = syslin("c", G); // A continuous-time linear system in transfer matrix representation.
+f_min = .0001; f_max = 1600; // Frequencies in Hz
+
+clf(); bode(sys, f_min, f_max, "rad"); // The optional argument "rad" converts Hz to rad/s
+bode_asymp(sys, 10, 1000); // Plots asymptotes in the given range of frequency (in rad/s).
+ ]]></programlisting>
+        <para>
+            <scilab:image localized="true">
+                s = %s;
+                G = (s+10)/(s*(s+100));
+                sys = syslin("c", G);
+                f_min = .0001; f_max = 1600;
+                clf(); bode(sys, f_min, f_max, "rad");
+                bode_asymp(sys, 10, 1000);
+            </scilab:image>
+        </para>
+        <programlisting role="example"><![CDATA[
+s = poly(0, "s");
+h = syslin("c", (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+h = tf2ss(h);
+
+clf();
+gainplot(h, 0.01, 100, "$\frac{s^2+18 s+100}{s^2+6.06 s+102.1}$"); // Frequencies in Hertz
+bode_asymp(h)
+ ]]></programlisting>
+        <para>
+            <scilab:image localized="true">
+                s = poly(0,"s");
+                h = syslin("c",(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+                h = tf2ss(h);
+                clf();
+                gainplot(h, 0.01, 100, "$\frac{s^2+18 s+100}{s^2+6.06 s+102.1}$");
+                bode_asymp(h)
+            </scilab:image>
+        </para>
+    </refsection>
+    <refsection role="see also">
+        <title>See Also</title>
+        <simplelist type="inline">
+            <member>
+                <link linkend="bode">bode</link>
+            </member>
+            <member>
+                <link linkend="black">black</link>
+            </member>
+            <member>
+                <link linkend="nyquist">nyquist</link>
+            </member>
+            <member>
+                <link linkend="gainplot">gainplot</link>
+            </member>
+            <member>
+                <link linkend="repfreq">repfreq</link>
+            </member>
+            <member>
+                <link linkend="g_margin">g_margin</link>
+            </member>
+            <member>
+                <link linkend="p_margin">p_margin</link>
+            </member>
+            <member>
+                <link linkend="calfrq">calfrq</link>
+            </member>
+            <member>
+                <link linkend="phasemag">phasemag</link>
+            </member>
+            <member>
+                <link linkend="datatips">datatips</link>
+            </member>
+            <member>
+                <link linkend="show_margins">show_margins</link>
+            </member>
+        </simplelist>
+    </refsection>
+    <refsection>
+        <title>History</title>
+        <revhistory>
+            <revision>
+                <revnumber>5.5.0</revnumber>
+                <revremark>bode_asymp() function introduced.</revremark>
+            </revision>
+        </revhistory>
+    </refsection>
+</refentry>
diff --git a/scilab/modules/cacsd/help/fr_FR/plot_display/bode_asymp.xml b/scilab/modules/cacsd/help/fr_FR/plot_display/bode_asymp.xml
new file mode 100644 (file)
index 0000000..96aed4f
--- /dev/null
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+ * Copyright (C) 09/2013 - A. Khorshidi
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ -->
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"  xml:id="bode_asymp" xml:lang="fr">
+    <refnamediv>
+        <refname>bode_asymp</refname>
+        <refpurpose>asymptote de diagramme de Bode</refpurpose>
+    </refnamediv>
+    <refsynopsisdiv>
+        <title>Séquence d'appel</title>
+        <synopsis>
+            bode_asymp(sl, [wmin, wmax])
+        </synopsis>
+    </refsynopsisdiv>
+    <refsection>
+        <title>Paramètres</title>
+        <variablelist>
+            <varlistentry>
+                <term>sl</term>
+                <listitem>
+                    <para>
+                        <literal>syslin</literal> list (SISO ou SIMO système linéaire)
+                        en temps continu ou discret (type state-space ou rational).
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>wmin, wmax</term>
+                <listitem>
+                    <para>Réels scalaires: bornes de fréquence inférieure et supérieure (en rad/s).</para>
+                </listitem>
+            </varlistentry>
+        </variablelist>
+    </refsection>
+    <refsection>
+        <title>Description</title>
+        <para>
+            Trace l'asymptote du système <literal>sl</literal>.
+        </para>
+        <para>
+            Les arguments optionnels <literal>wmin</literal> et <literal>wmax</literal> (en rad/s) peuvent être utilisés pour tracer des asymptotes dans un périmètre précis.
+        </para>
+        <para>
+            <note>
+                A noter que les fonctions <code>bode()</code> ou <code>gainplot()</code> doivent être appelées avant <code>bode_asymp()</code>.
+            </note>
+        </para>
+        <para>
+            <warning>
+                Attention: cette fonction n'est pas applicable quand le premier argument est une matrice de réels.
+            </warning>
+        </para>
+    </refsection>
+    <refsection>
+        <title>Exemples</title>
+        <programlisting role="example"><![CDATA[
+s = poly(0, 's');
+h = syslin('c', (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+
+clf(); bode(h, 0.01, 100); bode_asymp(h);
+ ]]></programlisting>
+        <para>
+            <scilab:image localized="true">
+                s = poly(0, 's');
+                h = syslin('c', (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+                clf(); bode(h, 0.01, 100); bode_asymp(h);
+            </scilab:image>
+        </para>
+        <programlisting role="example"><![CDATA[
+s = poly(0, 's');
+h1 = syslin('c', (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+h2 = syslin("c", (10*(s+3))/(s*(s+2)*(s^2+s+2)));
+
+clf(); bode([h1; h2], 0.01, 100, ["h1"; "h2"]); bode_asymp([h1; h2]);
+ ]]></programlisting>
+        <para>
+            <scilab:image localized="true">
+                s = poly(0, 's');
+                h1 = syslin('c', (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+                h2 = syslin("c", (10*(s+3))/(s*(s+2)*(s^2+s+2)));
+                clf(); bode([h1; h2], 0.01, 100, ["h1"; "h2"]); bode_asymp([h1; h2]);
+            </scilab:image>
+        </para>
+        <programlisting role="example"><![CDATA[
+s = %s;
+G = (s+10)/(s*(s+100)); // Une matrice de rational
+sys = syslin("c", G); // Un système linéaire en temps continu, représentation en matrice de transfert
+f_min = .0001; f_max = 1600; // Fréquences in Hz
+
+clf(); bode(sys, f_min, f_max, "rad"); // L'argument "rad" convertit les Hz en rad/s
+bode_asymp(sys, 10, 1000); // Trace les asymptotes dans le périmètre de fréquence donné (en rad/s)
+ ]]></programlisting>
+        <para>
+            <scilab:image localized="true">
+                s = %s;
+                G = (s+10)/(s*(s+100));
+                sys = syslin("c", G);
+                f_min = .0001; f_max = 1600;
+                clf(); bode(sys, f_min, f_max, "rad");
+                bode_asymp(sys, 10, 1000);
+            </scilab:image>
+        </para>
+        <programlisting role="example"><![CDATA[
+s = poly(0, "s");
+h = syslin("c", (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+h = tf2ss(h);
+
+clf();
+gainplot(h, 0.01, 100, "$\frac{s^2+18 s+100}{s^2+6.06 s+102.1}$"); // Fréquences in Hertz
+bode_asymp(h)
+ ]]></programlisting>
+        <para>
+            <scilab:image localized="true">
+                s = poly(0,"s");
+                h = syslin("c",(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+                h = tf2ss(h);
+                clf();
+                gainplot(h, 0.01, 100, "$\frac{s^2+18 s+100}{s^2+6.06 s+102.1}$");
+                bode_asymp(h)
+            </scilab:image>
+        </para>
+    </refsection>
+    <refsection role="see also">
+        <title>Voir Aussi</title>
+        <simplelist type="inline">
+            <member>
+                <link linkend="bode">bode</link>
+            </member>
+            <member>
+                <link linkend="black">black</link>
+            </member>
+            <member>
+                <link linkend="nyquist">nyquist</link>
+            </member>
+            <member>
+                <link linkend="gainplot">gainplot</link>
+            </member>
+            <member>
+                <link linkend="repfreq">repfreq</link>
+            </member>
+            <member>
+                <link linkend="g_margin">g_margin</link>
+            </member>
+            <member>
+                <link linkend="p_margin">p_margin</link>
+            </member>
+            <member>
+                <link linkend="calfrq">calfrq</link>
+            </member>
+            <member>
+                <link linkend="phasemag">phasemag</link>
+            </member>
+            <member>
+                <link linkend="datatips">datatips</link>
+            </member>
+            <member>
+                <link linkend="show_margins">show_margins</link>
+            </member>
+        </simplelist>
+    </refsection>
+    <refsection>
+        <title>Historique</title>
+        <revhistory>
+            <revision>
+                <revnumber>5.5.0</revnumber>
+                <revremark>Fonction bode_asymp() introduite.</revremark>
+            </revision>
+        </revhistory>
+    </refsection>
+</refentry>
index 2f6470a..df982e5 100644 (file)
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
-function []=bode(varargin)
-    rhs=size(varargin)
+function [] = bode(varargin)
+    rhs = size(varargin)
 
     if rhs == 0 then
-        s=poly(0,"s")
-        h1=syslin("c",(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01))
-        num=22801+4406.18*s+382.37*s^2+21.02*s^3+s^4;
-        den=22952.25+4117.77*s+490.63*s^2+33.06*s^3+s^4
-        h2=syslin("c",num/den);
+        s = poly(0, "s");
+        h1 = syslin("c", (s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
+        num = 22801+4406.18*s+382.37*s^2+21.02*s^3+s^4;
+        den = 22952.25+4117.77*s+490.63*s^2+33.06*s^3+s^4;
+        h2 = syslin("c", num/den);
 
-        bode([h1;h2],0.01,100,["h1";"h2"])
+        bode([h1; h2], 0.01, 100, ["h1"; "h2"]);
         return;
     end
 
-    if type(varargin($))==10 then
-        comments=varargin($),rhs=rhs-1;
+    rad = %f;
+    if type(varargin($)) == 10 then
+        if varargin($) == "rad" then
+            rad = %t;
+            rhs = rhs-1;
+            if type(varargin($-1)) == 10 then
+                comments = varargin($-1);
+                rhs = rhs-1;
+            else
+                comments = [];
+            end
+        else
+            comments = varargin($);
+            rhs = rhs-1;
+        end
     else
-        comments=[];
+        comments = [];
     end
-    fname="bode";//for error messages
-    fmax=[]
-    discr=%f //for shannon limit
-    if or(typeof(varargin(1))==["state-space" "rational"]) then
-        //sys,fmin,fmax [,pas] or sys,frq
-        refdim=1 //for error message
-        discr=varargin(1).dt<>"c";
-        if rhs==1 then //sys
-            [frq,repf]=repfreq(varargin(1),1d-3,1d3)
-        elseif rhs==2 then //sys,frq
-            if size(varargin(2),2)<2 then
-                error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"),..
-                fname,2,1))
+    fname = "bode"; // For error messages
+    fmax = [];
+    discr = %f; // For Shannon limit
+    if or(typeof(varargin(1)) == ["state-space" "rational"]) then
+        // sys, fmin, fmax [,pas] or sys, frq
+        refdim = 1; // for error message
+        discr = varargin(1).dt<>"c";
+        if rhs == 1 then // sys
+            [frq, repf] = repfreq(varargin(1), 1d-3, 1d3);
+        elseif rhs == 2 then // sys, frq
+            if size(varargin(2), 2) < 2 then
+                error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"), ..
+                fname, 2, 1))
             end
-            [frq,repf]=repfreq(varargin(1:rhs))
-        elseif or(rhs==(3:4)) then //sys,fmin,fmax [,pas]
-            [frq,repf]=repfreq(varargin(1:rhs))
+            [frq, repf] = repfreq(varargin(1:rhs));
+        elseif or(rhs == (3:4)) then // sys, fmin, fmax [,pas]
+            [frq, repf] = repfreq(varargin(1:rhs));
         else
-            error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"),fname,1,5))
+            error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"), fname, 1, 5))
         end
-        [phi,d]=phasemag(repf)
-        if rhs>=3 then fmax=varargin(3),end
-    elseif  type(varargin(1))==1 then
-        //frq,db,phi [,comments] or frq, repf [,comments]
-        refdim=2
+        [phi, d] = phasemag(repf);
+        if rhs >= 3 then fmax = varargin(3); end
+    elseif type(varargin(1)) == 1 then
+        // frq, db, phi [,comments] or frq, repf [,comments]
+        refdim = 2;
         select rhs
-        case 2 then //frq,repf
-            frq=varargin(1);
-            if size(frq,2)<2 then
-                error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"),..
-                fname,1,1))
+        case 2 then // frq,repf
+            frq = varargin(1);
+            if size(frq, 2) < 2 then
+                error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"), ..
+                fname, 1, 1))
             end
-            if size(frq,2)<>size(varargin(2),2) then
-                error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),..
-                fname,1,2))
+            if size(frq, 2) <> size(varargin(2), 2) then
+                error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"), ..
+                fname, 1, 2))
             end
-            [phi,d]=phasemag(varargin(2))
-        case 3 then  //frq,db,phi
-            [frq,d,phi]=varargin(1:rhs)
-            if size(frq,2)<>size(d,2) then
-                error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),..
-                fname,1,2))
+            [phi, d] = phasemag(varargin(2));
+        case 3 then  // frq, db, phi
+            [frq, d, phi] = varargin(1:rhs);
+            if size(frq, 2) <> size(d, 2) then
+                error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"), ..
+                fname, 1, 2))
             end
-            if size(frq,2)<>size(phi,2) then
-                error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),..
-                fname,1,3))
+            if size(frq, 2) <> size(phi, 2) then
+                error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"), ..
+                fname, 1, 3))
             end
         else
-            error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"),fname,2,4))
+            error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"), fname, 2, 4))
         end
     else
         error(msprintf(_("%s: Wrong type for input argument #%d: Linear dynamical system or row vector of floats expected.\n"),fname,1))
-    end;
-    frq=frq';d=d',phi=phi'
-    [n,mn]=size(d)
+    end
+    frq = frq';
+    d = d';
+    phi = phi';
+    [n, mn] = size(d);
 
-    if comments==[] then
-        hx=0.48
+    if comments == [] then
+        hx = 0.48;
     else
-        if size(comments,"*")<>mn then
-            error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same number of elements expected.\n"),...
-            fname,refdim,rhs+1))
+        if size(comments, "*") <> mn then
+            error(mprintf(_("%s: Incompatible input arguments #%d and #%d: Same number of elements expected.\n"), ...
+            fname, refdim, rhs+1))
         end
-        hx=0.43
-    end;
+        hx = 0.43;
+    end
 
-    fig=gcf();
-    immediate_drawing=fig.immediate_drawing;
-    fig.immediate_drawing="off";
+    fig = gcf();
+    immediate_drawing = fig.immediate_drawing;
+    fig.immediate_drawing = "off";
 
-    sciCurAxes=gca();
-    axes=sciCurAxes;
-    wrect=axes.axes_bounds;
+    sciCurAxes = gca();
+    axes = sciCurAxes;
+    wrect = axes.axes_bounds;
 
 
-    //magnitude
-    axes.axes_bounds=[wrect(1)+0,wrect(2)+0,wrect(3)*1.0,wrect(4)*hx*0.95]
-    axes.data_bounds = [min(frq),min(d);max(frq),max(d)];
-    axes.log_flags = "lnn" ;
-    axes.grid=color("lightgrey")*ones(1,3);
-    axes.axes_visible="on";
+    // Magnitude
+    axes.axes_bounds = [wrect(1)+0, wrect(2)+0, wrect(3)*1.0, wrect(4)*hx*0.95];
+    axes.data_bounds = [min(frq), min(d); max(frq), max(d)];
+    axes.log_flags = "lnn";
+    axes.grid = color("lightgrey")*ones(1, 3);
+    axes.axes_visible = "on";
     axes.clip_state = "clipgrf";
-    if size(d,2)>1&size(frq,2)==1 then
-        xpolys(frq(:,ones(1,mn)),d,1:mn)
+    if size(d, 2) > 1 & size(frq, 2) == 1 then
+        xpolys(frq(:, ones(1, mn)), d, 1:mn);
     else
-        xpolys(frq,d,1:mn)
+        xpolys(frq, d, 1:mn);
     end
-    //set datatips info
-    e=gce();
+    // Set datatips info
+    e = gce();
 
-    for i=1:size(e.children,"*")
-        datatipInitStruct(e.children(i),"formatfunction","formatBodeMagTip")
+    for i=1:size(e.children, "*")
+        datatipInitStruct(e.children(i), "formatfunction", "formatBodeMagTip");
     end
 
-    if discr&fmax<>[]&max(frq)<fmax then
-        xpoly(max(frq)*[1;1],axes.y_ticks.locations([1 $]));e=gce();
-        e.foreground=5;
+    if discr & fmax <> [] & max(frq) < fmax then
+        xpoly(max(frq)*[1; 1], axes.y_ticks.locations([1 $]));
+        e = gce();
+        e.foreground = 5;
     end
-    xtitle("",_("Frequency (Hz)"),_("Magnitude (dB)"));
-
-    //phase
-
-    axes=newaxes();
-    axes.axes_bounds=[wrect(1)+0,wrect(2)+wrect(4)*hx,wrect(3)*1.0,wrect(4)*hx*0.95];
-    axes.data_bounds = [min(frq),min(phi);max(frq),max(phi)];
-    axes.log_flags = "lnn" ;
-    axes.grid=color("lightgrey")*ones(1,3);
-    axes.axes_visible="on";
+    xtitle("", _("Frequency (Hz)"), _("Magnitude (dB)"));
+
+    // Phase
+    axes = newaxes();
+    axes.axes_bounds = [wrect(1)+0, wrect(2)+wrect(4)*hx, wrect(3)*1.0, wrect(4)*hx*0.95];
+    axes.data_bounds = [min(frq), min(phi); max(frq), max(phi)];
+    axes.log_flags = "lnn";
+    axes.grid = color("lightgrey")*ones(1, 3);
+    axes.axes_visible = "on";
     axes.clip_state = "clipgrf";
-    if size(phi,2)>1&size(frq,2)==1 then
-        xpolys(frq(:,ones(1,mn)),phi,1:mn)
+    if size(phi, 2) > 1 & size(frq, 2) == 1 then
+        xpolys(frq(:, ones(1, mn)), phi, 1:mn);
     else
-        xpolys(frq,phi,1:mn)
+        xpolys(frq, phi, 1:mn);
     end
-    ephi=gce()
-    //set datatips info
-    for i=1:size(ephi.children,"*")
-        datatipInitStruct(ephi.children(i),"formatfunction","formatBodePhaseTip")
+    ephi = gce();
+    // Set datatips info
+    for i=1:size(ephi.children, "*")
+        datatipInitStruct(ephi.children(i), "formatfunction", "formatBodePhaseTip");
     end
 
-    if discr&fmax<>[]&max(frq)<fmax then
-        xpoly(max(frq)*[1;1],axes.y_ticks.locations([1 $]));e=gce();
-        e.foreground=5;
+    if discr & fmax <> [] & max(frq) < fmax then
+        xpoly(max(frq)*[1; 1], axes.y_ticks.locations([1 $]));
+        e = gce();
+        e.foreground = 5;
     end
-    xtitle("",_("Frequency (Hz)"),_("Phase (degree)"));
-    // create legend
-    if comments<>[] then
-        c=captions(ephi.children,comments,"lower_caption")
-        c.background=get(gcf(),"background")
+    xtitle("", _("Frequency (Hz)"), _("Phase (degree)"));
+    // Create legend
+    if comments <> [] then
+        c = captions(ephi.children, comments, "lower_caption");
+        c.background = get(gcf(), "background");
     end
-    fig.immediate_drawing=immediate_drawing;
-    // return to the previous scale
-    set( "current_axes", sciCurAxes ) ;
+    fig.immediate_drawing = immediate_drawing;
+    // Return to the previous scale
+    set("current_axes", sciCurAxes);
 
+    if rad == %t then
+        bode_Hz2rad_2(fig);
+    end
+
+endfunction
+
+function str = formatBodeMagTip(curve, pt, index)
+    // This function is called by the datatips mechanism to format the tip
+    // string for the magnitude bode curves
+    str = msprintf("%.4g"+_("Hz")+"\n%.4g"+_("dB"), pt(1), pt(2));
 endfunction
 
-function str=formatBodeMagTip(curve,pt,index)
-    //this function is called by the datatips mechanism to format the tip
-    //string for the magnitude bode curves
-    str=msprintf("%.4g"+_("Hz")+"\n%.4g"+_("dB"), pt(1),pt(2))
+function str = formatBodePhaseTip(curve, pt, index)
+    // This function is called by the datatip mechanism to format the tip
+    // string for the bode phase curves
+    str = msprintf("%.4g"+_("Hz")+"\n %.4g"+"°", pt(1), pt(2));
 endfunction
 
-function str=formatBodePhaseTip(curve,pt,index)
-    //this function is called by the datatip mechanism to format the tip
-    //string for the bode phase curves
-    str=msprintf("%.4g"+_("Hz")+"\n %.4g"+"°", pt(1),pt(2))
+function [] = bode_Hz2rad_2(h)
+    // This function modifies the Bode diagrams for a rad/s display instead of Hz.
+    // h is a hanlde of a figure containing Bode diagrams.
+    // Ref: http://forge.scilab.org/index.php/p/cpge/source/tree/HEAD/macros/bode_Hz2rad_2.sci
+
+    // k = 1 phase, k = 2 gain
+    labels = ["Phase (degree)"; "Magnitude (dB)"];
+    pos_h = [9, 5];
+    for k=1:2
+        for i=1:size(h.children(k).children, 1)
+            if h.children(k).children(i).type == "Compound"
+                for j=1:size(h.children(k).children(i).children, 1)
+                    h.children(k).children(i).children(j).data(:, 1) = h.children(k).children(i).children(j).data(:, 1)*2*%pi;
+                end
+
+                // h.children(k).title.text = h.children(k).y_label.text;
+                xmin1 = h.children(k).data_bounds(1)*2*%pi;
+                xmax1 = h.children(k).data_bounds(2)*2*%pi;
+                ymin1 = h.children(k).data_bounds(3);
+                ymax1 = h.children(k).data_bounds(4);
+
+                rect = [xmin1, ymin1, xmax1, ymax1];
+                nb_dec = log(xmax1/xmin1)/log(10);
+                h.children(k).x_label.text = "Frequency (rad/s)";
+                h.children(k).x_location = "bottom";
+                h.children(k).y_label.text = labels(k);
+                replot(rect, h.children(k));
+            end
+        end
+    end
 endfunction
diff --git a/scilab/modules/cacsd/macros/bode_asymp.sci b/scilab/modules/cacsd/macros/bode_asymp.sci
new file mode 100644 (file)
index 0000000..b42e7c4
--- /dev/null
@@ -0,0 +1,189 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+// Copyright (C) 09/2013 - A. Khorshidi
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+function [] = bode_asymp(sl, w_min, w_max)
+    // Calling sequence:
+    //     syntax: bode_asymp(sl, [w_min, w_max])
+    // Arguments:
+    //     sl: a linear system given by its transfer function representation or state-space form and defined by syslin.
+    //    w_min, w_max: lower and upper frequency bounds (in rad/s)
+    // Description:
+    //     This function plots asymptotes for the magnitude and phase graphs.
+    // Examples:
+    //     s = %s; h = syslin("c", 1/(s+1)); scf(10001); bode(h); bode_asymp(h)
+    //     s = %s; h = syslin("c", 1/(s+1)); scf(10002); gainplot(h); bode_asymp(h)
+    // Ref:
+    //     http://forge.scilab.org/index.php/p/cpge/source/tree/HEAD/macros/REP_FREQ_pre_simulate.sci
+
+    rhs = argn(2);
+
+    if and(typeof(sl) <> ["state-space" "rational"]) then
+        msg = _("Wrong type for argument #%d: Rational or State-space matrix expected.\n");
+        error(msprintf(msg, 1))
+        return;
+    end
+
+    typeSL = typeof(sl);
+
+    for elem=1:size(sl, "r") // Individually draw each asymptote of "sl" elements (row vector).
+        if typeSL == "rational" then
+            h = sl(elem, 1);
+        else
+            h = clean(ss2tf(sl(elem, 1)), 1e-8);
+            // Also removing all the coefficients smaller than < 1e-8
+        end
+
+        root_num = roots(h.num);
+        root_den = roots(h.den);
+
+        if (find(root_num==0))
+            disp("Problem class of system is negative")
+        end
+        rac_nul = find(root_den==0);
+        alpha = length(rac_nul);
+        var = "s";
+        domain = h.dt;
+        if type(domain) == 1 then
+            var = "z";
+        elseif domain == "c" then
+            var = "s";
+        elseif domain == "d" then
+            var = "z";
+        end
+        if domain == [] then
+            var = "s";
+            if type(h.D) == 2 then
+                var = varn(h.D);
+            end
+        end
+        s = poly(0, var);
+        msg = _("%s: Problem evaluating the first argument.\nn")
+        try K = horner(h*s^alpha, 0); catch error(msprintf(msg, "bode_asymp")); end
+
+        root_den(rac_nul) = []; // Removing the zeros
+
+        if length([find(abs(root_num)>1e8) find(abs(root_num)<1e-8)]) > 0 then
+            disp("Extreme root removed: "+string(root_num([find(abs(root_num)>1e8) find(abs(root_num)<1e-8)])'))
+            root_num([find(abs(root_num)>1e8) find(abs(root_num)<1e-8)]) = [];
+        end
+        if length([find(abs(root_den)>1e8) find(abs(root_den)<1e-8)]) > 0 then
+            disp("Extreme root removed: "+string(root_den([find(abs(root_den)>1e8) find(abs(root_den)<1e-8)])'))
+            root_den([find(abs(root_den)>1e8) find(abs(root_den)<1e-8)]) = [];
+        end
+
+        i = 1;
+        puls = [];
+        order = [];
+        while i<=length(root_num) // Real root
+            if isreal(root_num(i), 0) then
+                puls = [puls -root_num(i)];
+                order = [order 1];
+                i = i+1;
+            else // Complex root
+                xi = 1/sqrt(1+(imag(root_num(i))/real(root_num(i)))^2);
+                puls = [puls -real(root_num(i))/xi];
+                i = i+2;
+                order = [order 2];
+            end
+        end
+        i = 1;
+        while i<=length(root_den) // Real root
+            if isreal(root_den(i), 0) then
+                puls = [puls -root_den(i)];
+                order = [order -1];
+                i = i+1;
+            else // Complex root
+                xi = 1/sqrt(1+(imag(root_den(i))/real(root_den(i)))^2);
+                puls = [puls -real(root_den(i))/xi];
+                order = [order -2];
+                i = i+2;
+            end
+        end
+
+        [puls, ind] = gsort(puls, "g", "i");
+        order = order(ind);
+
+        asym = [-20*alpha];
+        phas = [-90*alpha];
+        i = 1;
+        while i<=length(puls)
+            new_dir = asym($)+order(i)*20;
+            asym = [asym new_dir];
+            new_arg = phas($)+order(i)*90;
+            phas = [phas new_arg];
+            i = i+1;
+        end
+
+        // bode(h, w_min, w_max)
+        fig = gcf();
+        try sca(fig.children(1)); catch
+            msg = _("ERROR: %s: bode() or gainplot() must be called before bode_asymp() and graphic window must still be running.\n");
+            error(msprintf(msg, "bode_asymp"))
+        end
+
+        if length(fig.children) == 1 then
+            flag = 1;
+        else
+            flag = 0;
+        end
+
+        if rhs == 1 then
+            wmin = fig.children(1).data_bounds(1, 1); // Minimal frequence, w_min
+            wmax = fig.children(1).data_bounds(2, 1); // Maximal frequence, w_max
+        else
+            wmin = w_min;
+            wmax = w_max;
+        end
+        puls_to_plot = [];
+
+        for p=real(puls)
+            if p >= wmin & p <= wmax then
+                puls_to_plot($+1) = p;
+            end
+        end
+        puls = [wmin puls_to_plot' wmax];
+        // End change DV
+
+        eq_asymp = [20*log10(K/wmin^alpha)];
+        puls_p = [];
+        phas($+1) = phas($);
+        eq_phas = [phas(1)];
+        i = 2;
+        while i<=length(puls)
+            eq_asymp = [eq_asymp eq_asymp($)+asym(i-1)*log10(puls(i)/puls(i-1))];
+            puls_p = [puls_p puls(i-1) puls(i)];
+            eq_phas = [eq_phas phas(i-1) phas(i)];
+            i = i+1;
+        end
+
+        // Adapt abscissae to current unit (Hertz or rad/s)
+        if fig.children(1).x_label.text == "Frequency (Hz)" then
+            puls   = puls./(2*%pi);
+            puls_p = puls_p./(2*%pi);
+        end
+
+        // Change the color of asymptote:
+        color_asymp  = ["b--", "g--", "c--", "m--", "r--"];
+        rep = modulo(elem, 5); // This line will be useful if the number of systems is more than five.
+        if rep == 0 then
+            rep = 1;
+        end
+
+        if flag == 0 then
+            plot(puls_p, eq_phas(1:$-1), color_asymp($-rep));
+            sca(fig.children(2));
+            plot(puls, eq_asymp, color_asymp(rep));
+        elseif flag == 1 then
+            plot(puls, eq_asymp, color_asymp(rep));
+            fig.children.title.text = "Gainplot";
+        end
+    end
+
+endfunction
index eb9ffb2..e0c1eff 100644 (file)
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
+//
 // <-- TEST WITH GRAPHIC -->
+//
 // <-- ENGLISH IMPOSED -->
+//
 function r=checkbode(h,leg)
-  fig=gcf();
-  r=%t
-  ap=fig.children(1);
-  am=fig.children(2);
-  if am.log_flags<>'lnn' then r=%f;return,end
-  if or(am.axes_visible<>["on","on","on"]) then r=%f;return,end
-  if ap.log_flags<>'lnn' then  r=%f;return,end
-  if or(ap.axes_visible<>["on","on","on"]) then r=%f;return,end
-  n=size(am.children($).children,'*')
-  if n<>size(h,1) then bugmes();quit;end
-  for k=1:n;
-    pm=am.children($).children(n+1-k);
-    pp=ap.children($).children(n+1-k);
-    if or(pm.data(:,1)<>pp.data(:,1)) then ;r=%f;return,end
-    [frq,rf]=repfreq(h(k,1),pm.data(:,1));[phi,d]=phasemag(rf);
-    if norm(d(:)-pm.data(:,2))> 1d-15 then r=%f;return,end
-  end
-  if argn(2)==2 then 
-    if size(ap.children,'*')<2 then r=%f;return,end
-    if ap.children(1).type<>'Legend' then r=%f;return,end
-    if size(ap.children(1).links,'*')<>n then r=%f;return,end
-    if or(ap.children(1).text<>leg(:)) then r=%f;return,end
-  end
+    fig=gcf();
+    r=%t;
+    ap=fig.children(1);
+    am=fig.children(2);
+    if am.log_flags<>"lnn" then r=%f;return,end
+    if or(am.axes_visible<>["on","on","on"]) then r=%f;return,end
+    if ap.log_flags<>"lnn" then  r=%f;return,end
+    if or(ap.axes_visible<>["on","on","on"]) then r=%f;return,end
+    n=size(am.children($).children,"*");
+    if n<>size(h,1) then bugmes();quit;end
+    for k=1:n;
+        pm=am.children($).children(n+1-k);
+        pp=ap.children($).children(n+1-k);
+        if or(pm.data(:,1)<>pp.data(:,1)) then ;r=%f;return,end
+        [frq,rf]=repfreq(h(k,1),pm.data(:,1));[phi,d]=phasemag(rf);
+        if norm(d(:)-pm.data(:,2))> 1d-15 then r=%f;return,end
+    end
+    if argn(2)==2 then
+        if size(ap.children,"*")<2 then r=%f;return,end
+        if ap.children(1).type<>"Legend" then r=%f;return,end
+        if size(ap.children(1).links,"*")<>n then r=%f;return,end
+        if or(ap.children(1).text<>leg(:)) then r=%f;return,end
+    end
 endfunction
-s=poly(0,'s')
- s  =
-    s   
+s=poly(0,"s");
 n=1+s;d=1+2*s;
-h=syslin('c',n,d)
- h  =
-    1 + s    
-    -----    
-    1 + 2s   
+h=syslin("c",n,d);
 sl=tf2ss(h);
 sld=dscr(sl,0.01);
 hd=ss2tf(sld);
 [w,rf]=repfreq(h,0.01,100);
-//continuous time
+// Continuous time
 clf();bode(h);
 if ~checkbode(h) then bugmes();quit;end
-clf();bode(h,'h');
-if ~checkbode(h,'h') then bugmes();quit;end
+clf();bode(h,"h");
+if ~checkbode(h,"h") then bugmes();quit;end
 clf();bode(h,0.01,100);
 if ~checkbode(h) then bugmes();quit;end
-clf();bode(h,0.01,100,'h');
-if ~checkbode(h,'h') then bugmes();quit;end
-clf();bode(h,0.01,100,0.01)
+clf();bode(h,0.01,100,"h");
+if ~checkbode(h,"h") then bugmes();quit;end
+clf();bode(h,0.01,100,0.01);
 if ~checkbode(h) then bugmes();quit;end
 clf();bode(sl,0.01,100);
 if ~checkbode(sl) then bugmes();quit;end
-clf();bode(sl,0.01,100,0.01)
-//continuous time SIMO
+clf();bode(sl,0.01,100,0.01);
+// Continuous time SIMO
 h=[h;h+1];sl=[sl;sl+1];
 clf();bode(h);
 if ~checkbode(h) then bugmes();quit;end
-clf();bode(h,['h';'h+1']);
-if ~checkbode(h,['h';'h+1']) then bugmes();quit;end
+clf();bode(h,["h";"h+1"]);
+if ~checkbode(h,["h";"h+1"]) then bugmes();quit;end
 clf();bode(h,0.01,100);
 if ~checkbode(h) then bugmes();quit;end
-clf();bode(h,0.01,100,['h';'h+1']);
-if ~checkbode(h,['h';'h+1']) then bugmes();quit;end
-clf();bode(h,0.01,100,0.01)
+clf();bode(h,0.01,100,["h";"h+1"]);
+if ~checkbode(h,["h";"h+1"]) then bugmes();quit;end
+clf();bode(h,0.01,100,0.01);
 if ~checkbode(h) then bugmes();quit;end
 clf();bode(sl,0.01,100);
 if ~checkbode(sl) then bugmes();quit;end
-clf();bode(sl,0.01,100,0.01)
-//discrete case
+clf();bode(sl,0.01,100,0.01);
+// Discrete case
 clf();bode(hd);
 WARNING: calfrq: Frequencies beyond Nyquist frequency are ignored.
 if ~checkbode(hd) then bugmes();quit;end
-clf();bode(hd,'h');
+clf();bode(hd,"h");
 WARNING: calfrq: Frequencies beyond Nyquist frequency are ignored.
-if ~checkbode(hd,'h') then bugmes();quit;end
+if ~checkbode(hd,"h") then bugmes();quit;end
 clf();bode(hd,0.01,100);
 WARNING: calfrq: Frequencies beyond Nyquist frequency are ignored.
 if ~checkbode(hd) then bugmes();quit;end
-clf();bode(hd,0.01,100,'h');
+clf();bode(hd,0.01,100,"h");
 WARNING: calfrq: Frequencies beyond Nyquist frequency are ignored.
-if ~checkbode(hd,'h') then bugmes();quit;end
-clf();bode(hd,0.01,100,0.01)
+if ~checkbode(hd,"h") then bugmes();quit;end
+clf();bode(hd,0.01,100,0.01);
 if ~checkbode(hd) then bugmes();quit;end
 clf();bode(sld,0.01,100);
 WARNING: calfrq: Frequencies beyond Nyquist frequency are ignored.
 if ~checkbode(sld) then bugmes();quit;end
-clf();bode(sl,0.01,100,0.01)
-//discrete case SIMO
+clf();bode(sl,0.01,100,0.01);
+// Discrete case SIMO
 hd=[hd;hd+1];sld=[sld;sld+1];
 clf();bode(hd);
 WARNING: calfrq: Frequencies beyond Nyquist frequency are ignored.
 if ~checkbode(hd) then bugmes();quit;end
-clf();bode(hd,['h';'h+1']);
+clf();bode(hd,["h";"h+1"]);
 WARNING: calfrq: Frequencies beyond Nyquist frequency are ignored.
-if ~checkbode(hd,['h';'h+1']) then bugmes();quit;end
+if ~checkbode(hd,["h";"h+1"]) then bugmes();quit;end
 clf();bode(hd,0.01,100);
 WARNING: calfrq: Frequencies beyond Nyquist frequency are ignored.
 if ~checkbode(hd) then bugmes();quit;end
-clf();bode(hd,0.01,100,['h';'h+1']);
+clf();bode(hd,0.01,100,["h";"h+1"]);
 WARNING: calfrq: Frequencies beyond Nyquist frequency are ignored.
-if ~checkbode(hd,['h';'h+1']) then bugmes();quit;end
-clf();bode(hd,0.01,100,0.01)
+if ~checkbode(hd,["h";"h+1"]) then bugmes();quit;end
+clf();bode(hd,0.01,100,0.01);
 if ~checkbode(hd) then bugmes();quit;end
 clf();bode(sld,0.01,100);
 WARNING: calfrq: Frequencies beyond Nyquist frequency are ignored.
 if ~checkbode(sld) then bugmes();quit;end
-clf();bode(sl,0.01,100,0.01)
-//bode given by precmputed freqency response
-h=syslin('c',n,d)
- h  =
-    1 + s    
-    -----    
-    1 + 2s   
+clf();bode(sl,0.01,100,0.01);
+// bode given by precomputed frequency response
+h=syslin("c",n,d);
 clf();bode(h,0.01,100);
 fig=gcf();
 dp=fig.children(1).children($).children.data;
 dm=fig.children(2).children($).children.data;
 [w,rf]=repfreq(h,0.01,100);
-clf(); bode(w,rf)
+clf(); bode(w,rf);
 fig=gcf();
 if norm(dp-fig.children(1).children($).children.data)>1d-13 then bugmes();quit;end
-if norm(dm-fig.children(2).children($).children.data)>1d-13  then bugmes();quit;end
+if norm(dm-fig.children(2).children($).children.data)>1d-13 then bugmes();quit;end
 clf(); bode(w,20*log(abs(rf))/log(10),(180/%pi)*atan(imag(rf),real(rf)))
 fig=gcf();
 if norm(dp-fig.children(1).children($).children.data)>1d-13 then bugmes();quit;end
-if norm(dm-fig.children(2).children($).children.data)>1d-13  then bugmes();quit;end
+if norm(dm-fig.children(2).children($).children.data)>1d-13 then bugmes();quit;end
+// Bode_asymp()
+s = %s;
+G = (s+10)/(s*(s+100)); // A rational matrix
+sys = syslin("c", G); // A continuous-time linear system in transfer matrix representation.
+f_min = .0001; f_max = 1600; // Frequencies in Hz
+clf(); bode(sys, f_min, f_max, "rad"); // The optional argument "rad" converts Hz to rad/s
+bode_asymp(sys, 10, 1000); // Plots asymptotes in the given range of frequency (in rad/s).
index 5e408e0..36a9417 100644 (file)
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
-
+//
 // <-- TEST WITH GRAPHIC -->
+//
 // <-- ENGLISH IMPOSED -->
+//
 
 function r=checkbode(h,leg)
-  fig=gcf();
-  r=%t
-  ap=fig.children(1);
-  am=fig.children(2);
-  if am.log_flags<>'lnn' then r=%f;return,end
-  if or(am.axes_visible<>["on","on","on"]) then r=%f;return,end
-  if ap.log_flags<>'lnn' then  r=%f;return,end
-  if or(ap.axes_visible<>["on","on","on"]) then r=%f;return,end
-
-  n=size(am.children($).children,'*')
-  if n<>size(h,1) then pause,end
-  for k=1:n;
-    pm=am.children($).children(n+1-k);
-    pp=ap.children($).children(n+1-k);
-    if or(pm.data(:,1)<>pp.data(:,1)) then ;r=%f;return,end
-    [frq,rf]=repfreq(h(k,1),pm.data(:,1));[phi,d]=phasemag(rf);
-    if norm(d(:)-pm.data(:,2))> 1d-15 then r=%f;return,end
-  end
-  if argn(2)==2 then 
-    if size(ap.children,'*')<2 then r=%f;return,end
-    if ap.children(1).type<>'Legend' then r=%f;return,end
-    if size(ap.children(1).links,'*')<>n then r=%f;return,end
-    if or(ap.children(1).text<>leg(:)) then r=%f;return,end
-  end
+    fig=gcf();
+    r=%t;
+    ap=fig.children(1);
+    am=fig.children(2);
+    if am.log_flags<>"lnn" then r=%f;return,end
+    if or(am.axes_visible<>["on","on","on"]) then r=%f;return,end
+    if ap.log_flags<>"lnn" then  r=%f;return,end
+    if or(ap.axes_visible<>["on","on","on"]) then r=%f;return,end
+
+    n=size(am.children($).children,"*");
+    if n<>size(h,1) then pause,end
+    for k=1:n;
+        pm=am.children($).children(n+1-k);
+        pp=ap.children($).children(n+1-k);
+        if or(pm.data(:,1)<>pp.data(:,1)) then ;r=%f;return,end
+        [frq,rf]=repfreq(h(k,1),pm.data(:,1));[phi,d]=phasemag(rf);
+        if norm(d(:)-pm.data(:,2))> 1d-15 then r=%f;return,end
+    end
+    if argn(2)==2 then
+        if size(ap.children,"*")<2 then r=%f;return,end
+        if ap.children(1).type<>"Legend" then r=%f;return,end
+        if size(ap.children(1).links,"*")<>n then r=%f;return,end
+        if or(ap.children(1).text<>leg(:)) then r=%f;return,end
+    end
 endfunction
 
-s=poly(0,'s')
+s=poly(0,"s");
 n=1+s;d=1+2*s;
-h=syslin('c',n,d)
+h=syslin("c",n,d);
 sl=tf2ss(h);
 sld=dscr(sl,0.01);
 hd=ss2tf(sld);
 
 [w,rf]=repfreq(h,0.01,100);
 
-//continuous time
+// Continuous time
 clf();bode(h);
 if ~checkbode(h) then pause,end
-clf();bode(h,'h');
-if ~checkbode(h,'h') then pause,end
+clf();bode(h,"h");
+if ~checkbode(h,"h") then pause,end
 
 clf();bode(h,0.01,100);
 if ~checkbode(h) then pause,end
-clf();bode(h,0.01,100,'h');
-if ~checkbode(h,'h') then pause,end
+clf();bode(h,0.01,100,"h");
+if ~checkbode(h,"h") then pause,end
 
-clf();bode(h,0.01,100,0.01)
+clf();bode(h,0.01,100,0.01);
 if ~checkbode(h) then pause,end
 clf();bode(sl,0.01,100);
 if ~checkbode(sl) then pause,end
-clf();bode(sl,0.01,100,0.01)
+clf();bode(sl,0.01,100,0.01);
 
-//continuous time SIMO
+// Continuous time SIMO
 h=[h;h+1];sl=[sl;sl+1];
 clf();bode(h);
 if ~checkbode(h) then pause,end
-clf();bode(h,['h';'h+1']);
-if ~checkbode(h,['h';'h+1']) then pause,end
+clf();bode(h,["h";"h+1"]);
+if ~checkbode(h,["h";"h+1"]) then pause,end
 
 clf();bode(h,0.01,100);
 if ~checkbode(h) then pause,end
-clf();bode(h,0.01,100,['h';'h+1']);
-if ~checkbode(h,['h';'h+1']) then pause,end
+clf();bode(h,0.01,100,["h";"h+1"]);
+if ~checkbode(h,["h";"h+1"]) then pause,end
 
-clf();bode(h,0.01,100,0.01)
+clf();bode(h,0.01,100,0.01);
 if ~checkbode(h) then pause,end
 clf();bode(sl,0.01,100);
 if ~checkbode(sl) then pause,end
-clf();bode(sl,0.01,100,0.01)
+clf();bode(sl,0.01,100,0.01);
 
 
-//discrete case
+// Discrete case
 clf();bode(hd);
 if ~checkbode(hd) then pause,end
-clf();bode(hd,'h');
-if ~checkbode(hd,'h') then pause,end
+clf();bode(hd,"h");
+if ~checkbode(hd,"h") then pause,end
 
 clf();bode(hd,0.01,100);
 if ~checkbode(hd) then pause,end
-clf();bode(hd,0.01,100,'h');
-if ~checkbode(hd,'h') then pause,end
+clf();bode(hd,0.01,100,"h");
+if ~checkbode(hd,"h") then pause,end
 
-clf();bode(hd,0.01,100,0.01)
+clf();bode(hd,0.01,100,0.01);
 if ~checkbode(hd) then pause,end
 clf();bode(sld,0.01,100);
 if ~checkbode(sld) then pause,end
-clf();bode(sl,0.01,100,0.01)
+clf();bode(sl,0.01,100,0.01);
 
-//discrete case SIMO
+// Discrete case SIMO
 hd=[hd;hd+1];sld=[sld;sld+1];
 clf();bode(hd);
 if ~checkbode(hd) then pause,end
-clf();bode(hd,['h';'h+1']);
-if ~checkbode(hd,['h';'h+1']) then pause,end
+clf();bode(hd,["h";"h+1"]);
+if ~checkbode(hd,["h";"h+1"]) then pause,end
 
 clf();bode(hd,0.01,100);
 if ~checkbode(hd) then pause,end
-clf();bode(hd,0.01,100,['h';'h+1']);
-if ~checkbode(hd,['h';'h+1']) then pause,end
+clf();bode(hd,0.01,100,["h";"h+1"]);
+if ~checkbode(hd,["h";"h+1"]) then pause,end
 
-clf();bode(hd,0.01,100,0.01)
+clf();bode(hd,0.01,100,0.01);
 if ~checkbode(hd) then pause,end
 clf();bode(sld,0.01,100);
 if ~checkbode(sld) then pause,end
-clf();bode(sl,0.01,100,0.01)
+clf();bode(sl,0.01,100,0.01);
 
-//bode given by precmputed freqency response
-h=syslin('c',n,d)
+// bode given by precomputed frequency response
+h=syslin("c",n,d);
 clf();bode(h,0.01,100);
 fig=gcf();
 dp=fig.children(1).children($).children.data;
 dm=fig.children(2).children($).children.data;
 [w,rf]=repfreq(h,0.01,100);
-clf(); bode(w,rf)
+
+clf(); bode(w,rf);
 fig=gcf();
 if norm(dp-fig.children(1).children($).children.data)>1d-13 then pause,end
-if norm(dm-fig.children(2).children($).children.data)>1d-13  then pause,end
+if norm(dm-fig.children(2).children($).children.data)>1d-13 then pause,end
 
 clf(); bode(w,20*log(abs(rf))/log(10),(180/%pi)*atan(imag(rf),real(rf)))
 fig=gcf();
 if norm(dp-fig.children(1).children($).children.data)>1d-13 then pause,end
-if norm(dm-fig.children(2).children($).children.data)>1d-13  then pause,end
+if norm(dm-fig.children(2).children($).children.data)>1d-13 then pause,end
+
+// Bode_asymp()
+s = %s;
+G = (s+10)/(s*(s+100)); // A rational matrix
+sys = syslin("c", G); // A continuous-time linear system in transfer matrix representation.
+f_min = .0001; f_max = 1600; // Frequencies in Hz
+
+clf(); bode(sys, f_min, f_max, "rad"); // The optional argument "rad" converts Hz to rad/s
+bode_asymp(sys, 10, 1000); // Plots asymptotes in the given range of frequency (in rad/s).
index 41f0509..2cd4ae8 100644 (file)
@@ -691,16 +691,39 @@ black_pt_BR_1.png=3a12354aa40f1e274c76fc0756eebecf
 black_pt_BR_2.png=6cc1b3c0517fd885c2fb0a8d343d1835
 black_ru_RU_1.png=3a12354aa40f1e274c76fc0756eebecf
 black_ru_RU_2.png=6cc1b3c0517fd885c2fb0a8d343d1835
-bode_en_US_1.png=87ec396c51a7cc6aafb148e1aa5f9256
-bode_en_US_2.png=95d29219903b7e027aef6a1618855bc0
-bode_fr_FR_1.png=87ec396c51a7cc6aafb148e1aa5f9256
-bode_fr_FR_2.png=95d29219903b7e027aef6a1618855bc0
+bode_asymp_en_US_1.png=a2a6af7a449aa3405d2f471484ccf87f
+bode_asymp_en_US_2.png=8e047cf20d83ed164a9986439ee57bd5
+bode_asymp_en_US_3.png=13240a8758ff7620cbb83db8f7b3d708
+bode_asymp_en_US_4.png=3abb4ef99eec204ffed235288afcf022
+bode_asymp_fr_FR_1.png=e0aa9c2f2486ca5dd0b1a9b668e9b7e5
+bode_asymp_fr_FR_2.png=23ee6639f39e8def9e6275d3913f0eaa
+bode_asymp_fr_FR_3.png=13240a8758ff7620cbb83db8f7b3d708
+bode_asymp_fr_FR_4.png=3abb4ef99eec204ffed235288afcf022
+bode_asymp_ja_JP_1.png=a2a6af7a449aa3405d2f471484ccf87f
+bode_asymp_ja_JP_2.png=8e047cf20d83ed164a9986439ee57bd5
+bode_asymp_ja_JP_3.png=13240a8758ff7620cbb83db8f7b3d708
+bode_asymp_ja_JP_4.png=3abb4ef99eec204ffed235288afcf022
+bode_asymp_pt_BR_1.png=a2a6af7a449aa3405d2f471484ccf87f
+bode_asymp_pt_BR_2.png=8e047cf20d83ed164a9986439ee57bd5
+bode_asymp_pt_BR_3.png=13240a8758ff7620cbb83db8f7b3d708
+bode_asymp_pt_BR_4.png=3abb4ef99eec204ffed235288afcf022
+bode_asymp_ru_RU_1.png=a2a6af7a449aa3405d2f471484ccf87f
+bode_asymp_ru_RU_2.png=8e047cf20d83ed164a9986439ee57bd5
+bode_asymp_ru_RU_3.png=13240a8758ff7620cbb83db8f7b3d708
+bode_asymp_ru_RU_4.png=3abb4ef99eec204ffed235288afcf022
+bode_en_US_1.png=5d7c38b094cee911ec2cc42dd7050176
+bode_en_US_2.png=3a40a98fd3fb7a58e9f8282a4b515f71
+bode_en_US_3.png=29f4cadff9611f6dab32471429e7bdf7
+bode_fr_FR_1.png=5d7c38b094cee911ec2cc42dd7050176
+bode_fr_FR_2.png=3a40a98fd3fb7a58e9f8282a4b515f71
+bode_fr_FR_3.png=29f4cadff9611f6dab32471429e7bdf7
 bode_ja_JP_1.png=87ec396c51a7cc6aafb148e1aa5f9256
 bode_ja_JP_2.png=95d29219903b7e027aef6a1618855bc0
 bode_pt_BR_1.png=87ec396c51a7cc6aafb148e1aa5f9256
 bode_pt_BR_2.png=95d29219903b7e027aef6a1618855bc0
-bode_ru_RU_1.png=87ec396c51a7cc6aafb148e1aa5f9256
-bode_ru_RU_2.png=95d29219903b7e027aef6a1618855bc0
+bode_ru_RU_1.png=5d7c38b094cee911ec2cc42dd7050176
+bode_ru_RU_2.png=3a40a98fd3fb7a58e9f8282a4b515f71
+bode_ru_RU_3.png=29f4cadff9611f6dab32471429e7bdf7
 bonecolormap_1.png=92247210e578a35b3770d67e94bae718
 buttmag_1.png=9fff0bd432661a67efdde3c0c3a34465
 bvode_2.png=da98ff003070f72b45a30aa94efd4ffd
diff --git a/scilab/modules/helptools/images/bode_asymp_en_US_1.png b/scilab/modules/helptools/images/bode_asymp_en_US_1.png
new file mode 100644 (file)
index 0000000..d36464b
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_en_US_1.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_en_US_2.png b/scilab/modules/helptools/images/bode_asymp_en_US_2.png
new file mode 100644 (file)
index 0000000..fcdadf8
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_en_US_2.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_en_US_3.png b/scilab/modules/helptools/images/bode_asymp_en_US_3.png
new file mode 100644 (file)
index 0000000..f555208
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_en_US_3.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_en_US_4.png b/scilab/modules/helptools/images/bode_asymp_en_US_4.png
new file mode 100644 (file)
index 0000000..3575f5b
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_en_US_4.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_fr_FR_1.png b/scilab/modules/helptools/images/bode_asymp_fr_FR_1.png
new file mode 100644 (file)
index 0000000..27f69f2
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_fr_FR_1.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_fr_FR_2.png b/scilab/modules/helptools/images/bode_asymp_fr_FR_2.png
new file mode 100644 (file)
index 0000000..46f478f
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_fr_FR_2.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_fr_FR_3.png b/scilab/modules/helptools/images/bode_asymp_fr_FR_3.png
new file mode 100644 (file)
index 0000000..f555208
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_fr_FR_3.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_fr_FR_4.png b/scilab/modules/helptools/images/bode_asymp_fr_FR_4.png
new file mode 100644 (file)
index 0000000..73a1953
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_fr_FR_4.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_ja_JP_1.png b/scilab/modules/helptools/images/bode_asymp_ja_JP_1.png
new file mode 100644 (file)
index 0000000..d36464b
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_ja_JP_1.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_ja_JP_2.png b/scilab/modules/helptools/images/bode_asymp_ja_JP_2.png
new file mode 100644 (file)
index 0000000..fcdadf8
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_ja_JP_2.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_ja_JP_3.png b/scilab/modules/helptools/images/bode_asymp_ja_JP_3.png
new file mode 100644 (file)
index 0000000..f555208
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_ja_JP_3.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_ja_JP_4.png b/scilab/modules/helptools/images/bode_asymp_ja_JP_4.png
new file mode 100644 (file)
index 0000000..3575f5b
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_ja_JP_4.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_pt_BR_1.png b/scilab/modules/helptools/images/bode_asymp_pt_BR_1.png
new file mode 100644 (file)
index 0000000..d36464b
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_pt_BR_1.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_pt_BR_2.png b/scilab/modules/helptools/images/bode_asymp_pt_BR_2.png
new file mode 100644 (file)
index 0000000..fcdadf8
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_pt_BR_2.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_pt_BR_3.png b/scilab/modules/helptools/images/bode_asymp_pt_BR_3.png
new file mode 100644 (file)
index 0000000..f555208
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_pt_BR_3.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_pt_BR_4.png b/scilab/modules/helptools/images/bode_asymp_pt_BR_4.png
new file mode 100644 (file)
index 0000000..3575f5b
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_pt_BR_4.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_ru_RU_1.png b/scilab/modules/helptools/images/bode_asymp_ru_RU_1.png
new file mode 100644 (file)
index 0000000..d36464b
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_ru_RU_1.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_ru_RU_2.png b/scilab/modules/helptools/images/bode_asymp_ru_RU_2.png
new file mode 100644 (file)
index 0000000..fcdadf8
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_ru_RU_2.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_ru_RU_3.png b/scilab/modules/helptools/images/bode_asymp_ru_RU_3.png
new file mode 100644 (file)
index 0000000..f555208
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_ru_RU_3.png differ
diff --git a/scilab/modules/helptools/images/bode_asymp_ru_RU_4.png b/scilab/modules/helptools/images/bode_asymp_ru_RU_4.png
new file mode 100644 (file)
index 0000000..3575f5b
Binary files /dev/null and b/scilab/modules/helptools/images/bode_asymp_ru_RU_4.png differ
diff --git a/scilab/modules/helptools/images/bode_en_US_3.png b/scilab/modules/helptools/images/bode_en_US_3.png
new file mode 100644 (file)
index 0000000..37069e3
Binary files /dev/null and b/scilab/modules/helptools/images/bode_en_US_3.png differ
diff --git a/scilab/modules/helptools/images/bode_fr_FR_3.png b/scilab/modules/helptools/images/bode_fr_FR_3.png
new file mode 100644 (file)
index 0000000..37069e3
Binary files /dev/null and b/scilab/modules/helptools/images/bode_fr_FR_3.png differ
index befdee1..908c8b1 100644 (file)
Binary files a/scilab/modules/helptools/images/bode_ru_RU_1.png and b/scilab/modules/helptools/images/bode_ru_RU_1.png differ
index 6bb0ec9..09ef87b 100644 (file)
Binary files a/scilab/modules/helptools/images/bode_ru_RU_2.png and b/scilab/modules/helptools/images/bode_ru_RU_2.png differ
diff --git a/scilab/modules/helptools/images/bode_ru_RU_3.png b/scilab/modules/helptools/images/bode_ru_RU_3.png
new file mode 100644 (file)
index 0000000..37069e3
Binary files /dev/null and b/scilab/modules/helptools/images/bode_ru_RU_3.png differ