summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerge Steer <serge.steer@scilab.org>2010-05-18 15:05:42 +0200
committerYann Collette <yann.collette@scilab.org>2010-05-19 13:04:16 +0200
commit5d21d422c4f71f9ac9c3886075d3dc61ad95defe (patch)
tree346276bf0b79ff5801ed5348a8751fd64b63e4ba
parentf71da21a597e9e21c2b4ad9589b92b656f22dde0 (diff)
downloadscilab-5d21d422c4f71f9ac9c3886075d3dc61ad95defe.zip
scilab-5d21d422c4f71f9ac9c3886075d3dc61ad95defe.tar.gz
Customized datatips added + help revisited
Change-Id: I11d43b8ff2447a19b342c1c8fc35b0cdf83df09c
-rw-r--r--scilab/CHANGES_5.3.X3
-rw-r--r--scilab/modules/cacsd/help/en_US/gainplot.xml54
-rw-r--r--scilab/modules/cacsd/help/en_US/nyquist.xml124
-rw-r--r--scilab/modules/cacsd/help/images/gainplot.svg176
-rw-r--r--scilab/modules/cacsd/help/images/nyquist.svg150
-rw-r--r--scilab/modules/cacsd/macros/gainplot.sci82
-rw-r--r--scilab/modules/cacsd/macros/nyquist.sci257
7 files changed, 646 insertions, 200 deletions
diff --git a/scilab/CHANGES_5.3.X b/scilab/CHANGES_5.3.X
index 0ec7677..5593468 100644
--- a/scilab/CHANGES_5.3.X
+++ b/scilab/CHANGES_5.3.X
@@ -22,7 +22,8 @@ Graphics:
22 22
23* the set, get and uicontrol functions are now overloadable. 23* the set, get and uicontrol functions are now overloadable.
24 24
25* Datatips tools added 25* Datatips tools added, the frequency response plots ("bode", "black", "nyquist",
26 "gainplot",...) supports cutomized datatips.
26 27
27* bug 2651 fixed - "plot2d" was not working when the x argument was not given 28* bug 2651 fixed - "plot2d" was not working when the x argument was not given
28 and some optional arguments were given. 29 and some optional arguments were given.
diff --git a/scilab/modules/cacsd/help/en_US/gainplot.xml b/scilab/modules/cacsd/help/en_US/gainplot.xml
index 8a20747..29e7346 100644
--- a/scilab/modules/cacsd/help/en_US/gainplot.xml
+++ b/scilab/modules/cacsd/help/en_US/gainplot.xml
@@ -1,15 +1,15 @@
1<?xml version="1.0" encoding="UTF-8"?> 1<?xml version="1.0" encoding="UTF-8"?>
2<!-- 2<!--
3 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab 3* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 * Copyright (C) INRIA 4* Copyright (C) INRIA
5 * 5*
6 * This file must be used under the terms of the CeCILL. 6* This file must be used under the terms of the CeCILL.
7 * This source file is licensed as described in the file COPYING, which 7* This source file is licensed as described in the file COPYING, which
8 * you should have received as part of this distribution. The terms 8* you should have received as part of this distribution. The terms
9 * are also available at 9* are also available at
10 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt 10* http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11 * 11*
12 --> 12-->
13<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:lang="en" xml:id="gainplot"> 13<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:lang="en" xml:id="gainplot">
14 <info> 14 <info>
15 <pubdate>$LastChangedDate: 2008-03-26 09:50:39 +0100 (Wed, 26 Mar 2008) $</pubdate> 15 <pubdate>$LastChangedDate: 2008-03-26 09:50:39 +0100 (Wed, 26 Mar 2008) $</pubdate>
@@ -21,8 +21,8 @@
21 <refsynopsisdiv> 21 <refsynopsisdiv>
22 <title>Calling Sequence</title> 22 <title>Calling Sequence</title>
23 <synopsis>gainplot(sl,fmin,fmax [,step] [,comments] ) 23 <synopsis>gainplot(sl,fmin,fmax [,step] [,comments] )
24gainplot(frq,db,phi [,comments]) 24 gainplot(frq,db,phi [,comments])
25gainplot(frq, repf [,comments])</synopsis> 25 gainplot(frq, repf [,comments])</synopsis>
26 </refsynopsisdiv> 26 </refsynopsisdiv>
27 <refsection> 27 <refsection>
28 <title>Parameters</title> 28 <title>Parameters</title>
@@ -74,18 +74,25 @@ gainplot(frq, repf [,comments])</synopsis>
74 </refsection> 74 </refsection>
75 <refsection> 75 <refsection>
76 <title>Description</title> 76 <title>Description</title>
77 <para>Same as Bode but plots only the magnitude.</para> 77 <para>Same as <link linkend="bode">bode</link> but plots only the magnitude.</para>
78 </refsection> 78 </refsection>
79 <refsection> 79 <refsection>
80 <title>Examples</title> 80 <title>Examples</title>
81 <programlisting role="example"><![CDATA[ 81 <programlisting role="example"><![CDATA[
82s=poly(0,'s') 82 s=poly(0,'s')
83h=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01)) 83 h1=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01))
84gainplot(h,0.01,100,'(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01)') 84 h2=syslin('c',(s^2+2*0.1*15.1*s+228.01)/(s^2+2*0.9*15*s+225))
85clf() 85 clf();gainplot([h1;h2],0.01,100,['h1';'h2'])
86h1=h*syslin('c',(s^2+2*0.1*15.1*s+228.01)/(s^2+2*0.9*15*s+225)) 86 title('Gainplot')
87gainplot([h1;h],0.01,100,['h1';'h']) 87
88 ]]></programlisting> 88 ]]></programlisting>
89 <para>
90 <inlinemediaobject>
91 <imageobject>
92 <imagedata fileref="../images/gainplot.svg"/>
93 </imageobject>
94 </inlinemediaobject>
95 </para>
89 </refsection> 96 </refsection>
90 <refsection> 97 <refsection>
91 <title>See Also</title> 98 <title>See Also</title>
@@ -100,16 +107,13 @@ gainplot([h1;h],0.01,100,['h1';'h'])
100 <link linkend="nyquist">nyquist</link> 107 <link linkend="nyquist">nyquist</link>
101 </member> 108 </member>
102 <member> 109 <member>
103 <link linkend="freq">freq</link>
104 </member>
105 <member>
106 <link linkend="repfreq">repfreq</link> 110 <link linkend="repfreq">repfreq</link>
107 </member> 111 </member>
108 <member> 112 <member>
109 <link linkend="g_margin">g_margin</link> 113 <link linkend="g_margin">g_margin</link>
110 </member> 114 </member>
111 <member> 115 <member>
112 <link linkend="p_margin">p_margin</link> 116 <link linkend="datatips">datatips</link>
113 </member> 117 </member>
114 </simplelist> 118 </simplelist>
115 </refsection> 119 </refsection>
diff --git a/scilab/modules/cacsd/help/en_US/nyquist.xml b/scilab/modules/cacsd/help/en_US/nyquist.xml
index 22e97c5..145efdc 100644
--- a/scilab/modules/cacsd/help/en_US/nyquist.xml
+++ b/scilab/modules/cacsd/help/en_US/nyquist.xml
@@ -1,15 +1,15 @@
1<?xml version="1.0" encoding="UTF-8"?> 1<?xml version="1.0" encoding="UTF-8"?>
2<!-- 2<!--
3 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab 3* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 * Copyright (C) INRIA 4* Copyright (C) INRIA
5 * 5*
6 * This file must be used under the terms of the CeCILL. 6* This file must be used under the terms of the CeCILL.
7 * This source file is licensed as described in the file COPYING, which 7* This source file is licensed as described in the file COPYING, which
8 * you should have received as part of this distribution. The terms 8* you should have received as part of this distribution. The terms
9 * are also available at 9* are also available at
10 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt 10* http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11 * 11*
12 --> 12-->
13<refentry version="5.0-subset Scilab" xml:id="nyquist" xml:lang="en" 13<refentry version="5.0-subset Scilab" xml:id="nyquist" xml:lang="en"
14 xmlns="http://docbook.org/ns/docbook" 14 xmlns="http://docbook.org/ns/docbook"
15 xmlns:xlink="http://www.w3.org/1999/xlink" 15 xmlns:xlink="http://www.w3.org/1999/xlink"
@@ -31,10 +31,12 @@
31 <refsynopsisdiv> 31 <refsynopsisdiv>
32 <title>Calling Sequence</title> 32 <title>Calling Sequence</title>
33 33
34 <synopsis>nyquist( sl,[fmin,fmax] [,step] [,comments] ) 34 <synopsis>
35nyquist( sl, frq [,comments] ) 35 nyquist( sl,[fmin,fmax] [,step] [,comments] )
36nyquist(frq,db,phi [,comments]) 36 nyquist( sl, frq [,comments] )
37nyquist(frq, repf [,comments])</synopsis> 37 nyquist(frq,db,phi [,comments])
38 nyquist(frq, repf [,comments])
39 </synopsis>
38 </refsynopsisdiv> 40 </refsynopsisdiv>
39 41
40 <refsection> 42 <refsection>
@@ -45,8 +47,7 @@ nyquist(frq, repf [,comments])</synopsis>
45 <term>sl</term> 47 <term>sl</term>
46 48
47 <listitem> 49 <listitem>
48 <para> <literal>syslin</literal> list (SIMO linear system in 50 <para> a continuous or discrete time SIMO linear dynamical system ( see: <link linkend="syslin">syslin</link>).</para>
49 continuous or discrete time )</para>
50 </listitem> 51 </listitem>
51 </varlistentry> 52 </varlistentry>
52 53
@@ -87,7 +88,7 @@ nyquist(frq, repf [,comments])</synopsis>
87 <term>db,phi</term> 88 <term>db,phi</term>
88 89
89 <listitem> 90 <listitem>
90 <para>real matrices of modulus (in Db) and phases (in degree) (one 91 <para>real matrices of modulus (in dB) and phases (in degree) (one
91 row for each output of <literal>sl</literal>).</para> 92 row for each output of <literal>sl</literal>).</para>
92 </listitem> 93 </listitem>
93 </varlistentry> 94 </varlistentry>
@@ -142,29 +143,88 @@ nyquist(frq, repf [,comments])</synopsis>
142 if <literal>sl</literal> is discrete-time.</para> 143 if <literal>sl</literal> is discrete-time.</para>
143 144
144 <para>Automatic discretization of frequencies is made by 145 <para>Automatic discretization of frequencies is made by
145 <literal>calfrq</literal>.</para> 146 <link linkend="calfrq">calfrq</link>.</para>
147 <para>To obtain the value of the frequency at a selected point(s) you can
148 activate the <link linkend="datatips">datatips</link> manager and
149 click the desired point on the nyquist curve(s).
150 </para>
146 </refsection> 151 </refsection>
152 <refsection>
153 <title>Graphics entities organization</title>
154 <para>
155 The <literal>nyquist</literal> function creates a compound
156 object for each SISO system. The following piece of code allows
157 to get the handle on the compound object of the ith system:
158 </para>
159 <programlisting role="getcompound"><![CDATA[
160 ax=gca();//handle on current axes
161 hi=ax.children($+i-1)// the handle on the compound object of the ith system
162 ]]></programlisting>
163 <para>
164 This compound object has two children: a compound object that
165 defines the small arrows (a compound of small polylines) and the curve labels (a compound of texts) and a polyline
166 which is the curve itself. The following piece of code shows how
167 one can customize a particular nyquist curve display.
168 </para>
169 <programlisting role="customize"><![CDATA[
170 hi.children(1).visible='off'; //hides the arrows and labels
171 hi.children(2).thickness=2; //make the curve thicker
172
173 ]]></programlisting>
147 174
175 </refsection>
148 <refsection> 176 <refsection>
149 <title>Examples</title> 177 <title>Examples</title>
150 178 <programlisting role="example"><![CDATA[
151 <programlisting role="example"><![CDATA[ 179 //Nyquist curve
152clf(); 180 s=poly(0,'s')
153s=poly(0,'s'); 181 h=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
154h=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01)); 182 h1=h*syslin('c',(s^2+2*0.1*15.1*s+228.01)/(s^2+2*0.9*15*s+225))
155comm='(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01)'; 183 clf(); nyquist(h1)
156nyquist(h,0.01,100,comm); 184 // add a datatip
157h1=h*syslin('c',(s^2+2*0.1*15.1*s+228.01)/(s^2+2*0.9*15*s+225)) 185 ax=gca();
158clf(); 186 h_h=ax.children($).children(2);//handle on Nyquist curve of h
159nyquist([h1;h],0.01,100,['h1';'h']) 187 tip=datatipCreate(h_h,[1.331,0.684]);
160clf();nyquist([h1;h]) 188 datatipSetOrientation(tip,"upper left");
161 ]]></programlisting> 189 ]]></programlisting>
190 <para>
191 <inlinemediaobject>
192 <imageobject>
193 <imagedata fileref="../images/nyquist.svg"/>
194 </imageobject>
195 </inlinemediaobject>
196 </para>
197 <programlisting role="example"><![CDATA[
198 //Hall chart as a grid for nyquist
199 s=poly(0,'s');
200 Plant=syslin('c',16000/((s+1)*(s+10)*(s+100)));
201 //two degree of freedom PID
202 tau=0.2;xsi=1.2;
203 PID=syslin('c',(1/(2*xsi*tau*s))*(1+2*xsi*tau*s+tau^2*s^2));
204 clf();
205 nyquist([Plant;Plant*PID],0.5,100,["Plant";"Plant and PID corrector"]);
206 hallchart(colors=color('light gray')*[1 1])
207 //move the caption in the lower rigth corner
208 ax=gca();Leg=ax.children(1);
209 Leg.legend_location="in_upper_left";
210 ]]></programlisting>
211 <para>
212 <inlinemediaobject>
213 <imageobject>
214 <imagedata fileref="../images/nyquist2.svg"/>
215 </imageobject>
216 </inlinemediaobject>
217 </para>
162 </refsection> 218 </refsection>
163 219
164 <refsection> 220 <refsection>
165 <title>See Also</title> 221 <title>See Also</title>
166 222
167 <simplelist type="inline"> 223 <simplelist type="inline">
224 <member>
225 <link linkend="syslin">syslin</link>
226 </member>
227
168 <member><link linkend="bode">bode</link></member> 228 <member><link linkend="bode">bode</link></member>
169 229
170 <member><link linkend="black">black</link></member> 230 <member><link linkend="black">black</link></member>
@@ -176,6 +236,10 @@ clf();nyquist([h1;h])
176 <member><link linkend="repfreq">repfreq</link></member> 236 <member><link linkend="repfreq">repfreq</link></member>
177 237
178 <member><link linkend="phasemag">phasemag</link></member> 238 <member><link linkend="phasemag">phasemag</link></member>
239 <member>
240 <link linkend="datatips">datatips</link>
241 </member>
242
179 </simplelist> 243 </simplelist>
180 </refsection> 244 </refsection>
181</refentry> 245</refentry>
diff --git a/scilab/modules/cacsd/help/images/gainplot.svg b/scilab/modules/cacsd/help/images/gainplot.svg
new file mode 100644
index 0000000..198ab32
--- /dev/null
+++ b/scilab/modules/cacsd/help/images/gainplot.svg
@@ -0,0 +1,176 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg xmlns="http://www.w3.org/2000/svg"
3 xmlns:xlink="http://www.w3.org/1999/xlink"
4 width="464px" height="314px" viewBox="0 0 464 314"
5 style="stroke:none">
6<title>Graphic window number 0</title>
7<desc>
8Creator: GL2PS 1.3.2, (C) 1999-2006 Christophe Geuzaine (geuz@geuz.org)
9For: Scilab
10CreationDate: Tue May 18 14:47:56 2010
11</desc>
12<defs>
13</defs>
14<polygon fill="#ffffff" points="0,0 464,0 464,314 0,314"/>
15<g>
16<polygon fill="#ffffff" points="58,274.75 58,39.25 58,39.25"/>
17<polygon fill="#ffffff" points="58,274.75 58,39.25 58,274.75"/>
18<polygon fill="#ffffff" points="58,274.75 406,274.75 406,274.75"/>
19<polygon fill="#ffffff" points="58,274.75 406,274.75 58,274.75"/>
20<polygon fill="#ffffff" points="58,274.75 406,274.75 406,39.25"/>
21<polygon fill="#ffffff" points="58,274.75 406,39.25 58,39.25"/>
22<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,119.103 61.5151,119.102 67.6943,119.101 77.6577,119.096 92.0493,119.083 110.591,119.045 132.285,118.911 156.008,118.419 170.469,117.627 180.902,116.53 189.068,115.127 195.78,113.413 201.477,111.384 206.426,109.036 210.802,106.366 212.813,104.909 214.723,103.372 216.541,101.753 218.275,100.054 219.934,98.2749 221.522,96.4165 223.046,94.48 224.512,92.4668 225.922,90.3784 227.282,88.2188 228.595,85.9897 229.863,83.6963 231.09,81.3428 232.279,78.936 233.432,76.4829 234.55,73.9927 235.097,72.7368 235.636,71.4761 236.167,70.2114 236.692,68.9453 237.208,67.6792 237.719,66.415 238.222,65.1558 238.719,63.9033 239.209,62.6602 239.693,61.4287 240.17,60.2124 240.643,59.0137 241.108,57.8359 241.569,56.6826 242.023,55.5566 242.473,54.4614 242.917,53.4009 243.356,52.3779 243.79,51.3965 244.219,50.4604 244.643,49.5718 245.062,48.7354 245.478,47.9531 245.888,47.2285 246.293,46.564 246.695,45.9614 247.093,45.4233 247.486,44.9507 247.875,44.5449 248.26,44.2065 248.642,43.936 249.02,43.7334 249.393,43.5972 249.763,43.5269 250.13,43.521 250.493,43.5771 250.853,43.6938 251.208,43.8687 251.562,44.0981 251.911,44.3799 252.257,44.7104 252.601,45.0869 252.941,45.5063 253.278,45.9653 253.612,46.4604 253.943,46.9883 254.271,47.5459 254.597,48.1304 254.92,48.7393 255.24,49.3687 255.557,50.0171 255.872,50.6812 256.184,51.3589 256.494,52.0483 256.8,52.7466 257.105,53.4531 257.407,54.165 257.707,54.8809 258.004,55.5996 258.299,56.3198 258.592,57.04 258.882,57.7593 259.17,58.4766 259.457,59.1909 259.74,59.9014 260.302,61.3091 260.855,62.6938 261.4,64.0527 261.938,65.3828 262.468,66.6821 262.991,67.9482 263.506,69.1816 264.015,70.3809 264.517,71.5459 265.012,72.6768 265.501,73.7744 265.983,74.8384 266.46,75.8701 266.931,76.8696 267.854,78.7764 268.757,80.5649 269.638,82.2432 270.499,83.8179 271.34,85.2959 272.163,86.6846 272.969,87.9893 273.758,89.2163 274.531,90.3716 275.288,91.46 276.758,93.4551 278.174,95.2349 279.538,96.8291 280.855,98.2612 282.127,99.5522 283.358,100.72 284.55,101.779 285.706,102.743 286.828,103.623 287.917,104.427 288.975,105.165 290.005,105.843 291.007,106.467 292.936,107.578 294.77,108.532 296.52,109.357 298.192,110.077 299.793,110.708 301.33,111.264 302.806,111.756 304.226,112.194 305.595,112.586 308.193,113.255 310.624,113.801 312.908,114.254 315.062,114.633 317.099,114.953 319.032,115.226 320.871,115.461 322.625,115.665 325.905,115.999 328.924,116.258 331.719,116.463 334.321,116.629 336.756,116.765 339.043,116.878 341.2,116.972 345.175,117.12 348.772,117.229 352.056,117.312 355.078,117.377 357.875,117.428 360.479,117.47 365.205,117.532 369.405,117.575 373.184,117.607 376.619,117.631 379.768,117.649 385.374,117.675 390.253,117.692 394.575,117.704 401.968,117.719 405.185,117.724 406,117.725"/>
23<polyline fill="none" stroke="#0000ff" stroke-width="0.5" points="58,116.846 61.5151,116.846 67.6943,116.847 77.6577,116.849 92.0493,116.855 110.591,116.875 132.285,116.941 156.008,117.184 170.469,117.577 180.902,118.119 189.068,118.813 195.78,119.661 201.477,120.665 206.426,121.827 210.802,123.151 212.813,123.875 214.723,124.642 216.541,125.451 218.275,126.303 219.934,127.198 221.522,128.138 223.046,129.124 224.512,130.154 225.922,131.231 227.282,132.356 228.595,133.529 229.863,134.75 231.09,136.022 232.279,137.345 233.432,138.72 234.55,140.148 235.097,140.883 235.636,141.631 236.167,142.393 236.692,143.169 237.208,143.959 237.719,144.764 238.222,145.583 238.719,146.418 239.209,147.267 239.693,148.132 240.17,149.012 240.643,149.907 241.108,150.819 241.569,151.747 242.023,152.691 242.473,153.651 242.917,154.629 243.356,155.624 243.79,156.636 244.219,157.666 244.643,158.714 245.062,159.78 245.478,160.865 245.888,161.969 246.293,163.093 246.695,164.236 247.093,165.399 247.486,166.583 247.875,167.789 248.26,169.015 248.642,170.263 249.02,171.534 249.393,172.828 249.763,174.145 250.13,175.485 250.493,176.85 250.853,178.24 251.208,179.656 251.562,181.097 251.911,182.566 252.257,184.062 252.601,185.586 252.941,187.139 253.278,188.721 253.612,190.333 253.943,191.977 254.271,193.651 254.597,195.359 254.92,197.099 255.24,198.874 255.557,200.683 255.872,202.527 256.184,204.407 256.494,206.324 256.8,208.279 257.105,210.271 257.407,212.301 257.707,214.37 258.004,216.477 258.299,218.622 258.592,220.805 258.882,223.025 259.17,225.281 259.457,227.57 259.74,229.892 260.302,234.616 260.855,239.415 261.4,244.231 261.938,248.977 262.468,253.532 262.991,257.735 263.506,261.393 264.015,264.291 264.517,266.232 265.012,267.081 265.501,266.796 265.983,265.449 266.46,263.198 266.931,260.25 267.854,253.072 268.757,245.237 269.638,237.502 270.499,230.213 271.34,223.489 272.163,217.339 272.969,211.732 273.758,206.619 274.531,201.946 275.288,197.667 276.758,190.115 278.174,183.673 279.538,178.12 280.855,173.29 282.127,169.053 283.358,165.311 284.55,161.985 285.706,159.013 286.828,156.342 287.917,153.934 288.975,151.751 290.005,149.767 291.007,147.957 292.936,144.78 294.77,142.09 296.52,139.791 298.192,137.808 299.793,136.085 301.33,134.579 302.806,133.253 304.226,132.08 305.595,131.037 308.193,129.268 310.624,127.833 312.908,126.653 315.062,125.669 317.099,124.842 319.032,124.138 320.871,123.534 322.625,123.013 325.905,122.162 328.924,121.503 331.719,120.981 334.321,120.562 336.756,120.219 339.043,119.936 341.2,119.698 345.175,119.327 348.772,119.052 352.056,118.843 355.078,118.681 357.875,118.553 360.479,118.449 365.205,118.294 369.405,118.186 373.184,118.106 376.619,118.047 379.768,118.001 385.374,117.937 390.253,117.895 394.575,117.865 401.968,117.828 405.185,117.815 406,117.812"/>
24<polygon fill="#ffffff" points="401.65,41.3501 339.5,70.0498 339.5,41.3501"/>
25<polygon fill="#ffffff" points="401.65,70.0498 339.5,70.0498 401.65,41.3501"/>
26<polyline fill="none" stroke="#000000" stroke-width="0.5" points="339.5,70.0498 339.5,41.3501 401.65,41.3501 401.65,70.0498 339.5,70.0498"/>
27<text fill="#000000" style="stroke:none" x="387" y="54" transform="rotate(0, 387, 54)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">h1</text>
28<text fill="#000000" style="stroke:none" x="387" y="66" transform="rotate(0, 387, 66)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">h2</text>
29<polyline fill="none" stroke="#0000ff" stroke-width="0.5" points="343.85,61.7002 361.25,61.7002 378.65,61.7002"/>
30<polyline fill="none" stroke="#000000" stroke-width="0.5" points="343.85,49.7002 361.25,49.7002 378.65,49.7002"/>
31<polygon fill="#ffffee" points="261,262 261,270 269,270"/>
32<polygon fill="#ffffee" points="261,262 269,270 269,262"/>
33<polyline fill="none" stroke="#0000ff" stroke-width="0.5" points="261,262 261,270 269,270 269,262 261,262"/>
34<polygon fill="#ffffee" points="247,40 247,48 255,48"/>
35<polygon fill="#ffffee" points="247,40 255,48 255,40"/>
36<polyline fill="none" stroke="#000000" stroke-width="0.5" points="247,40 247,48 255,48 255,40 247,40"/>
37<polygon fill="#ffffee" points="265.5,238.5 265.5,262.5 315.5,262.5"/>
38<polygon fill="#ffffee" points="265.5,238.5 315.5,262.5 315.5,238.5"/>
39<polyline fill="none" stroke="#bebebe" stroke-width="0.5" points="265.5,238.5 265.5,262.5 315.5,262.5 315.5,238.5 265.5,238.5"/>
40<text fill="#000000" style="stroke:none" x="266" y="249" transform="rotate(0, 266, 249)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">2.365Hz</text>
41<text fill="#000000" style="stroke:none" x="266" y="261" transform="rotate(0, 266, 261)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-18.91dB</text>
42<polygon fill="#ffffee" points="251.5,15.5 251.5,39.5 295.5,39.5"/>
43<polygon fill="#ffffee" points="251.5,15.5 295.5,39.5 295.5,15.5"/>
44<polyline fill="none" stroke="#bebebe" stroke-width="0.5" points="251.5,15.5 251.5,39.5 295.5,39.5 295.5,15.5 251.5,15.5"/>
45<text fill="#000000" style="stroke:none" x="252" y="26" transform="rotate(0, 252, 26)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">1.663Hz</text>
46<text fill="#000000" style="stroke:none" x="252" y="38" transform="rotate(0, 252, 38)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">9.412dB</text>
47<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,274.75 58,39.25"/>
48<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,274.75 52.7798,274.75"/>
49<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,235.5 52.7798,235.5"/>
50<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,196.25 52.7798,196.25"/>
51<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,157 52.7798,157"/>
52<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,117.75 52.7798,117.75"/>
53<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,78.5 52.7798,78.5"/>
54<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,39.25 52.7798,39.25"/>
55<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,264.938 54.8682,264.938"/>
56<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,255.125 54.8682,255.125"/>
57<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,245.312 54.8682,245.312"/>
58<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,225.688 54.8682,225.688"/>
59<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,215.875 54.8682,215.875"/>
60<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,206.062 54.8682,206.062"/>
61<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,186.438 54.8682,186.438"/>
62<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,176.625 54.8682,176.625"/>
63<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,166.812 54.8682,166.812"/>
64<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,147.188 54.8682,147.188"/>
65<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,137.375 54.8682,137.375"/>
66<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,127.562 54.8682,127.562"/>
67<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,107.938 54.8682,107.938"/>
68<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,98.125 54.8682,98.125"/>
69<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,88.3125 54.8682,88.3125"/>
70<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,68.6875 54.8682,68.6875"/>
71<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,58.875 54.8682,58.875"/>
72<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,49.0625 54.8682,49.0625"/>
73<text fill="#000000" style="stroke:none" x="32" y="280" transform="rotate(-0, 32, 280)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-20</text>
74<text fill="#000000" style="stroke:none" x="32" y="240" transform="rotate(-0, 32, 240)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-15</text>
75<text fill="#000000" style="stroke:none" x="32" y="201" transform="rotate(-0, 32, 201)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-10</text>
76<text fill="#000000" style="stroke:none" x="38" y="162" transform="rotate(-0, 38, 162)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-5</text>
77<text fill="#000000" style="stroke:none" x="43" y="123" transform="rotate(-0, 43, 123)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0</text>
78<text fill="#000000" style="stroke:none" x="45" y="83" transform="rotate(-0, 45, 83)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">5</text>
79<text fill="#000000" style="stroke:none" x="38" y="44" transform="rotate(-0, 38, 44)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">10</text>
80<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="58,274.75 406,274.75 406,274.75"/>
81<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="58,235.5 406,235.5 406,235.5"/>
82<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="58,196.25 406,196.25 406,196.25"/>
83<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="58,157 406,157 406,157"/>
84<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="58,117.75 406,117.75 406,117.75"/>
85<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="58,78.5 406,78.5 406,78.5"/>
86<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="58,39.25 406,39.25 406,39.25"/>
87<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,274.75 406,274.75"/>
88<polyline fill="none" stroke="#000000" stroke-width="0.5" points="58,274.75 58,278.275"/>
89<polyline fill="none" stroke="#000000" stroke-width="0.5" points="145,274.75 145,278.275"/>
90<polyline fill="none" stroke="#000000" stroke-width="0.5" points="232,274.75 232,278.275"/>
91<polyline fill="none" stroke="#000000" stroke-width="0.5" points="319,274.75 319,278.275"/>
92<polyline fill="none" stroke="#000000" stroke-width="0.5" points="406,274.75 406,278.275"/>
93<polyline fill="none" stroke="#000000" stroke-width="0.5" points="84.1895,274.75 84.1895,276.865"/>
94<polyline fill="none" stroke="#000000" stroke-width="0.5" points="99.5098,274.75 99.5098,276.865"/>
95<polyline fill="none" stroke="#000000" stroke-width="0.5" points="110.379,274.75 110.379,276.865"/>
96<polyline fill="none" stroke="#000000" stroke-width="0.5" points="118.811,274.75 118.811,276.865"/>
97<polyline fill="none" stroke="#000000" stroke-width="0.5" points="125.699,274.75 125.699,276.865"/>
98<polyline fill="none" stroke="#000000" stroke-width="0.5" points="131.523,274.75 131.523,276.865"/>
99<polyline fill="none" stroke="#000000" stroke-width="0.5" points="136.569,274.75 136.569,276.865"/>
100<polyline fill="none" stroke="#000000" stroke-width="0.5" points="141.019,274.75 141.019,276.865"/>
101<polyline fill="none" stroke="#000000" stroke-width="0.5" points="171.189,274.75 171.189,276.865"/>
102<polyline fill="none" stroke="#000000" stroke-width="0.5" points="186.51,274.75 186.51,276.865"/>
103<polyline fill="none" stroke="#000000" stroke-width="0.5" points="197.379,274.75 197.379,276.865"/>
104<polyline fill="none" stroke="#000000" stroke-width="0.5" points="205.811,274.75 205.811,276.865"/>
105<polyline fill="none" stroke="#000000" stroke-width="0.5" points="212.699,274.75 212.699,276.865"/>
106<polyline fill="none" stroke="#000000" stroke-width="0.5" points="218.523,274.75 218.523,276.865"/>
107<polyline fill="none" stroke="#000000" stroke-width="0.5" points="223.569,274.75 223.569,276.865"/>
108<polyline fill="none" stroke="#000000" stroke-width="0.5" points="228.019,274.75 228.019,276.865"/>
109<polyline fill="none" stroke="#000000" stroke-width="0.5" points="258.189,274.75 258.189,276.865"/>
110<polyline fill="none" stroke="#000000" stroke-width="0.5" points="273.51,274.75 273.51,276.865"/>
111<polyline fill="none" stroke="#000000" stroke-width="0.5" points="284.379,274.75 284.379,276.865"/>
112<polyline fill="none" stroke="#000000" stroke-width="0.5" points="292.811,274.75 292.811,276.865"/>
113<polyline fill="none" stroke="#000000" stroke-width="0.5" points="299.699,274.75 299.699,276.865"/>
114<polyline fill="none" stroke="#000000" stroke-width="0.5" points="305.523,274.75 305.523,276.865"/>
115<polyline fill="none" stroke="#000000" stroke-width="0.5" points="310.569,274.75 310.569,276.865"/>
116<polyline fill="none" stroke="#000000" stroke-width="0.5" points="315.019,274.75 315.019,276.865"/>
117<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.189,274.75 345.189,276.865"/>
118<polyline fill="none" stroke="#000000" stroke-width="0.5" points="360.51,274.75 360.51,276.865"/>
119<polyline fill="none" stroke="#000000" stroke-width="0.5" points="371.379,274.75 371.379,276.865"/>
120<polyline fill="none" stroke="#000000" stroke-width="0.5" points="379.811,274.75 379.811,276.865"/>
121<polyline fill="none" stroke="#000000" stroke-width="0.5" points="386.699,274.75 386.699,276.865"/>
122<polyline fill="none" stroke="#000000" stroke-width="0.5" points="392.523,274.75 392.523,276.865"/>
123<polyline fill="none" stroke="#000000" stroke-width="0.5" points="397.569,274.75 397.569,276.865"/>
124<polyline fill="none" stroke="#000000" stroke-width="0.5" points="402.019,274.75 402.019,276.865"/>
125<text fill="#000000" style="stroke:none" x="46" y="297" transform="rotate(-0, 46, 297)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">10</text>
126<text fill="#000000" style="stroke:none" x="133" y="297" transform="rotate(-0, 133, 297)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">10</text>
127<text fill="#000000" style="stroke:none" x="220" y="297" transform="rotate(-0, 220, 297)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">10</text>
128<text fill="#000000" style="stroke:none" x="307" y="297" transform="rotate(-0, 307, 297)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">10</text>
129<text fill="#000000" style="stroke:none" x="394" y="297" transform="rotate(-0, 394, 297)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">10</text>
130<text fill="#000000" style="stroke:none" x="59" y="287" transform="rotate(-0, 59, 287)" font-size="9" font-family="SansSerif" font-style="normal" font-weight="normal">-2</text>
131<text fill="#000000" style="stroke:none" x="146" y="287" transform="rotate(-0, 146, 287)" font-size="9" font-family="SansSerif" font-style="normal" font-weight="normal">-1</text>
132<text fill="#000000" style="stroke:none" x="233" y="287" transform="rotate(-0, 233, 287)" font-size="9" font-family="SansSerif" font-style="normal" font-weight="normal">0</text>
133<text fill="#000000" style="stroke:none" x="320" y="287" transform="rotate(-0, 320, 287)" font-size="9" font-family="SansSerif" font-style="normal" font-weight="normal">1</text>
134<text fill="#000000" style="stroke:none" x="407" y="287" transform="rotate(-0, 407, 287)" font-size="9" font-family="SansSerif" font-style="normal" font-weight="normal">2</text>
135<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="58,274.75 58,39.25 58,39.25"/>
136<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="145,274.75 145,39.25 145,39.25"/>
137<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="232,274.75 232,39.25 232,39.25"/>
138<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="319,274.75 319,39.25 319,39.25"/>
139<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="406,274.75 406,39.25 406,39.25"/>
140<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="84.1895,274.75 84.1895,39.25 84.1895,39.25"/>
141<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="99.5098,274.75 99.5098,39.25 99.5098,39.25"/>
142<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="110.379,274.75 110.379,39.25 110.379,39.25"/>
143<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="118.811,274.75 118.811,39.25 118.811,39.25"/>
144<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="125.699,274.75 125.699,39.25 125.699,39.25"/>
145<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="131.523,274.75 131.523,39.25 131.523,39.25"/>
146<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="136.569,274.75 136.569,39.25 136.569,39.25"/>
147<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="141.019,274.75 141.019,39.25 141.019,39.25"/>
148<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="171.189,274.75 171.189,39.25 171.189,39.25"/>
149<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="186.51,274.75 186.51,39.25 186.51,39.25"/>
150<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="197.379,274.75 197.379,39.25 197.379,39.25"/>
151<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="205.811,274.75 205.811,39.25 205.811,39.25"/>
152<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="212.699,274.75 212.699,39.25 212.699,39.25"/>
153<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="218.523,274.75 218.523,39.25 218.523,39.25"/>
154<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="223.569,274.75 223.569,39.25 223.569,39.25"/>
155<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="228.019,274.75 228.019,39.25 228.019,39.25"/>
156<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="258.189,274.75 258.189,39.25 258.189,39.25"/>
157<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="273.51,274.75 273.51,39.25 273.51,39.25"/>
158<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="284.379,274.75 284.379,39.25 284.379,39.25"/>
159<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="292.811,274.75 292.811,39.25 292.811,39.25"/>
160<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="299.699,274.75 299.699,39.25 299.699,39.25"/>
161<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="305.523,274.75 305.523,39.25 305.523,39.25"/>
162<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="310.569,274.75 310.569,39.25 310.569,39.25"/>
163<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="315.019,274.75 315.019,39.25 315.019,39.25"/>
164<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="345.189,274.75 345.189,39.25 345.189,39.25"/>
165<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="360.51,274.75 360.51,39.25 360.51,39.25"/>
166<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="371.379,274.75 371.379,39.25 371.379,39.25"/>
167<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="379.811,274.75 379.811,39.25 379.811,39.25"/>
168<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="386.699,274.75 386.699,39.25 386.699,39.25"/>
169<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="392.523,274.75 392.523,39.25 392.523,39.25"/>
170<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="397.569,274.75 397.569,39.25 397.569,39.25"/>
171<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="402.019,274.75 402.019,39.25 402.019,39.25"/>
172<text fill="#000000" style="stroke:none" x="210" y="30" transform="rotate(0, 210, 30)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">Gainplot</text>
173<text fill="#000000" style="stroke:none" x="193" y="314" transform="rotate(0, 193, 314)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">Frequency (Hz)</text>
174<text fill="#000000" style="stroke:none" x="25" y="197" transform="rotate(270, 25, 197)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">Magnitude (dB)</text>
175</g>
176</svg>
diff --git a/scilab/modules/cacsd/help/images/nyquist.svg b/scilab/modules/cacsd/help/images/nyquist.svg
new file mode 100644
index 0000000..d7ee056
--- /dev/null
+++ b/scilab/modules/cacsd/help/images/nyquist.svg
@@ -0,0 +1,150 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg xmlns="http://www.w3.org/2000/svg"
3 xmlns:xlink="http://www.w3.org/1999/xlink"
4 width="612px" height="461px" viewBox="0 0 612 461"
5 style="stroke:none">
6<title>Graphic window number 0</title>
7<desc>
8Creator: GL2PS 1.3.2, (C) 1999-2006 Christophe Geuzaine (geuz@geuz.org)
9For: Scilab
10CreationDate: Fri Apr 16 10:33:37 2010
11</desc>
12<defs>
13</defs>
14<polygon fill="#ffffff" points="0,0 612,0 612,461 0,461"/>
15<g>
16<polygon fill="#ffffff" points="76.5,403.375 76.5,57.625 76.5,57.625"/>
17<polygon fill="#ffffff" points="76.5,403.375 76.5,57.625 76.5,403.375"/>
18<polygon fill="#ffffff" points="76.5,403.375 535.5,403.375 535.5,403.375"/>
19<polygon fill="#ffffff" points="76.5,403.375 535.5,403.375 76.5,403.375"/>
20<polygon fill="#ffffff" points="76.5,403.375 535.5,403.375 535.5,57.625"/>
21<polygon fill="#ffffff" points="76.5,403.375 535.5,57.625 76.5,57.625"/>
22<polyline fill="none" stroke="#000000" stroke-width="0.5" points="457.992,230.49 457.992,230.489 457.992,230.485 457.992,230.479 457.992,230.468 457.993,230.444 457.997,230.396 458.009,230.301 458.057,230.111 458.248,229.734 458.565,229.367 459.01,229.013 459.585,228.679 460.292,228.368 461.136,228.088 462.119,227.845 463.246,227.646 464.521,227.501 465.95,227.418 467.537,227.409 469.287,227.486 471.205,227.664 473.296,227.958 475.563,228.389 478.009,228.977 480.634,229.747 483.437,230.726 486.41,231.947 489.544,233.445 491.167,234.311 492.822,235.261 494.507,236.302 496.217,237.439 497.948,238.679 499.694,240.028 501.447,241.494 503.2,243.082 504.943,244.8 506.667,246.655 508.357,248.654 510.002,250.804 511.585,253.111 513.088,255.583 514.493,258.222 515.776,261.036 516.915,264.025 517.883,267.193 518.65,270.54 519.188,274.061 519.461,277.753 519.438,281.608 519.083,285.612 518.359,289.75 517.849,291.864 517.233,294.002 516.509,296.164 515.671,298.343 514.716,300.538 513.641,302.743 512.441,304.954 511.115,307.166 509.66,309.374 508.073,311.573 506.353,313.757 504.498,315.921 502.507,318.058 500.382,320.162 498.121,322.228 495.727,324.247 493.201,326.215 490.545,328.125 487.764,329.97 484.859,331.744 481.837,333.441 478.703,335.056 475.461,336.582 472.12,338.015 468.685,339.348 465.165,340.579 461.567,341.703 457.901,342.716 454.175,343.615 450.398,344.398 446.58,345.063 442.73,345.609 438.859,346.034 434.975,346.339 431.088,346.523 427.208,346.589 423.344,346.537 419.505,346.369 415.698,346.087 411.933,345.695 408.217,345.197 404.558,344.594 400.96,343.892 397.433,343.095 393.98,342.207 390.607,341.232 387.318,340.177 381.008,337.841 375.077,335.24 372.257,333.852 369.539,332.412 366.92,330.925 364.404,329.396 361.989,327.829 359.675,326.229 357.461,324.6 355.348,322.945 353.333,321.27 349.592,317.869 346.227,314.426 343.218,310.963 340.55,307.502 338.203,304.06 336.156,300.653 334.389,297.294 332.882,293.994 331.617,290.76 330.573,287.599 329.732,284.517 329.079,281.517 328.595,278.602 328.268,275.773 328.081,273.033 328.022,270.379 328.08,267.812 328.242,265.331 328.499,262.934 328.841,260.62 329.26,258.387 329.747,256.233 330.296,254.156 331.552,250.222 332.982,246.567 334.549,243.171 336.221,240.018 337.972,237.087 339.781,234.364 341.63,231.833 343.507,229.479 345.397,227.289 347.293,225.25 349.187,223.35 351.071,221.581 352.941,219.931 354.793,218.393 356.624,216.958 358.429,215.619 360.208,214.37 361.96,213.203 365.374,211.095 368.665,209.257 371.83,207.654 374.869,206.256 377.784,205.039 380.577,203.98 383.252,203.062 385.813,202.268 388.264,201.583 390.61,200.996 392.855,200.496 397.06,199.719 400.913,199.189 404.447,198.855 407.693,198.679 410.676,198.629 413.423,198.679 415.956,198.81 418.293,199.005 420.454,199.251 422.456,199.538 424.311,199.855 426.034,200.197 427.636,200.557 429.128,200.93 431.818,201.702 434.169,202.488 436.235,203.273 438.058,204.046 439.674,204.8 441.113,205.531 442.399,206.237 443.553,206.916 444.592,207.567 446.382,208.79 447.86,209.91 449.095,210.934 450.136,211.872 451.022,212.732 451.783,213.522 453.011,214.92 453.952,216.116 454.688,217.148 455.273,218.046 455.748,218.834 456.137,219.53 456.733,220.704 457.16,221.653 457.477,222.437 457.719,223.094 457.907,223.653 458.178,224.553 458.359,225.244 458.487,225.792 458.58,226.236 458.703,226.915 458.779,227.407 458.829,227.78 458.889,228.309 458.922,228.666 458.956,229.117 458.972,229.39 458.985,229.704 458.991,229.879 458.996,230.069 458.998,230.17 458.999,230.275 458.999,230.279 458.999,230.721 458.999,230.725 458.998,230.83 458.996,230.931 458.991,231.121 458.985,231.296 458.972,231.61 458.956,231.883 458.922,232.334 458.889,232.691 458.829,233.22 458.779,233.593 458.703,234.085 458.58,234.764 458.487,235.208 458.359,235.756 458.178,236.447 457.907,237.347 457.719,237.906 457.477,238.563 457.16,239.347 456.733,240.296 456.137,241.47 455.748,242.166 455.273,242.954 454.688,243.852 453.952,244.884 453.011,246.08 451.783,247.478 451.022,248.268 450.136,249.128 449.095,250.066 447.86,251.09 446.382,252.21 444.592,253.433 443.553,254.084 442.399,254.763 441.113,255.469 439.674,256.2 438.058,256.954 436.235,257.727 434.169,258.512 431.818,259.298 429.128,260.07 427.636,260.443 426.034,260.803 424.311,261.145 422.456,261.462 420.454,261.749 418.293,261.995 415.956,262.19 413.423,262.321 410.676,262.371 407.693,262.321 404.447,262.145 400.913,261.811 397.06,261.281 392.855,260.504 390.61,260.004 388.264,259.417 385.813,258.732 383.252,257.938 380.577,257.02 377.784,255.961 374.869,254.744 371.83,253.346 368.665,251.743 365.374,249.905 361.96,247.797 360.208,246.63 358.429,245.381 356.624,244.042 354.793,242.607 352.941,241.069 351.071,239.419 349.187,237.65 347.293,235.75 345.397,233.711 343.507,231.521 341.63,229.167 339.781,226.636 337.972,223.913 336.221,220.982 334.549,217.829 332.982,214.433 331.552,210.778 330.296,206.844 329.747,204.767 329.26,202.613 328.841,200.38 328.499,198.066 328.242,195.669 328.08,193.188 328.022,190.621 328.081,187.967 328.268,185.227 328.595,182.398 329.079,179.483 329.732,176.483 330.573,173.401 331.617,170.24 332.882,167.006 334.389,163.706 336.156,160.347 338.203,156.94 340.55,153.498 343.218,150.037 346.227,146.574 349.592,143.131 353.333,139.73 355.348,138.055 357.461,136.4 359.675,134.771 361.989,133.171 364.404,131.604 366.92,130.075 369.539,128.588 372.257,127.148 375.077,125.76 381.008,123.159 387.318,120.823 390.607,119.768 393.98,118.793 397.433,117.905 400.96,117.108 404.558,116.406 408.217,115.803 411.933,115.305 415.698,114.913 419.505,114.631 423.344,114.463 427.208,114.411 431.088,114.477 434.975,114.661 438.859,114.966 442.73,115.391 446.58,115.937 450.398,116.602 454.175,117.385 457.901,118.284 461.567,119.297 465.165,120.421 468.685,121.652 472.12,122.985 475.461,124.418 478.703,125.944 481.837,127.559 484.859,129.256 487.764,131.03 490.545,132.875 493.201,134.785 495.727,136.753 498.121,138.772 500.382,140.838 502.507,142.942 504.498,145.079 506.353,147.243 508.073,149.427 509.66,151.626 511.115,153.834 512.441,156.046 513.641,158.257 514.716,160.462 515.671,162.657 516.509,164.836 517.233,166.998 517.849,169.136 518.359,171.25 519.083,175.388 519.438,179.392 519.461,183.247 519.188,186.939 518.65,190.46 517.883,193.807 516.915,196.975 515.776,199.964 514.493,202.778 513.088,205.417 511.585,207.889 510.002,210.196 508.357,212.346 506.667,214.345 504.943,216.2 503.2,217.918 501.447,219.506 499.694,220.972 497.948,222.321 496.217,223.561 494.507,224.698 492.822,225.739 491.167,226.689 489.544,227.555 486.41,229.053 483.437,230.274 480.634,231.253 478.009,232.023 475.563,232.611 473.296,233.042 471.205,233.336 469.287,233.514 467.537,233.591 465.95,233.582 464.521,233.499 463.246,233.354 462.119,233.155 461.136,232.912 460.292,232.632 459.585,232.321 459.01,231.987 458.565,231.633 458.248,231.266 458.057,230.889 458.009,230.699 457.997,230.604 457.993,230.556 457.992,230.532 457.992,230.521 457.992,230.515 457.992,230.511 457.992,230.51"/>
23<polygon fill="#000000" points="461.451,240.104 457.993,230.325 454.356,240.039"/>
24<polyline fill="none" stroke="#000000" stroke-width="0.5" points="457.992,230.49 457.993,230.325"/>
25<polygon fill="#000000" points="514.318,294.924 512.349,305.108 520.403,298.572"/>
26<polyline fill="none" stroke="#000000" stroke-width="0.5" points="512.441,304.954 512.349,305.108"/>
27<polygon fill="#000000" points="391.146,338.414 380.794,337.748 388.295,344.911"/>
28<polyline fill="none" stroke="#000000" stroke-width="0.5" points="381.008,337.841 380.794,337.748"/>
29<polygon fill="#000000" points="341.591,304.53 334.316,297.136 335.136,307.476"/>
30<polyline fill="none" stroke="#000000" stroke-width="0.5" points="334.389,297.294 334.316,297.136"/>
31<polygon fill="#000000" points="332.193,256.745 333.055,246.408 325.75,253.772"/>
32<polyline fill="none" stroke="#000000" stroke-width="0.5" points="332.982,246.567 333.055,246.408"/>
33<polygon fill="#000000" points="370.15,211.725 378.007,204.954 367.636,205.09"/>
34<polyline fill="none" stroke="#000000" stroke-width="0.5" points="377.784,205.039 378.007,204.954"/>
35<polygon fill="#000000" points="388.155,256.098 377.784,255.961 385.641,262.733"/>
36<polyline fill="none" stroke="#000000" stroke-width="0.5" points="378.007,256.046 377.784,255.961"/>
37<polygon fill="#000000" points="340.287,221.797 332.982,214.433 333.845,224.77"/>
38<polyline fill="none" stroke="#000000" stroke-width="0.5" points="333.055,214.592 332.982,214.433"/>
39<polygon fill="#000000" points="333.569,174.045 334.389,163.706 327.114,171.1"/>
40<polyline fill="none" stroke="#000000" stroke-width="0.5" points="334.316,163.864 334.389,163.706"/>
41<polygon fill="#000000" points="373.507,130.322 381.008,123.159 370.657,123.825"/>
42<polyline fill="none" stroke="#000000" stroke-width="0.5" points="380.794,123.252 381.008,123.159"/>
43<polygon fill="#000000" points="504.387,149.511 512.441,156.046 510.473,145.863"/>
44<polyline fill="none" stroke="#000000" stroke-width="0.5" points="512.349,155.892 512.441,156.046"/>
45<polygon fill="#000000" points="461.628,240.224 457.992,230.51 454.534,240.289"/>
46<polyline fill="none" stroke="#000000" stroke-width="0.5" points="457.993,230.675 457.992,230.51"/>
47<polygon fill="#ffffee" points="506,148 506,156 514,156"/>
48<polygon fill="#ffffee" points="506,148 514,156 514,148"/>
49<polyline fill="none" stroke="#000000" stroke-width="0.5" points="506,148 506,156 514,156 514,148 506,148"/>
50<text fill="#000000" style="stroke:none" x="379" y="254" transform="rotate(0, 379, 254)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-3.36</text>
51<text fill="#000000" style="stroke:none" x="379" y="203" transform="rotate(0, 379, 203)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">3.36</text>
52<text fill="#000000" style="stroke:none" x="334" y="212" transform="rotate(0, 334, 212)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-2.36</text>
53<text fill="#000000" style="stroke:none" x="334" y="245" transform="rotate(0, 334, 245)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">2.36</text>
54<text fill="#000000" style="stroke:none" x="335" y="162" transform="rotate(0, 335, 162)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-1.98</text>
55<text fill="#000000" style="stroke:none" x="335" y="295" transform="rotate(0, 335, 295)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">1.98</text>
56<text fill="#000000" style="stroke:none" x="382" y="121" transform="rotate(0, 382, 121)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-1.74</text>
57<text fill="#000000" style="stroke:none" x="382" y="336" transform="rotate(0, 382, 336)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">1.74</text>
58<text fill="#000000" style="stroke:none" x="513" y="154" transform="rotate(0, 513, 154)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-1.33</text>
59<text fill="#000000" style="stroke:none" x="513" y="303" transform="rotate(0, 513, 303)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">1.33</text>
60<text fill="#000000" style="stroke:none" x="459" y="228" transform="rotate(0, 459, 228)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0.001</text>
61<polygon fill="#ffffee" points="435.5,123.5 435.5,147.5 506.5,147.5"/>
62<polygon fill="#ffffee" points="435.5,123.5 506.5,147.5 506.5,123.5"/>
63<polyline fill="none" stroke="#bebebe" stroke-width="0.5" points="435.5,123.5 435.5,147.5 506.5,147.5 506.5,123.5 435.5,123.5"/>
64<text fill="#000000" style="stroke:none" x="436" y="134" transform="rotate(0, 436, 134)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">1.331+0.684i</text>
65<text fill="#000000" style="stroke:none" x="436" y="146" transform="rotate(0, 436, 146)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">1.352 Hz</text>
66<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,403.375 76.5,57.625"/>
67<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,403.375 69.6152,403.375"/>
68<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,345.75 69.6152,345.75"/>
69<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,288.125 69.6152,288.125"/>
70<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,230.5 69.6152,230.5"/>
71<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,172.875 69.6152,172.875"/>
72<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,115.25 69.6152,115.25"/>
73<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,57.625 69.6152,57.625"/>
74<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,388.969 72.3691,388.969"/>
75<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,374.562 72.3691,374.562"/>
76<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,360.156 72.3691,360.156"/>
77<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,331.344 72.3691,331.344"/>
78<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,316.938 72.3691,316.938"/>
79<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,302.531 72.3691,302.531"/>
80<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,273.719 72.3691,273.719"/>
81<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,259.312 72.3691,259.312"/>
82<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,244.906 72.3691,244.906"/>
83<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,216.094 72.3691,216.094"/>
84<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,201.688 72.3691,201.688"/>
85<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,187.281 72.3691,187.281"/>
86<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,158.469 72.3691,158.469"/>
87<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,144.062 72.3691,144.062"/>
88<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,129.656 72.3691,129.656"/>
89<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,100.844 72.3691,100.844"/>
90<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,86.4375 72.3691,86.4375"/>
91<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,72.0312 72.3691,72.0312"/>
92<text fill="#000000" style="stroke:none" x="46" y="408" transform="rotate(-0, 46, 408)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-1.5</text>
93<text fill="#000000" style="stroke:none" x="46" y="351" transform="rotate(-0, 46, 351)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-1.0</text>
94<text fill="#000000" style="stroke:none" x="46" y="293" transform="rotate(-0, 46, 293)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-0.5</text>
95<text fill="#000000" style="stroke:none" x="51" y="235" transform="rotate(-0, 51, 235)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0.0</text>
96<text fill="#000000" style="stroke:none" x="52" y="178" transform="rotate(-0, 52, 178)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0.5</text>
97<text fill="#000000" style="stroke:none" x="52" y="120" transform="rotate(-0, 52, 120)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">1.0</text>
98<text fill="#000000" style="stroke:none" x="53" y="63" transform="rotate(-0, 53, 63)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">1.5</text>
99<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="76.5,403.375 535.5,403.375 535.5,403.375"/>
100<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="76.5,345.75 535.5,345.75 535.5,345.75"/>
101<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="76.5,288.125 535.5,288.125 535.5,288.125"/>
102<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="76.5,230.5 535.5,230.5 535.5,230.5"/>
103<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="76.5,172.875 535.5,172.875 535.5,172.875"/>
104<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="76.5,115.25 535.5,115.25 535.5,115.25"/>
105<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="76.5,57.625 535.5,57.625 535.5,57.625"/>
106<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,403.375 535.5,403.375"/>
107<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.5,403.375 76.5,408.55"/>
108<polyline fill="none" stroke="#000000" stroke-width="0.5" points="153,403.375 153,408.55"/>
109<polyline fill="none" stroke="#000000" stroke-width="0.5" points="229.5,403.375 229.5,408.55"/>
110<polyline fill="none" stroke="#000000" stroke-width="0.5" points="306,403.375 306,408.55"/>
111<polyline fill="none" stroke="#000000" stroke-width="0.5" points="382.5,403.375 382.5,408.55"/>
112<polyline fill="none" stroke="#000000" stroke-width="0.5" points="459,403.375 459,408.55"/>
113<polyline fill="none" stroke="#000000" stroke-width="0.5" points="535.5,403.375 535.5,408.55"/>
114<polyline fill="none" stroke="#000000" stroke-width="0.5" points="95.625,403.375 95.625,406.48"/>
115<polyline fill="none" stroke="#000000" stroke-width="0.5" points="114.75,403.375 114.75,406.48"/>
116<polyline fill="none" stroke="#000000" stroke-width="0.5" points="133.875,403.375 133.875,406.48"/>
117<polyline fill="none" stroke="#000000" stroke-width="0.5" points="172.125,403.375 172.125,406.48"/>
118<polyline fill="none" stroke="#000000" stroke-width="0.5" points="191.25,403.375 191.25,406.48"/>
119<polyline fill="none" stroke="#000000" stroke-width="0.5" points="210.375,403.375 210.375,406.48"/>
120<polyline fill="none" stroke="#000000" stroke-width="0.5" points="248.625,403.375 248.625,406.48"/>
121<polyline fill="none" stroke="#000000" stroke-width="0.5" points="267.75,403.375 267.75,406.48"/>
122<polyline fill="none" stroke="#000000" stroke-width="0.5" points="286.875,403.375 286.875,406.48"/>
123<polyline fill="none" stroke="#000000" stroke-width="0.5" points="325.125,403.375 325.125,406.48"/>
124<polyline fill="none" stroke="#000000" stroke-width="0.5" points="344.25,403.375 344.25,406.48"/>
125<polyline fill="none" stroke="#000000" stroke-width="0.5" points="363.375,403.375 363.375,406.48"/>
126<polyline fill="none" stroke="#000000" stroke-width="0.5" points="401.625,403.375 401.625,406.48"/>
127<polyline fill="none" stroke="#000000" stroke-width="0.5" points="420.75,403.375 420.75,406.48"/>
128<polyline fill="none" stroke="#000000" stroke-width="0.5" points="439.875,403.375 439.875,406.48"/>
129<polyline fill="none" stroke="#000000" stroke-width="0.5" points="478.125,403.375 478.125,406.48"/>
130<polyline fill="none" stroke="#000000" stroke-width="0.5" points="497.25,403.375 497.25,406.48"/>
131<polyline fill="none" stroke="#000000" stroke-width="0.5" points="516.375,403.375 516.375,406.48"/>
132<text fill="#000000" style="stroke:none" x="66" y="420" transform="rotate(-0, 66, 420)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-1.5</text>
133<text fill="#000000" style="stroke:none" x="142" y="420" transform="rotate(-0, 142, 420)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-1.0</text>
134<text fill="#000000" style="stroke:none" x="219" y="420" transform="rotate(-0, 219, 420)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">-0.5</text>
135<text fill="#000000" style="stroke:none" x="298" y="420" transform="rotate(-0, 298, 420)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0.0</text>
136<text fill="#000000" style="stroke:none" x="375" y="420" transform="rotate(-0, 375, 420)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0.5</text>
137<text fill="#000000" style="stroke:none" x="451" y="420" transform="rotate(-0, 451, 420)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">1.0</text>
138<text fill="#000000" style="stroke:none" x="528" y="420" transform="rotate(-0, 528, 420)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">1.5</text>
139<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="76.5,403.375 76.5,57.625 76.5,57.625"/>
140<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="153,403.375 153,57.625 153,57.625"/>
141<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="229.5,403.375 229.5,57.625 229.5,57.625"/>
142<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="306,403.375 306,57.625 306,57.625"/>
143<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="382.5,403.375 382.5,57.625 382.5,57.625"/>
144<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="459,403.375 459,57.625 459,57.625"/>
145<polyline fill="none" stroke="#d3d3d3" stroke-width="0.5" stroke-dasharray="4,4,4,4" points="535.5,403.375 535.5,57.625 535.5,57.625"/>
146<text fill="#000000" style="stroke:none" x="274" y="49" transform="rotate(0, 274, 49)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">Nyquist plot</text>
147<text fill="#000000" style="stroke:none" x="278" y="436" transform="rotate(0, 278, 436)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">Re(h(2i&#x03c0;f))</text>
148<text fill="#000000" style="stroke:none" x="38" y="258" transform="rotate(270, 38, 258)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">Im(h(2i&#x03c0;f))</text>
149</g>
150</svg>
diff --git a/scilab/modules/cacsd/macros/gainplot.sci b/scilab/modules/cacsd/macros/gainplot.sci
index c2260c4..6a1bd2d 100644
--- a/scilab/modules/cacsd/macros/gainplot.sci
+++ b/scilab/modules/cacsd/macros/gainplot.sci
@@ -1,89 +1,109 @@
1// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab 1// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2// Copyright (C) INRIA Serge Steer 2// Copyright (C) 2010 - INRIA - Serge Steer
3// This file must be used under the terms of the CeCILL. 3// This file must be used under the terms of the CeCILL.
4// This source file is licensed as described in the file COPYING, which 4// This source file is licensed as described in the file COPYING, which
5// you should have received as part of this distribution. The terms 5// you should have received as part of this distribution. The terms
6// are also available at 6// are also available at
7// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt 7// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
8 8
9function []=gainplot(varargin) 9function []=gainplot(varargin)
10 rhs=size(varargin) 10 rhs=size(varargin)
11 if type(varargin($))==10 then 11 if type(varargin($))==10 then
12 comments=varargin($),rhs=rhs-1; 12 comments=varargin($);
13 rhs=rhs-1;
13 else 14 else
14 comments=[]; 15 comments=[];
15 end 16 end
16 fname="gainplot";//for error messages 17 fname="gainplot";//for error messages
17 18
18 fmax=[]; 19 fmax=[];
19 if or(typeof(varargin(1))==['state-space' 'rational']) then 20 if or(typeof(varargin(1))==["state-space" "rational"]) then
20 //sys,fmin,fmax [,pas] or sys,frq 21 //sys,fmin,fmax [,pas] or sys,frq
21 refdim=1 //for error message 22 refdim=1 //for error message
22 if rhs==1 then 23 if rhs==1 then
23 [frq,repf]=repfreq(varargin(1),1d-3,1d3) 24 [frq,repf]=repfreq(varargin(1),1d-3,1d3);
24 elseif rhs==2 then //sys,frq 25 elseif rhs==2 then //sys,frq
25 if size(varargin(2),2)<2 then 26 if size(varargin(2),2)<2 then
26 error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"),.. 27 error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"),..
27 fname,2,1)) 28 fname,2,1));
28 end 29 end
29 [frq,repf]=repfreq(varargin(1:rhs)) 30 [frq,repf]=repfreq(varargin(1:rhs));
30 elseif or(rhs==(3:4)) then //sys,fmin,fmax [,pas] 31 elseif or(rhs==(3:4)) then //sys,fmin,fmax [,pas]
31 [frq,repf]=repfreq(varargin(1:rhs)) 32 [frq,repf]=repfreq(varargin(1:rhs));
32 else 33 else
33 error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"),fname,1,5)) 34 error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"),fname,1,5))
34 end 35 end
35 [phi,d]=phasemag(repf) 36 [phi,d]=phasemag(repf);
36 elseif type(varargin(1))==1 then 37 elseif type(varargin(1))==1 then
37 //frq,db,phi [,comments] or frq, repf [,comments] 38 //frq,db,phi [,comments] or frq, repf [,comments]
38 refdim=2 39 refdim=2
39 select rhs 40 select rhs
40 case 2 then //frq,repf 41 case 2 then //frq,repf
41 frq=varargin(1); 42 frq=varargin(1);
42 if size(frq,2)<2 then 43 if size(frq,2)<2 then
43 error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"),.. 44 error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"),..
44 fname,1,1)) 45 fname,1,1))
45 end 46 end
46 if size(frq,2)<>size(varargin(2),2) then 47 if size(frq,2)<>size(varargin(2),2) then
47 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),.. 48 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),..
48 fname,1,2)) 49 fname,1,2))
49 end 50 end
50 51
51 [phi,d]=phasemag(varargin(2)) 52 [phi,d]=phasemag(varargin(2))
52 case 3 then //frq,db,phi 53 case 3 then //frq,db,phi
53 [frq,d]=varargin(1:rhs-1) 54 [frq,d]=varargin(1:rhs-1)
54 if size(frq,2)<>size(d,2) then 55 if size(frq,2)<>size(d,2) then
55 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),.. 56 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),..
56 fname,1,2)) 57 fname,1,2))
57 end 58 end
58 else 59 else
59 error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"),fname,2,4)) 60 error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"),fname,2,4))
60 end 61 end
61 else 62 else
62 error(msprintf(_("%s: Wrong type for input argument #%d: Linear dynamical system or row vector of floats expected.\n"),fname,1)) 63 error(msprintf(_("%s: Wrong type for input argument #%d: Linear dynamical system or row vector of floats expected.\n"),fname,1))
63 end; 64 end;
64 65
65 frq=frq';d=d' 66 frq=frq';
66 [n,mn]=size(d) 67 d=d';
67 if and(size(comments,'*')<>[0 mn]) then 68 [n,mn]=size(d);
68 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same number of elements expected.\n"),... 69 if and(size(comments,"*")<>[0 mn]) then
69 fname,refdim,rhs+1)) 70 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same number of elements expected.\n"),...
71 fname,refdim,rhs+1))
70 end 72 end
71 73
72 // 74 //
73 drawlater() 75 drawlater()
74 axes = gca() ;axes.axes_visible='on'; 76 axes = gca() ;
75 axes.data_bounds = [mini(frq),mini(d);maxi(frq),maxi(d)]; 77 if size(axes.children,"*")==0 then
78 axes.data_bounds=[min(frq),min(d);max(frq),max(d)]
79 axes.x_label.text=_("Frequency (Hz)")
80 axes.y_label.text=_("Magnitude (dB)")
81
82 else
83 axes.data_bounds=[min([min(frq),min(d)],axes.data_bounds(1,:));
84 max([max(frq),max(d)],axes.data_bounds(2,:))];
85 end
86 axes.axes_visible="on";
76 axes.log_flags = "lnn" ; 87 axes.log_flags = "lnn" ;
77 axes.grid=color("lightgrey")*ones(1,3); 88 axes.grid=color("lightgrey")*ones(1,3);
78 89
79 if size(d,2)>1&size(frq,2)==1 then 90 if size(d,2)>1&size(frq,2)==1 then
80 xpolys(frq(:,ones(1,mn)),d,1:mn) 91 xpolys(frq(:,ones(1,mn)),d,1:mn)
92 e=gce();
81 else 93 else
82 xpolys(frq,d,1:mn) 94 xpolys(frq,d,1:mn)
95 e=gce();
83 end 96 end
84 if comments<>[] then 97 for i=1:size(e.children,"*")
98 datatipInitStruct(e.children(i),"formatfunction","formatGainplotTip")
99 end
100 if comments<>[] then
85 legend(comments) 101 legend(comments)
86 end 102 end
87 xtitle(' ',_("Frequency (Hz)"),_("Magnitude (Db)"));
88 drawnow() 103 drawnow()
89endfunction 104endfunction
105function str=formatGainplotTip(curve,pt,index)
106//this function is called by the datatips mechanism to format the tip
107//string for the magnitude bode curves
108 str=msprintf("%.4g"+_("Hz")+"\n%.4g"+_("dB"), pt(1),pt(2))
109endfunction
diff --git a/scilab/modules/cacsd/macros/nyquist.sci b/scilab/modules/cacsd/macros/nyquist.sci
index d3dc8bb..c7bf6c4 100644
--- a/scilab/modules/cacsd/macros/nyquist.sci
+++ b/scilab/modules/cacsd/macros/nyquist.sci
@@ -3,203 +3,234 @@
3// This file must be used under the terms of the CeCILL. 3// This file must be used under the terms of the CeCILL.
4// This source file is licensed as described in the file COPYING, which 4// This source file is licensed as described in the file COPYING, which
5// you should have received as part of this distribution. The terms 5// you should have received as part of this distribution. The terms
6// are also available at 6// are also available at
7// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt 7// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
8 8
9function nyquist(varargin) 9function nyquist(varargin)
10// Nyquist plot 10// Nyquist plot
11//! 11//!
12 rhs=size(varargin) 12 rhs=size(varargin);
13 if type(varargin($))==10 then 13
14 comments=varargin($),rhs=rhs-1; 14 if type(varargin(rhs))==10 then
15 comments=varargin(rhs);
16 rhs=rhs-1;
15 else 17 else
16 comments=[]; 18 comments=[];
17 end 19 end
18 fname="nyquist";//for error messages 20 fname="nyquist";//for error messages
19 fmax=[]; 21 fmax=[];
20 if or(typeof(varargin(1))==['state-space' 'rational']) then 22 if or(typeof(varargin(1))==["state-space" "rational"]) then
21 //sys,fmin,fmax [,pas] or sys,frq 23 //sys,fmin,fmax [,pas] or sys,frq
22 refdim=1 //for error message 24 refdim=1; //for error message
23 sltyp=varargin(1).dt 25 sltyp=varargin(1).dt;
24 if rhs==1 then 26 if rhs==1 then
25 [frq,repf,splitf]=repfreq(varargin(1),1d-3,1d3) 27 [frq,repf,splitf]=repfreq(varargin(1),1d-3,1d3);
26 elseif rhs==2 then //sys,frq 28 elseif rhs==2 then //sys,frq
27 if size(varargin(2),2)<2 then 29 if size(varargin(2),2)<2 then
28 error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"),.. 30 error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"),fname,2,1))
29 fname,2,1))
30 end 31 end
31 [frq,repf]=repfreq(varargin(1:rhs)) 32 [frq,repf]=repfreq(varargin(1:rhs));
32 elseif or(rhs==(3:4)) then //sys,fmin,fmax [,pas] 33 elseif or(rhs==(3:4)) then //sys,fmin,fmax [,pas]
33 [frq,repf,splitf]=repfreq(varargin(1:rhs)) 34 [frq,repf,splitf]=repfreq(varargin(1:rhs));
34 else 35 else
35 error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"),fname,1,5)) 36 error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"),fname,1,5))
36 end 37 end
37 elseif type(varargin(1))==1 then 38 elseif type(varargin(1))==1 then
38 //frq,db,phi [,comments] or frq, repf [,comments] 39 //frq,db,phi [,comments] or frq, repf [,comments]
39 refdim=2 40 refdim=2;
40 sltyp='x';splitf=[];splitf=1 41 sltyp="x";
42 splitf=[];
43 splitf=1;
41 select rhs 44 select rhs
42 case 2 then //frq,repf 45 case 2 then //frq,repf
43 frq=varargin(1); 46 frq=varargin(1);
44 repf=varargin(2) 47 repf=varargin(2);
45 if size(frq,2)<2 then 48 if size(frq,2)<2 then
46 error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"),.. 49 error(msprintf(_("%s: Wrong size for input argument #%d: A row vector with length>%d expected.\n"),fname,1,1))
47 fname,1,1))
48 end 50 end
49 if size(frq,2)<>size(varargin(2),2) then 51 if size(frq,2)<>size(varargin(2),2) then
50 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),.. 52 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),fname,1,2))
51 fname,1,2))
52 end 53 end
53 54
54 case 3 then //frq,db,phi 55 case 3 then //frq,db,phi
55 frq=varargin(1); 56 frq=varargin(1);
56 if size(frq,2)<>size(varargin(2),2) then 57 if size(frq,2)<>size(varargin(2),2) then
57 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),.. 58 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),fname,1,2));
58 fname,1,2))
59 end 59 end
60 if size(frq,2)<>size(varargin(3),2) then 60 if size(frq,2)<>size(varargin(3),2) then
61 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),.. 61 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),fname,1,3));
62 fname,1,3))
63 end 62 end
64 repf=exp(log(10)*varargin(2)/20 + %pi*%i/180*varargin(3)); 63 repf=exp(log(10)*varargin(2)/20 + %pi*%i/180*varargin(3));
65 64
66 else 65 else
67 error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"),fname,2,4)) 66 error(msprintf(_("%s: Wrong number of input arguments: %d to %d expected.\n"),fname,2,4))
68 end 67 end
69 else 68 else
70 error(msprintf(_("%s: Wrong type for input argument #%d: Linear dynamical system or row vector of floats expected.\n"),fname,1)) 69 error(msprintf(_("%s: Wrong type for input argument #%d: Linear dynamical system or row vector of floats expected.\n"),fname,1));
71 end; 70 end;
72 if size(frq,1)==1 then 71 if size(frq,1)==1 then
73 ilf=0 72 ilf=0;
74 else 73 else
75 ilf=1 74 ilf=1;
76 end 75 end
77 76
78 [mn,n]=size(repf) 77 [mn,n]=size(repf);
79 if and(size(comments,'*')<>[0 mn]) then 78 if and(size(comments,"*")<>[0 mn]) then
80 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same number of elements expected.\n"),... 79 error(msprintf(_("%s: Incompatible input arguments #%d and #%d: Same number of elements expected.\n"),fname,refdim,rhs+1));
81 fname,refdim,rhs+1))
82 end 80 end
83 // 81 //
84 82
85 repi=imag(repf);repf=real(repf) 83 repi=imag(repf);
84 repf=real(repf);
86 85
87 // computing bounds of graphic window 86 // computing bounds of graphic window
88 mnx=mini(repf); 87 mnx=min(-1,min(repf));// to make the critical point visible
89 mny=mini(repi); 88 mxx=max(-1,max(repf));
90 mxx=maxi(repf); 89
91 mxy=maxi(repi); 90 mxy=max(0,max(abs(repi)));
91 mny=min(0,-mxy);
92 92
93 dx=(mxx-mnx)/30;dy=(mxy-mny)/30 93 dx=(mxx-mnx)/30;
94 rect=[mnx-dx,mny-dy;mxx+dx,mxy+dy] 94 dy=(mxy-mny)/30;
95 rect=[mnx-dx,mny-dy;mxx+dx,mxy+dy];
95 96
96 drawlater() 97 drawlater()
97 ax=gca(); 98 ax=gca();
98 ax.data_bounds=rect 99 if ax.children==[] then
99 ax.axes_visible='on'; 100 ax.data_bounds=rect;
100 ax.grid=color('lightgrey')*ones(1,3) 101 ax.axes_visible="on";
101 // drawing the curves 102 ax.grid=color("lightgrey")*ones(1,3)
103 ax.title.text=_("Nyquist plot");
104 if sltyp=="c" then
105 ax.x_label.text=_("Re(h(2iπf))");
106 ax.y_label.text=_("Im(h(2iπf))");
107 elseif sltyp=="x" then
108 ax.x_label.text=_("Re");
109 ax.y_label.text=_("Im");
110 else
111 ax.x_label.text=_("Re(h(exp(2iπf*dt)))");
112 ax.y_label.text=_("Im(h(exp(2iπf*dt)))");
113 end
114 else
115 ax.data_bounds=[min(ax.data_bounds(1,:),rect(1,:));max(ax.data_bounds(2,:),rect(2,:))];
116 end
117 // drawing the curves
102 splitf($+1)=n+1; 118 splitf($+1)=n+1;
103 119
104 ksplit=1;sel=splitf(ksplit):splitf(ksplit+1)-1; 120 ksplit=1;sel=splitf(ksplit):splitf(ksplit+1)-1;
105 R=[repf(:,sel)]; I=[repi(:,sel)]; 121 R=[repf(:,sel)]; I=[repi(:,sel)];
106 for ksplit=2:size(splitf,'*')-1 122 F=frq(:,sel);
107 sel=splitf(ksplit):splitf(ksplit+1)-1 123 for ksplit=2:size(splitf,"*")-1
124 sel=splitf(ksplit):splitf(ksplit+1)-1;
108 R=[R %nan(ones(mn,1)) repf(:,sel)]; 125 R=[R %nan(ones(mn,1)) repf(:,sel)];
109 I=[I %nan(ones(mn,1)) repi(:,sel)]; 126 I=[I %nan(ones(mn,1)) repi(:,sel)];
127 F=[F %nan(ones(size(frq,1),1)) frq(:,sel)];
110 end 128 end
111 Curves=[] 129 Curves=[]
130
131 kf=1
112 for k=1:mn 132 for k=1:mn
113 xpoly(R(k,:),I(k,:)) 133 xpoly([R(k,:) R(k,$:-1:1)],[I(k,:) -I(k,$:-1:1)]);
114 e=gce();e.foreground=k; 134 e=gce();e.foreground=k;
115 Curves=[Curves e]; 135 datatipInitStruct(e,"formatfunction","formatNyquistTip","freq",[F(kf,:) F(kf,$:-1:1)])
136 Curves=[Curves,e];
137 kf=kf+ilf;
116 end 138 end
117 clear R I 139 clear R I
118 140
119 kk=1;p0=[repf(:,kk) repi(:,kk)];ks=1;d=0; 141 kk=1;p0=[repf(:,kk) repi(:,kk)];ks=1;d=0;
120 dx=rect(2,1)-rect(1,1) 142 dx=rect(2,1)-rect(1,1);
121 dy=rect(2,2)-rect(1,2) 143 dy=rect(2,2)-rect(1,2);
122 dx2=dx^2;dy2=dy^2 144 dx2=dx^2;
145 dy2=dy^2;
123 146
124 // collect significant frequencies along the curve 147 // collect significant frequencies along the curve
125 //------------------------------------------------------- 148 //-------------------------------------------------------
126 Ic=min(cumsum(sqrt((diff(repf,1,'c').^2)/dx2+ (diff(repi,1,'c').^2)/dy2),2),'r'); 149 Ic=min(cumsum(sqrt((diff(repf,1,"c").^2)/dx2+ (diff(repi,1,"c").^2)/dy2),2),"r");
127 kk=1 150 kk=1;
128 L=0 151 L=0;
129 DIc=0.2 152 DIc=0.2;
130 while %t 153 while %t
131 ksup=find(Ic-L>DIc) 154 ksup=find(Ic-L>DIc);
132 if ksup==[] then break,end 155 if ksup==[] then break,end
133 kk1=mini(ksup) 156 kk1=mini(ksup);
134 L=Ic(kk1) 157 L=Ic(kk1);
135 Ic(1:kk1)=[] 158 Ic(1:kk1)=[];
136 kk=kk+kk1 159 kk=kk+kk1;
137 160
138 if mini(abs(frq(:,ks($))-frq(:,kk))./abs(frq(:,kk)))>0.001 then 161 if mini(abs(frq(:,ks($))-frq(:,kk))./abs(frq(:,kk)))>0.001 then
139 if mini(sqrt(((repf(:,ks)-repf(:,kk)*ones(ks)).^2)/dx2+.. 162 if mini(sqrt(((repf(:,ks)-repf(:,kk)*ones(ks)).^2)/dx2+..
140 ((repi(:,ks)-repi(:,kk)*ones(ks)).^2)/dy2)) >DIc then 163 ((repi(:,ks)-repi(:,kk)*ones(ks)).^2)/dy2)) >DIc then
141 ks=[ks kk] 164 ks=[ks kk];
142 d=0 165 d=0;
143 end 166 end
144 end 167 end
145 end 168 end
146 if ks($)~=n then 169 if ks($)~=n then
147 if mini(((repf(:,ks(1))-repf(:,n))^2)/dx2+((repi(:,ks(1))-repi(:,n))^2)/dy2)>0.01 170 if mini(((repf(:,ks(1))-repf(:,n))^2)/dx2+((repi(:,ks(1))-repi(:,n))^2)/dy2)>0.01 then
148 ks=[ks n] 171 ks=[ks n];
149 end 172 end
150 end 173 end
151 // display of parametrization (frequencies along the curve) 174 // display of parametrization (frequencies along the curve)
152 //------------------------------------------------------- 175 //-------------------------------------------------------
153 kf=1 176 kf=1
154 frmt=format();//preserve current format
155 if ks($)<size(repf,2) then last=$;else last=$-1;end 177 if ks($)<size(repf,2) then last=$;else last=$-1;end
156 for k=1:mn, 178 for k=1:mn,
157 L=[] 179 L=[];
158 for kks=ks 180 for kks=ks
159 if abs(frq(kf,kks))>9999|abs(frq(kf,kks))<0.001 then 181 xstring(repf(k,kks),repi(k,kks),msprintf("%-0.3g",frq(kf,kks)),0);
160 format('e',6) 182 e=gce();e.font_foreground=k;
161 else 183 L=[e L];
162 format('v',6) 184 if abs(repi(k,kks))>mxy/20 then //not to overlap labels
185 xstring(repf(k,kks),-repi(k,kks),msprintf("%-0.3g",-frq(kf,kks)),0);
186 e=gce();e.font_foreground=k;
187 L=[e L];
163 end 188 end
164 xstring(repf(k,kks),repi(k,kks),string(frq(kf,kks)),0);
165 L=[L gce()]
166 end 189 end
167 A=[] 190 L=glue(L);
168 191 A=[];
169 if size(ks,'*')>1 then 192
193 if size(ks,"*")>1 then
170 dr=repf(k,ks(1:last)+1)-repf(k,ks(1:last)); 194 dr=repf(k,ks(1:last)+1)-repf(k,ks(1:last));
171 di=repi(k,ks(1:last)+1)-repi(k,ks(1:last)); 195 di=repi(k,ks(1:last)+1)-repi(k,ks(1:last));
172 dd=150*sqrt((dr/dx).^2+(di/dy).^2); 196 dd=1500*sqrt((dr/dx).^2+(di/dy).^2);
173 if dd>0 then 197 dr=dr./dd;
174 // we should use xarrows or xsegs here. 198 di=di./dd;
175 // However their displayed arrow size depends 199 // we should use xarrows or xsegs here.
176 // on the data bounds and we want to avoid this 200 // However their displayed arrow size depends
177 xpolys([repf(k,ks(1:last));repf(k,ks(1:last))+dr./dd],.. 201 // on the data bounds and we want to avoid this
178 [repi(k,ks(1:last));repi(k,ks(1:last))+di./dd]) 202 xx=[repf(k,ks(1:last)) repf(k,ks(last:-1:1))+dr($:-1:1) ;
179 //xarrows([repf(k,ks(1:last));repf(k,ks(1:last))+dr./dd],.. 203 repf(k,ks(1:last))+dr repf(k,ks(last:-1:1))]
180 // [repi(k,ks(1:last));repi(k,ks(1:last))+di./dd],1.5) 204 yy=[repi(k,ks(1:last)) -repi(k,ks(last:-1:1))-di($:-1:1) ;
181 A=gce(); 205 repi(k,ks(1:last))+di -repi(k,ks(last:-1:1))]
182 A.children.arrow_size_factor = 1.5; 206 xpolys(xx,yy)
183 A.children.polyline_style = 4; 207 //xarrows([repf(k,ks(1:last));repf(k,ks(1:last))+dr],..
184 end 208 // [repi(k,ks(1:last));repi(k,ks(1:last))+di],1.5)
209 A=gce();
210 A.children.arrow_size_factor = 1.5;
211 A.children.polyline_style = 4;
212 A.children.foreground=k;
185 end 213 end
186 kf=kf+ilf 214
187 glue([Curves(k) glue([L A])]) 215 kf=kf+ilf;
216 glue([Curves(k) glue([L A])]);
188 217
189 end; 218 end;
190 219
191 if comments<>[] then 220 if comments<>[] then
192 legend(Curves,comments) 221 legend(Curves($:-1:1),comments);
193 end
194
195 if sltyp=='c' then
196 xtitle(_("Nyquist plot"),'Re(h(2i*pi*f))','Im(h(2i*pi*f))');
197 elseif sltyp=='x' then
198 xtitle(_("Nyquist plot"),'Re','Im');
199 else
200 xtitle(_("Nyquist plot"),'Re(h(exp(2i*pi*f*dt)))','Im(h(exp(2i*pi*f*dt)))');
201 end 222 end
202 drawnow() 223 drawnow()
203 //reset format 224endfunction
204 vv=['v','e'];format(vv(frmt(1)),frmt(2)) 225function str=formatNyquistTip(curve,pt,index)
226//This function is called by the datatip mechanism to format the tip
227//string for the nyquist curves.
228 ud=datatipGetStruct(curve);
229 if index<>[] then
230 f=ud.freq(index);
231 else //interpolated
232 [d,ptp,i,c]=orthProj(curve.data,pt);
233 f=ud.freq(i)+(ud.freq(i+1)-ud.freq(i))*c;
234 end
235 str=msprintf("%.4g%+.4gi\n%.4g"+_("Hz"), pt,f);
205endfunction 236endfunction