First open/close noise budgeting

This commit is contained in:
Thomas Dehaeze 2021-11-30 17:54:19 +01:00
parent f4b7e25320
commit 37e98a9f40
20 changed files with 2564 additions and 186 deletions

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2021-11-30 mar. 15:17 --> <!-- 2021-11-30 mar. 17:54 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>ESRF Double Crystal Monochromator - Dynamical Multi-Body Model</title> <title>ESRF Double Crystal Monochromator - Dynamical Multi-Body Model</title>
<meta name="author" content="Dehaeze Thomas" /> <meta name="author" content="Dehaeze Thomas" />
@ -39,44 +39,51 @@
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc"> <div id="text-table-of-contents" role="doc-toc">
<ul> <ul>
<li><a href="#org3fb7374">1. System Kinematics</a> <li><a href="#orgbeabbac">1. System Kinematics</a>
<ul> <ul>
<li><a href="#org1ef1423">1.1. Bragg Angle</a></li> <li><a href="#org72840a7">1.1. Bragg Angle</a></li>
<li><a href="#orgcd8fbe6">1.2. Kinematics (111 Crystal)</a> <li><a href="#org330c2ee">1.2. Kinematics (111 Crystal)</a>
<ul> <ul>
<li><a href="#org542b06e">1.2.1. Interferometers - 111 Crystal</a></li> <li><a href="#orgcf6be49">1.2.1. Interferometers - 111 Crystal</a></li>
<li><a href="#org52f68f7">1.2.2. Piezo - 111 Crystal</a></li> <li><a href="#org729d4fd">1.2.2. Piezo - 111 Crystal</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org616bb45">1.3. Save Kinematics</a></li> <li><a href="#orgd9564bd">1.3. Save Kinematics</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org0000e6d">2. Open Loop System Identification</a> <li><a href="#org94165e4">2. Open Loop System Identification</a>
<ul> <ul>
<li><a href="#org16c8552">2.1. Identification</a></li> <li><a href="#org49f773d">2.1. Identification</a></li>
<li><a href="#orgc2236c5">2.2. Plant in the frame of the fastjacks</a></li> <li><a href="#orga27ac31">2.2. Plant in the frame of the fastjacks</a></li>
<li><a href="#orgb0e1668">2.3. Plant in the frame of the crystal</a></li> <li><a href="#org1d08b17">2.3. Plant in the frame of the crystal</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org4bda37c">3. Active Damping Plant (Strain gauges)</a> <li><a href="#orge94151e">3. Open-Loop Noise Budgeting</a>
<ul> <ul>
<li><a href="#orga8033f0">3.1. Identification</a></li> <li><a href="#org20060df">3.1. Power Spectral Density of signals</a></li>
<li><a href="#org78fe7a9">3.2. Relative Active Damping</a></li> <li><a href="#orgea5b4ad">3.2. Open Loop disturbance and measurement noise</a></li>
<li><a href="#org760bce8">3.3. Damped Plant</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org09dff16">4. Active Damping Plant (Force Sensors)</a> <li><a href="#org987b6b1">4. Active Damping Plant (Strain gauges)</a>
<ul> <ul>
<li><a href="#orgeb8c92e">4.1. Identification</a></li> <li><a href="#orge45c4d8">4.1. Identification</a></li>
<li><a href="#orgae5e7fb">4.2. Controller - Root Locus</a></li> <li><a href="#org65bc5e9">4.2. Relative Active Damping</a></li>
<li><a href="#orgde5a8cd">4.3. Damped Plant</a></li> <li><a href="#orgc83a897">4.3. Damped Plant</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org27e3538">5. HAC-LAC (IFF) architecture</a> <li><a href="#orgf9782ba">5. Active Damping Plant (Force Sensors)</a>
<ul> <ul>
<li><a href="#org72519d4">5.1. System Identification</a></li> <li><a href="#orge8c03e7">5.1. Identification</a></li>
<li><a href="#org6919788">5.2. High Authority Controller</a></li> <li><a href="#org135d9f2">5.2. Controller - Root Locus</a></li>
<li><a href="#orgc5ddfb6">5.3. Performances</a></li> <li><a href="#org4072236">5.3. Damped Plant</a></li>
</ul>
</li>
<li><a href="#org5b57c31">6. HAC-LAC (IFF) architecture</a>
<ul>
<li><a href="#orgb4b8d52">6.1. System Identification</a></li>
<li><a href="#org714ec0f">6.2. High Authority Controller</a></li>
<li><a href="#org9c9ea48">6.3. Performances</a></li>
<li><a href="#orgbdf7b28">6.4. Close Loop noise budget</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -94,44 +101,53 @@ In this document, a Simscape (.e.g. multi-body) model of the ESRF Double Crystal
It is structured as follow: It is structured as follow:
</p> </p>
<ul class="org-ul"> <ul class="org-ul">
<li>Section <a href="#org14dc352">1</a>: the kinematics of the DCM is presented, and Jacobian matrices which are used to solve the inverse and forward kinematics are computed.</li> <li>Section <a href="#org02dd8b0">1</a>: the kinematics of the DCM is presented, and Jacobian matrices which are used to solve the inverse and forward kinematics are computed.</li>
<li>Section <a href="#orgc1f64db">2</a>: the system dynamics is identified in the absence of control.</li> <li>Section <a href="#orgf62c035">2</a>: the system dynamics is identified in the absence of control.</li>
<li>Section <a href="#org80ca2a0">3</a>: it is studied whether if the strain gauges fixed to the piezoelectric actuators can be used to actively damp the plant.</li> <li>Section <a href="#org47df825">3</a>: an open-loop noise budget is performed.</li>
<li>Section <a href="#orgb029a8b">4</a>: piezoelectric force sensors are added in series with the piezoelectric actuators and are used to actively damp the plant using the Integral Force Feedback (IFF) control strategy.</li> <li>Section <a href="#org64d9ba7">4</a>: it is studied whether if the strain gauges fixed to the piezoelectric actuators can be used to actively damp the plant.</li>
<li>Section <a href="#orgee34a4d">5</a>: the High Authority Control - Low Authority Control (HAC-LAC) strategy is tested on the Simscape model.</li> <li>Section <a href="#org7fbe16a">5</a>: piezoelectric force sensors are added in series with the piezoelectric actuators and are used to actively damp the plant using the Integral Force Feedback (IFF) control strategy.</li>
<li>Section <a href="#org226a3fc">6</a>: the High Authority Control - Low Authority Control (HAC-LAC) strategy is tested on the Simscape model.</li>
</ul> </ul>
<div id="outline-container-org3fb7374" class="outline-2"> <div id="outline-container-orgbeabbac" class="outline-2">
<h2 id="org3fb7374"><span class="section-number-2">1.</span> System Kinematics</h2> <h2 id="orgbeabbac"><span class="section-number-2">1.</span> System Kinematics</h2>
<div class="outline-text-2" id="text-1"> <div class="outline-text-2" id="text-1">
<p> <p>
<a id="org14dc352"></a> <a id="org02dd8b0"></a>
</p> </p>
</div> </div>
<div id="outline-container-org1ef1423" class="outline-3"> <div id="outline-container-org72840a7" class="outline-3">
<h3 id="org1ef1423"><span class="section-number-3">1.1.</span> Bragg Angle</h3> <h3 id="org72840a7"><span class="section-number-3">1.1.</span> Bragg Angle</h3>
<div class="outline-text-3" id="text-1-1"> <div class="outline-text-3" id="text-1-1">
<div class="org-src-container"> <p>
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Tested bragg angles</span> There is a simple relation <a href="eq:bragg_angle_formula">eq:bragg_angle_formula</a> between:
bragg = linspace(5, 80, 1000); <span class="org-comment-delimiter">% </span><span class="org-comment">Bragg angle [deg]</span> </p>
d_off = 10.5e<span class="org-builtin">-</span>3; <span class="org-comment-delimiter">% </span><span class="org-comment">Wanted offset between x-rays [m]</span> <ul class="org-ul">
</pre> <li>\(d_{\text{off}}\) is the wanted offset between the incident x-ray and the output x-ray</li>
</div> <li>\(\theta_b\) is the bragg angle</li>
<li>\(d_z\) is the corresponding distance between the first and second crystals</li>
</ul>
<div class="org-src-container"> \begin{equation} \label{eq:bragg_angle_formula}
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Vertical Jack motion as a function of Bragg angle</span> d_z = \frac{d_{\text{off}}}{2 \cos \theta_b}
dz = d_off<span class="org-builtin">./</span>(2<span class="org-builtin">*</span>cos(bragg<span class="org-builtin">*</span><span class="org-matlab-math">pi</span><span class="org-builtin">/</span>180)); \end{equation}
</pre>
</div> <p>
This relation is shown in Figure <a href="#orgd56c0ff">1</a>.
</p>
<div id="org6064b2d" class="figure"> <div id="orgd56c0ff" class="figure">
<p><img src="figs/jack_motion_bragg_angle.png" alt="jack_motion_bragg_angle.png" /> <p><img src="figs/jack_motion_bragg_angle.png" alt="jack_motion_bragg_angle.png" />
</p> </p>
<p><span class="figure-number">Figure 1: </span>Jack motion as a function of Bragg angle</p> <p><span class="figure-number">Figure 1: </span>Jack motion as a function of Bragg angle</p>
</div> </div>
<p>
The required jack stroke is approximately 25mm.
</p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Required Jack stroke</span> <pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Required Jack stroke</span>
<span class="org-matlab-math">ans</span> = 1e3<span class="org-builtin">*</span>(dz(end) <span class="org-builtin">-</span> dz(1)) <span class="org-matlab-math">ans</span> = 1e3<span class="org-builtin">*</span>(dz(end) <span class="org-builtin">-</span> dz(1))
@ -144,34 +160,34 @@ dz = d_off<span class="org-builtin">./</span>(2<span class="org-builtin">*</span
</div> </div>
</div> </div>
<div id="outline-container-orgcd8fbe6" class="outline-3"> <div id="outline-container-org330c2ee" class="outline-3">
<h3 id="orgcd8fbe6"><span class="section-number-3">1.2.</span> Kinematics (111 Crystal)</h3> <h3 id="org330c2ee"><span class="section-number-3">1.2.</span> Kinematics (111 Crystal)</h3>
<div class="outline-text-3" id="text-1-2"> <div class="outline-text-3" id="text-1-2">
<p> <p>
The reference frame is taken at the center of the 111 second crystal. The reference frame is taken at the center of the 111 second crystal.
</p> </p>
</div> </div>
<div id="outline-container-org542b06e" class="outline-4"> <div id="outline-container-orgcf6be49" class="outline-4">
<h4 id="org542b06e"><span class="section-number-4">1.2.1.</span> Interferometers - 111 Crystal</h4> <h4 id="orgcf6be49"><span class="section-number-4">1.2.1.</span> Interferometers - 111 Crystal</h4>
<div class="outline-text-4" id="text-1-2-1"> <div class="outline-text-4" id="text-1-2-1">
<p> <p>
Three interferometers are pointed to the bottom surface of the 111 crystal. Three interferometers are pointed to the bottom surface of the 111 crystal.
</p> </p>
<p> <p>
The position of the measurement points are shown in Figure <a href="#org8f69a58">2</a> as well as the origin where the motion of the crystal is computed. The position of the measurement points are shown in Figure <a href="#org7cdbbab">2</a> as well as the origin where the motion of the crystal is computed.
</p> </p>
<div id="org8f69a58" class="figure"> <div id="org7cdbbab" class="figure">
<p><img src="figs/sensor_111_crystal_points.png" alt="sensor_111_crystal_points.png" /> <p><img src="figs/sensor_111_crystal_points.png" alt="sensor_111_crystal_points.png" />
</p> </p>
<p><span class="figure-number">Figure 2: </span>Bottom view of the second crystal 111. Position of the measurement points.</p> <p><span class="figure-number">Figure 2: </span>Bottom view of the second crystal 111. Position of the measurement points.</p>
</div> </div>
<p> <p>
The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure <a href="#org6470cc1">3</a>): The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure <a href="#orgea687e1">3</a>):
</p> </p>
\begin{equation} \begin{equation}
\begin{bmatrix} \begin{bmatrix}
@ -185,7 +201,7 @@ d_z \\ r_y \\ r_x
\end{equation} \end{equation}
<div id="org6470cc1" class="figure"> <div id="orgea687e1" class="figure">
<p><img src="figs/schematic_sensor_jacobian_inverse_kinematics.png" alt="schematic_sensor_jacobian_inverse_kinematics.png" /> <p><img src="figs/schematic_sensor_jacobian_inverse_kinematics.png" alt="schematic_sensor_jacobian_inverse_kinematics.png" />
</p> </p>
<p><span class="figure-number">Figure 3: </span>Inverse Kinematics - Interferometers</p> <p><span class="figure-number">Figure 3: </span>Inverse Kinematics - Interferometers</p>
@ -193,7 +209,7 @@ d_z \\ r_y \\ r_x
<p> <p>
From the Figure <a href="#org8f69a58">2</a>, the inverse kinematics can be solved as follow (for small motion): From the Figure <a href="#org7cdbbab">2</a>, the inverse kinematics can be solved as follow (for small motion):
</p> </p>
\begin{equation} \begin{equation}
\bm{J}_{s,111} \bm{J}_{s,111}
@ -213,7 +229,7 @@ J_s_111 = [1, 0.07, <span class="org-builtin">-</span>0.015
</pre> </pre>
</div> </div>
<table id="org9ac8ea9" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="org31f833a" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Sensor Jacobian \(\bm{J}_{s,111}\)</caption> <caption class="t-above"><span class="table-number">Table 1:</span> Sensor Jacobian \(\bm{J}_{s,111}\)</caption>
<colgroup> <colgroup>
@ -245,7 +261,7 @@ J_s_111 = [1, 0.07, <span class="org-builtin">-</span>0.015
</table> </table>
<p> <p>
The forward kinematics is solved by inverting the Jacobian matrix (see Figure <a href="#orgacd4853">4</a>). The forward kinematics is solved by inverting the Jacobian matrix (see Figure <a href="#org220e3fd">4</a>).
</p> </p>
\begin{equation} \begin{equation}
\begin{bmatrix} \begin{bmatrix}
@ -259,13 +275,13 @@ x_1 \\ x_2 \\ x_3
\end{equation} \end{equation}
<div id="orgacd4853" class="figure"> <div id="org220e3fd" class="figure">
<p><img src="figs/schematic_sensor_jacobian_forward_kinematics.png" alt="schematic_sensor_jacobian_forward_kinematics.png" /> <p><img src="figs/schematic_sensor_jacobian_forward_kinematics.png" alt="schematic_sensor_jacobian_forward_kinematics.png" />
</p> </p>
<p><span class="figure-number">Figure 4: </span>Forward Kinematics - Interferometers</p> <p><span class="figure-number">Figure 4: </span>Forward Kinematics - Interferometers</p>
</div> </div>
<table id="org1305abc" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="orga06a454" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> Inverse of the sensor Jacobian \(\bm{J}_{s,111}^{-1}\)</caption> <caption class="t-above"><span class="table-number">Table 2:</span> Inverse of the sensor Jacobian \(\bm{J}_{s,111}^{-1}\)</caption>
<colgroup> <colgroup>
@ -298,15 +314,15 @@ x_1 \\ x_2 \\ x_3
</div> </div>
</div> </div>
<div id="outline-container-org52f68f7" class="outline-4"> <div id="outline-container-org729d4fd" class="outline-4">
<h4 id="org52f68f7"><span class="section-number-4">1.2.2.</span> Piezo - 111 Crystal</h4> <h4 id="org729d4fd"><span class="section-number-4">1.2.2.</span> Piezo - 111 Crystal</h4>
<div class="outline-text-4" id="text-1-2-2"> <div class="outline-text-4" id="text-1-2-2">
<p> <p>
The location of the actuators with respect with the center of the 111 second crystal are shown in Figure <a href="#org6ddaa8b">5</a>. The location of the actuators with respect with the center of the 111 second crystal are shown in Figure <a href="#org92f0f11">5</a>.
</p> </p>
<div id="org6ddaa8b" class="figure"> <div id="org92f0f11" class="figure">
<p><img src="figs/actuator_jacobian_111_points.png" alt="actuator_jacobian_111_points.png" /> <p><img src="figs/actuator_jacobian_111_points.png" alt="actuator_jacobian_111_points.png" />
</p> </p>
<p><span class="figure-number">Figure 5: </span>Location of actuators with respect to the center of the 111 second crystal (bottom view)</p> <p><span class="figure-number">Figure 5: </span>Location of actuators with respect to the center of the 111 second crystal (bottom view)</p>
@ -327,14 +343,14 @@ d_z \\ r_y \\ r_x
\end{equation} \end{equation}
<div id="orgd947fd1" class="figure"> <div id="org87ec19c" class="figure">
<p><img src="figs/schematic_actuator_jacobian_inverse_kinematics.png" alt="schematic_actuator_jacobian_inverse_kinematics.png" /> <p><img src="figs/schematic_actuator_jacobian_inverse_kinematics.png" alt="schematic_actuator_jacobian_inverse_kinematics.png" />
</p> </p>
<p><span class="figure-number">Figure 6: </span>Inverse Kinematics - Actuators</p> <p><span class="figure-number">Figure 6: </span>Inverse Kinematics - Actuators</p>
</div> </div>
<p> <p>
Based on the geometry in Figure <a href="#org6ddaa8b">5</a>, we obtain: Based on the geometry in Figure <a href="#org92f0f11">5</a>, we obtain:
</p> </p>
\begin{equation} \begin{equation}
\bm{J}_{a,111} \bm{J}_{a,111}
@ -354,7 +370,7 @@ J_a_111 = [1, 0.14, <span class="org-builtin">-</span>0.1525
</pre> </pre>
</div> </div>
<table id="org96d1229" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="orga19c158" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 3:</span> Actuator Jacobian \(\bm{J}_{a,111}\)</caption> <caption class="t-above"><span class="table-number">Table 3:</span> Actuator Jacobian \(\bm{J}_{a,111}\)</caption>
<colgroup> <colgroup>
@ -400,13 +416,13 @@ d_{u_r} \\ d_{u_h} \\ d_{d}
\end{equation} \end{equation}
<div id="orgbdeca35" class="figure"> <div id="orga0d447c" class="figure">
<p><img src="figs/schematic_actuator_jacobian_forward_kinematics.png" alt="schematic_actuator_jacobian_forward_kinematics.png" /> <p><img src="figs/schematic_actuator_jacobian_forward_kinematics.png" alt="schematic_actuator_jacobian_forward_kinematics.png" />
</p> </p>
<p><span class="figure-number">Figure 7: </span>Forward Kinematics - Actuators for 111 crystal</p> <p><span class="figure-number">Figure 7: </span>Forward Kinematics - Actuators for 111 crystal</p>
</div> </div>
<table id="orgb28ebac" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="orga2ec14c" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 4:</span> Inverse of the actuator Jacobian \(\bm{J}_{a,111}^{-1}\)</caption> <caption class="t-above"><span class="table-number">Table 4:</span> Inverse of the actuator Jacobian \(\bm{J}_{a,111}^{-1}\)</caption>
<colgroup> <colgroup>
@ -440,8 +456,8 @@ d_{u_r} \\ d_{u_h} \\ d_{d}
</div> </div>
</div> </div>
<div id="outline-container-org616bb45" class="outline-3"> <div id="outline-container-orgd9564bd" class="outline-3">
<h3 id="org616bb45"><span class="section-number-3">1.3.</span> Save Kinematics</h3> <h3 id="orgd9564bd"><span class="section-number-3">1.3.</span> Save Kinematics</h3>
<div class="outline-text-3" id="text-1-3"> <div class="outline-text-3" id="text-1-3">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'mat/dcm_kinematics.mat'</span>, <span class="org-string">'J_a_111'</span>, <span class="org-string">'J_s_111'</span>) <pre class="src src-matlab">save(<span class="org-string">'mat/dcm_kinematics.mat'</span>, <span class="org-string">'J_a_111'</span>, <span class="org-string">'J_s_111'</span>)
@ -451,15 +467,15 @@ d_{u_r} \\ d_{u_h} \\ d_{d}
</div> </div>
</div> </div>
<div id="outline-container-org0000e6d" class="outline-2"> <div id="outline-container-org94165e4" class="outline-2">
<h2 id="org0000e6d"><span class="section-number-2">2.</span> Open Loop System Identification</h2> <h2 id="org94165e4"><span class="section-number-2">2.</span> Open Loop System Identification</h2>
<div class="outline-text-2" id="text-2"> <div class="outline-text-2" id="text-2">
<p> <p>
<a id="orgc1f64db"></a> <a id="orgf62c035"></a>
</p> </p>
</div> </div>
<div id="outline-container-org16c8552" class="outline-3"> <div id="outline-container-org49f773d" class="outline-3">
<h3 id="org16c8552"><span class="section-number-3">2.1.</span> Identification</h3> <h3 id="org49f773d"><span class="section-number-3">2.1.</span> Identification</h3>
<div class="outline-text-3" id="text-2-1"> <div class="outline-text-3" id="text-2-1">
<p> <p>
Let&rsquo;s considered the system \(\bm{G}(s)\) with: Let&rsquo;s considered the system \(\bm{G}(s)\) with:
@ -470,11 +486,11 @@ Let&rsquo;s considered the system \(\bm{G}(s)\) with:
</ul> </ul>
<p> <p>
It is schematically shown in Figure <a href="#orga1c2462">8</a>. It is schematically shown in Figure <a href="#org03d9ffb">8</a>.
</p> </p>
<div id="orga1c2462" class="figure"> <div id="org03d9ffb" class="figure">
<p><img src="figs/schematic_system_inputs_outputs.png" alt="schematic_system_inputs_outputs.png" /> <p><img src="figs/schematic_system_inputs_outputs.png" alt="schematic_system_inputs_outputs.png" />
</p> </p>
<p><span class="figure-number">Figure 8: </span>Dynamical system with inputs and outputs</p> <p><span class="figure-number">Figure 8: </span>Dynamical system with inputs and outputs</p>
@ -516,8 +532,8 @@ State-space model with 3 outputs, 3 inputs, and 24 states.
</div> </div>
</div> </div>
<div id="outline-container-orgc2236c5" class="outline-3"> <div id="outline-container-orga27ac31" class="outline-3">
<h3 id="orgc2236c5"><span class="section-number-3">2.2.</span> Plant in the frame of the fastjacks</h3> <h3 id="orga27ac31"><span class="section-number-3">2.2.</span> Plant in the frame of the fastjacks</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'dcm_kinematics.mat'</span>); <pre class="src src-matlab">load(<span class="org-string">'dcm_kinematics.mat'</span>);
@ -525,11 +541,11 @@ State-space model with 3 outputs, 3 inputs, and 24 states.
</div> </div>
<p> <p>
Using the forward and inverse kinematics, we can computed the dynamics from piezo forces to axial motion of the 3 fastjacks (see Figure <a href="#org015dc10">9</a>). Using the forward and inverse kinematics, we can computed the dynamics from piezo forces to axial motion of the 3 fastjacks (see Figure <a href="#org5f538a8">9</a>).
</p> </p>
<div id="org015dc10" class="figure"> <div id="org5f538a8" class="figure">
<p><img src="figs/schematic_jacobian_frame_fastjack.png" alt="schematic_jacobian_frame_fastjack.png" /> <p><img src="figs/schematic_jacobian_frame_fastjack.png" alt="schematic_jacobian_frame_fastjack.png" />
</p> </p>
<p><span class="figure-number">Figure 9: </span>Use of Jacobian matrices to obtain the system in the frame of the fastjacks</p> <p><span class="figure-number">Figure 9: </span>Use of Jacobian matrices to obtain the system in the frame of the fastjacks</p>
@ -550,7 +566,7 @@ The DC gain of the new system shows that the system is well decoupled at low fre
</pre> </pre>
</div> </div>
<table id="orgb47db5c" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="orgdc8a086" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 5:</span> DC gain of the plant in the frame of the fast jacks \(\bm{G}_{\text{fj}}\)</caption> <caption class="t-above"><span class="table-number">Table 5:</span> DC gain of the plant in the frame of the fast jacks \(\bm{G}_{\text{fj}}\)</caption>
<colgroup> <colgroup>
@ -582,17 +598,17 @@ The DC gain of the new system shows that the system is well decoupled at low fre
</table> </table>
<p> <p>
The bode plot of \(\bm{G}_{\text{fj}}(s)\) is shown in Figure <a href="#org3a99582">10</a>. The bode plot of \(\bm{G}_{\text{fj}}(s)\) is shown in Figure <a href="#org4618cac">10</a>.
</p> </p>
<div id="org3a99582" class="figure"> <div id="org4618cac" class="figure">
<p><img src="figs/bode_plot_plant_fj.png" alt="bode_plot_plant_fj.png" /> <p><img src="figs/bode_plot_plant_fj.png" alt="bode_plot_plant_fj.png" />
</p> </p>
<p><span class="figure-number">Figure 10: </span>Bode plot of the diagonal and off-diagonal elements of the plant in the frame of the fast jacks</p> <p><span class="figure-number">Figure 10: </span>Bode plot of the diagonal and off-diagonal elements of the plant in the frame of the fast jacks</p>
</div> </div>
<div class="important" id="orge3e331d"> <div class="important" id="org834d546">
<p> <p>
Computing the system in the frame of the fastjack gives good decoupling at low frequency (until the first resonance of the system). Computing the system in the frame of the fastjack gives good decoupling at low frequency (until the first resonance of the system).
</p> </p>
@ -601,11 +617,11 @@ Computing the system in the frame of the fastjack gives good decoupling at low f
</div> </div>
</div> </div>
<div id="outline-container-orgb0e1668" class="outline-3"> <div id="outline-container-org1d08b17" class="outline-3">
<h3 id="orgb0e1668"><span class="section-number-3">2.3.</span> Plant in the frame of the crystal</h3> <h3 id="org1d08b17"><span class="section-number-3">2.3.</span> Plant in the frame of the crystal</h3>
<div class="outline-text-3" id="text-2-3"> <div class="outline-text-3" id="text-2-3">
<div id="orge8c1108" class="figure"> <div id="orgd94c3c6" class="figure">
<p><img src="figs/schematic_jacobian_frame_crystal.png" alt="schematic_jacobian_frame_crystal.png" /> <p><img src="figs/schematic_jacobian_frame_crystal.png" alt="schematic_jacobian_frame_crystal.png" />
</p> </p>
<p><span class="figure-number">Figure 11: </span>Use of Jacobian matrices to obtain the system in the frame of the crystal</p> <p><span class="figure-number">Figure 11: </span>Use of Jacobian matrices to obtain the system in the frame of the crystal</p>
@ -660,19 +676,102 @@ The main reason is that, as we map forces to the center of the 111 crystal and n
</div> </div>
</div> </div>
<div id="outline-container-org4bda37c" class="outline-2"> <div id="outline-container-orge94151e" class="outline-2">
<h2 id="org4bda37c"><span class="section-number-2">3.</span> Active Damping Plant (Strain gauges)</h2> <h2 id="orge94151e"><span class="section-number-2">3.</span> Open-Loop Noise Budgeting</h2>
<div class="outline-text-2" id="text-3"> <div class="outline-text-2" id="text-3">
<p> <p>
<a id="org80ca2a0"></a> <a id="org47df825"></a>
</p>
<div id="org2ed8210" class="figure">
<p><img src="figs/noise_budget_dcm_schematic_fast_jack_frame.png" alt="noise_budget_dcm_schematic_fast_jack_frame.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Schematic representation of the control loop in the frame of one fast jack</p>
</div>
</div>
<div id="outline-container-org20060df" class="outline-3">
<h3 id="org20060df"><span class="section-number-3">3.1.</span> Power Spectral Density of signals</h3>
<div class="outline-text-3" id="text-3-1">
<p>
Interferometer noise:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Wn = 6e<span class="org-builtin">-</span>11<span class="org-builtin">*</span>(1 <span class="org-builtin">+</span> s<span class="org-builtin">/</span>2<span class="org-builtin">/</span><span class="org-matlab-math">pi</span><span class="org-builtin">/</span>200)<span class="org-builtin">/</span>(1 <span class="org-builtin">+</span> s<span class="org-builtin">/</span>2<span class="org-builtin">/</span><span class="org-matlab-math">pi</span><span class="org-builtin">/</span>60); <span class="org-comment-delimiter">% </span><span class="org-comment">m/sqrt(Hz)</span>
</pre>
</div>
<pre class="example">
Measurement noise: 0.79 [nm,rms]
</pre>
<p>
DAC noise (amplified by the PI voltage amplifier, and converted to newtons):
</p>
<div class="org-src-container">
<pre class="src src-matlab">Wdac = tf(3e<span class="org-builtin">-</span>8); <span class="org-comment-delimiter">% </span><span class="org-comment">V/sqrt(Hz)</span>
Wu = Wdac<span class="org-builtin">*</span>22.5<span class="org-builtin">*</span>10; <span class="org-comment-delimiter">% </span><span class="org-comment">N/sqrt(Hz)</span>
</pre>
</div>
<pre class="example">
DAC noise: 0.95 [uV,rms]
</pre>
<p>
Disturbances:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Wd = 5e<span class="org-builtin">-</span>7<span class="org-builtin">/</span>(1 <span class="org-builtin">+</span> s<span class="org-builtin">/</span>2<span class="org-builtin">/</span><span class="org-matlab-math">pi</span>); <span class="org-comment-delimiter">% </span><span class="org-comment">m/sqrt(Hz)</span>
</pre>
</div>
<pre class="example">
Disturbance motion: 0.61 [um,rms]
</pre>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Save ASD of noise and disturbances</span>
save(<span class="org-string">'mat/asd_noises_disturbances.mat'</span>, <span class="org-string">'Wn'</span>, <span class="org-string">'Wu'</span>, <span class="org-string">'Wd'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgea5b4ad" class="outline-3">
<h3 id="orgea5b4ad"><span class="section-number-3">3.2.</span> Open Loop disturbance and measurement noise</h3>
<div class="outline-text-3" id="text-3-2">
<p>
The comparison of the amplitude spectral density of the measurement noise and of the jack parasitic motion is performed in Figure <a href="#orge20b337">13</a>.
It confirms that the sensor noise is low enough to measure the motion errors of the crystal.
</p>
<div id="orge20b337" class="figure">
<p><img src="figs/open_loop_noise_budget_fast_jack.png" alt="open_loop_noise_budget_fast_jack.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Open Loop noise budgeting</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org987b6b1" class="outline-2">
<h2 id="org987b6b1"><span class="section-number-2">4.</span> Active Damping Plant (Strain gauges)</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="org64d9ba7"></a>
</p> </p>
<p> <p>
In this section, we wish to see whether if strain gauges fixed to the piezoelectric actuator can be used for active damping. In this section, we wish to see whether if strain gauges fixed to the piezoelectric actuator can be used for active damping.
</p> </p>
</div> </div>
<div id="outline-container-orga8033f0" class="outline-3"> <div id="outline-container-orge45c4d8" class="outline-3">
<h3 id="orga8033f0"><span class="section-number-3">3.1.</span> Identification</h3> <h3 id="orge45c4d8"><span class="section-number-3">4.1.</span> Identification</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-4-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Input/Output definition</span> <pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Input/Output definition</span>
clear io; io_i = 1; clear io; io_i = 1;
@ -730,15 +829,15 @@ G_sg = linearize(mdl, io);
</table> </table>
<div id="org8f04d26" class="figure"> <div id="org782b33f" class="figure">
<p><img src="figs/strain_gauge_plant_bode_plot.png" alt="strain_gauge_plant_bode_plot.png" /> <p><img src="figs/strain_gauge_plant_bode_plot.png" alt="strain_gauge_plant_bode_plot.png" />
</p> </p>
<p><span class="figure-number">Figure 12: </span>Bode Plot of the transfer functions from piezoelectric forces to strain gauges measuremed displacements</p> <p><span class="figure-number">Figure 14: </span>Bode Plot of the transfer functions from piezoelectric forces to strain gauges measuremed displacements</p>
</div> </div>
<div class="important" id="orgd585bf5"> <div class="important" id="org9ec0d6c">
<p> <p>
As the distance between the poles and zeros in Figure <a href="#org11a1e17">15</a> is very small, little damping can be actively added using the strain gauges. As the distance between the poles and zeros in Figure <a href="#org0e9b8f2">17</a> is very small, little damping can be actively added using the strain gauges.
This will be confirmed using a Root Locus plot. This will be confirmed using a Root Locus plot.
</p> </p>
@ -746,23 +845,23 @@ This will be confirmed using a Root Locus plot.
</div> </div>
</div> </div>
<div id="outline-container-org78fe7a9" class="outline-3"> <div id="outline-container-org65bc5e9" class="outline-3">
<h3 id="org78fe7a9"><span class="section-number-3">3.2.</span> Relative Active Damping</h3> <h3 id="org65bc5e9"><span class="section-number-3">4.2.</span> Relative Active Damping</h3>
<div class="outline-text-3" id="text-3-2"> <div class="outline-text-3" id="text-4-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Krad_g1 = eye(3)<span class="org-builtin">*</span>s<span class="org-builtin">/</span>(s<span class="org-builtin">^</span>2<span class="org-builtin">/</span>(2<span class="org-builtin">*</span><span class="org-matlab-math">pi</span><span class="org-builtin">*</span>500)<span class="org-builtin">^</span>2 <span class="org-builtin">+</span> 2<span class="org-builtin">*</span>s<span class="org-builtin">/</span>(2<span class="org-builtin">*</span><span class="org-matlab-math">pi</span><span class="org-builtin">*</span>500) <span class="org-builtin">+</span> 1); <pre class="src src-matlab">Krad_g1 = eye(3)<span class="org-builtin">*</span>s<span class="org-builtin">/</span>(s<span class="org-builtin">^</span>2<span class="org-builtin">/</span>(2<span class="org-builtin">*</span><span class="org-matlab-math">pi</span><span class="org-builtin">*</span>500)<span class="org-builtin">^</span>2 <span class="org-builtin">+</span> 2<span class="org-builtin">*</span>s<span class="org-builtin">/</span>(2<span class="org-builtin">*</span><span class="org-matlab-math">pi</span><span class="org-builtin">*</span>500) <span class="org-builtin">+</span> 1);
</pre> </pre>
</div> </div>
<p> <p>
As can be seen in Figure <a href="#orgec235bb">13</a>, very little damping can be added using relative damping strategy using strain gauges. As can be seen in Figure <a href="#orgc3707d5">15</a>, very little damping can be added using relative damping strategy using strain gauges.
</p> </p>
<div id="orgec235bb" class="figure"> <div id="orgc3707d5" class="figure">
<p><img src="figs/relative_damping_root_locus.png" alt="relative_damping_root_locus.png" /> <p><img src="figs/relative_damping_root_locus.png" alt="relative_damping_root_locus.png" />
</p> </p>
<p><span class="figure-number">Figure 13: </span>Root Locus for the relative damping control</p> <p><span class="figure-number">Figure 15: </span>Root Locus for the relative damping control</p>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
@ -772,9 +871,9 @@ As can be seen in Figure <a href="#orgec235bb">13</a>, very little damping can b
</div> </div>
</div> </div>
<div id="outline-container-org760bce8" class="outline-3"> <div id="outline-container-orgc83a897" class="outline-3">
<h3 id="org760bce8"><span class="section-number-3">3.3.</span> Damped Plant</h3> <h3 id="orgc83a897"><span class="section-number-3">4.3.</span> Damped Plant</h3>
<div class="outline-text-3" id="text-3-3"> <div class="outline-text-3" id="text-4-3">
<p> <p>
The controller is implemented on Simscape, and the damped plant is identified. The controller is implemented on Simscape, and the damped plant is identified.
</p> </p>
@ -818,20 +917,20 @@ G_dp.OutputName = {<span class="org-string">'d_ur'</span>, <span class="org-str
</div> </div>
<div id="orgca0b154" class="figure"> <div id="org5d6f27c" class="figure">
<p><img src="figs/comp_damp_undamped_plant_rad_bode_plot.png" alt="comp_damp_undamped_plant_rad_bode_plot.png" /> <p><img src="figs/comp_damp_undamped_plant_rad_bode_plot.png" alt="comp_damp_undamped_plant_rad_bode_plot.png" />
</p> </p>
<p><span class="figure-number">Figure 14: </span>Bode plot of both the open-loop plant and the damped plant using relative active damping</p> <p><span class="figure-number">Figure 16: </span>Bode plot of both the open-loop plant and the damped plant using relative active damping</p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org09dff16" class="outline-2"> <div id="outline-container-orgf9782ba" class="outline-2">
<h2 id="org09dff16"><span class="section-number-2">4.</span> Active Damping Plant (Force Sensors)</h2> <h2 id="orgf9782ba"><span class="section-number-2">5.</span> Active Damping Plant (Force Sensors)</h2>
<div class="outline-text-2" id="text-4"> <div class="outline-text-2" id="text-5">
<p> <p>
<a id="orgb029a8b"></a> <a id="org7fbe16a"></a>
</p> </p>
<p> <p>
Force sensors are added above the piezoelectric actuators. Force sensors are added above the piezoelectric actuators.
@ -839,9 +938,9 @@ They can consists of a simple piezoelectric ceramic stack.
See for instance <a href="fleming10_integ_strain_force_feedb_high">fleming10_integ_strain_force_feedb_high</a>. See for instance <a href="fleming10_integ_strain_force_feedb_high">fleming10_integ_strain_force_feedb_high</a>.
</p> </p>
</div> </div>
<div id="outline-container-orgeb8c92e" class="outline-3"> <div id="outline-container-orge8c03e7" class="outline-3">
<h3 id="orgeb8c92e"><span class="section-number-3">4.1.</span> Identification</h3> <h3 id="orge8c03e7"><span class="section-number-3">5.1.</span> Identification</h3>
<div class="outline-text-3" id="text-4-1"> <div class="outline-text-3" id="text-5-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Input/Output definition</span> <pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Input/Output definition</span>
clear io; io_i = 1; clear io; io_i = 1;
@ -863,22 +962,22 @@ G_fs = linearize(mdl, io);
</div> </div>
<p> <p>
The Bode plot of the identified dynamics is shown in Figure <a href="#org11a1e17">15</a>. The Bode plot of the identified dynamics is shown in Figure <a href="#org0e9b8f2">17</a>.
At high frequency, the diagonal terms are constants while the off-diagonal terms have some roll-off. At high frequency, the diagonal terms are constants while the off-diagonal terms have some roll-off.
</p> </p>
<div id="org11a1e17" class="figure"> <div id="org0e9b8f2" class="figure">
<p><img src="figs/iff_plant_bode_plot.png" alt="iff_plant_bode_plot.png" /> <p><img src="figs/iff_plant_bode_plot.png" alt="iff_plant_bode_plot.png" />
</p> </p>
<p><span class="figure-number">Figure 15: </span>Bode plot of IFF Plant</p> <p><span class="figure-number">Figure 17: </span>Bode plot of IFF Plant</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgae5e7fb" class="outline-3"> <div id="outline-container-org135d9f2" class="outline-3">
<h3 id="orgae5e7fb"><span class="section-number-3">4.2.</span> Controller - Root Locus</h3> <h3 id="org135d9f2"><span class="section-number-3">5.2.</span> Controller - Root Locus</h3>
<div class="outline-text-3" id="text-4-2"> <div class="outline-text-3" id="text-5-2">
<p> <p>
We want to have integral action around the resonances of the system, but we do not want to integrate at low frequency. We want to have integral action around the resonances of the system, but we do not want to integrate at low frequency.
Therefore, we can use a low pass filter. Therefore, we can use a low pass filter.
@ -891,10 +990,10 @@ Kiff_g1 = eye(3)<span class="org-builtin">*</span>1<span class="org-builtin">/</
</div> </div>
<div id="org5b2bab0" class="figure"> <div id="org14798b7" class="figure">
<p><img src="figs/iff_root_locus.png" alt="iff_root_locus.png" /> <p><img src="figs/iff_root_locus.png" alt="iff_root_locus.png" />
</p> </p>
<p><span class="figure-number">Figure 16: </span>Root Locus plot for the IFF Control strategy</p> <p><span class="figure-number">Figure 18: </span>Root Locus plot for the IFF Control strategy</p>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
@ -911,38 +1010,38 @@ save(<span class="org-string">'mat/Kiff.mat'</span>, <span class="org-string">'K
</div> </div>
</div> </div>
<div id="outline-container-orgde5a8cd" class="outline-3"> <div id="outline-container-org4072236" class="outline-3">
<h3 id="orgde5a8cd"><span class="section-number-3">4.3.</span> Damped Plant</h3> <h3 id="org4072236"><span class="section-number-3">5.3.</span> Damped Plant</h3>
<div class="outline-text-3" id="text-4-3"> <div class="outline-text-3" id="text-5-3">
<p> <p>
Both the Open Loop dynamics (see Figure <a href="#org015dc10">9</a>) and the dynamics with IFF (see Figure <a href="#org7a880a7">17</a>) are identified. Both the Open Loop dynamics (see Figure <a href="#org5f538a8">9</a>) and the dynamics with IFF (see Figure <a href="#org8cbe7f9">19</a>) are identified.
</p> </p>
<p> <p>
We are here interested in the dynamics from \(\bm{u}^\prime = [u_{u_r}^\prime,\ u_{u_h}^\prime,\ u_d^\prime]\) (input of the damped plant) to \(\bm{d}_{\text{fj}} = [d_{u_r},\ d_{u_h},\ d_d]\) (motion of the crystal expressed in the frame of the fast-jacks). We are here interested in the dynamics from \(\bm{u}^\prime = [u_{u_r}^\prime,\ u_{u_h}^\prime,\ u_d^\prime]\) (input of the damped plant) to \(\bm{d}_{\text{fj}} = [d_{u_r},\ d_{u_h},\ d_d]\) (motion of the crystal expressed in the frame of the fast-jacks).
This is schematically represented in Figure <a href="#org7a880a7">17</a>. This is schematically represented in Figure <a href="#org8cbe7f9">19</a>.
</p> </p>
<div id="org7a880a7" class="figure"> <div id="org8cbe7f9" class="figure">
<p><img src="figs/schematic_jacobian_frame_fastjack_iff.png" alt="schematic_jacobian_frame_fastjack_iff.png" /> <p><img src="figs/schematic_jacobian_frame_fastjack_iff.png" alt="schematic_jacobian_frame_fastjack_iff.png" />
</p> </p>
<p><span class="figure-number">Figure 17: </span>Use of Jacobian matrices to obtain the system in the frame of the fastjacks</p> <p><span class="figure-number">Figure 19: </span>Use of Jacobian matrices to obtain the system in the frame of the fastjacks</p>
</div> </div>
<p> <p>
The dynamics from \(\bm{u}\) to \(\bm{d}_{\text{fj}}\) (open-loop dynamics) and from \(\bm{u}^\prime\) to \(\bm{d}_{\text{fs}}\) are compared in Figure <a href="#org9f5d048">18</a>. The dynamics from \(\bm{u}\) to \(\bm{d}_{\text{fj}}\) (open-loop dynamics) and from \(\bm{u}^\prime\) to \(\bm{d}_{\text{fs}}\) are compared in Figure <a href="#org73485e9">20</a>.
It is clear that the Integral Force Feedback control strategy is very effective in damping the resonances of the plant. It is clear that the Integral Force Feedback control strategy is very effective in damping the resonances of the plant.
</p> </p>
<div id="org9f5d048" class="figure"> <div id="org73485e9" class="figure">
<p><img src="figs/comp_damped_undamped_plant_iff_bode_plot.png" alt="comp_damped_undamped_plant_iff_bode_plot.png" /> <p><img src="figs/comp_damped_undamped_plant_iff_bode_plot.png" alt="comp_damped_undamped_plant_iff_bode_plot.png" />
</p> </p>
<p><span class="figure-number">Figure 18: </span>Bode plot of both the open-loop plant and the damped plant using IFF</p> <p><span class="figure-number">Figure 20: </span>Bode plot of both the open-loop plant and the damped plant using IFF</p>
</div> </div>
<div class="important" id="org8586fa6"> <div class="important" id="org91bfa66">
<p> <p>
The Integral Force Feedback control strategy is very effective in damping the modes present in the plant. The Integral Force Feedback control strategy is very effective in damping the modes present in the plant.
</p> </p>
@ -952,42 +1051,42 @@ The Integral Force Feedback control strategy is very effective in damping the mo
</div> </div>
</div> </div>
<div id="outline-container-org27e3538" class="outline-2"> <div id="outline-container-org5b57c31" class="outline-2">
<h2 id="org27e3538"><span class="section-number-2">5.</span> HAC-LAC (IFF) architecture</h2> <h2 id="org5b57c31"><span class="section-number-2">6.</span> HAC-LAC (IFF) architecture</h2>
<div class="outline-text-2" id="text-5"> <div class="outline-text-2" id="text-6">
<p> <p>
<a id="orgee34a4d"></a> <a id="org226a3fc"></a>
</p> </p>
<p> <p>
The HAC-LAC architecture is shown in Figure <a href="#orgb03e1da">19</a>. The HAC-LAC architecture is shown in Figure <a href="#org604ef36">21</a>.
</p> </p>
<div id="orgb03e1da" class="figure"> <div id="org604ef36" class="figure">
<p><img src="figs/schematic_jacobian_frame_fastjack_hac_iff.png" alt="schematic_jacobian_frame_fastjack_hac_iff.png" /> <p><img src="figs/schematic_jacobian_frame_fastjack_hac_iff.png" alt="schematic_jacobian_frame_fastjack_hac_iff.png" />
</p> </p>
<p><span class="figure-number">Figure 19: </span>HAC-LAC architecture</p> <p><span class="figure-number">Figure 21: </span>HAC-LAC architecture</p>
</div> </div>
</div> </div>
<div id="outline-container-org72519d4" class="outline-3"> <div id="outline-container-orgb4b8d52" class="outline-3">
<h3 id="org72519d4"><span class="section-number-3">5.1.</span> System Identification</h3> <h3 id="orgb4b8d52"><span class="section-number-3">6.1.</span> System Identification</h3>
<div class="outline-text-3" id="text-5-1"> <div class="outline-text-3" id="text-6-1">
<p> <p>
Let&rsquo;s identify the damped plant. Let&rsquo;s identify the damped plant.
</p> </p>
<div id="org022508f" class="figure"> <div id="orgb9d93cb" class="figure">
<p><img src="figs/bode_plot_hac_iff_plant.png" alt="bode_plot_hac_iff_plant.png" /> <p><img src="figs/bode_plot_hac_iff_plant.png" alt="bode_plot_hac_iff_plant.png" />
</p> </p>
<p><span class="figure-number">Figure 20: </span>Bode Plot of the plant for the High Authority Controller (transfer function from \(\bm{u}^\prime\) to \(\bm{\epsilon}_d\))</p> <p><span class="figure-number">Figure 22: </span>Bode Plot of the plant for the High Authority Controller (transfer function from \(\bm{u}^\prime\) to \(\bm{\epsilon}_d\))</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org6919788" class="outline-3"> <div id="outline-container-org714ec0f" class="outline-3">
<h3 id="org6919788"><span class="section-number-3">5.2.</span> High Authority Controller</h3> <h3 id="org714ec0f"><span class="section-number-3">6.2.</span> High Authority Controller</h3>
<div class="outline-text-3" id="text-5-2"> <div class="outline-text-3" id="text-6-2">
<p> <p>
Let&rsquo;s design a controller with a bandwidth of 100Hz. Let&rsquo;s design a controller with a bandwidth of 100Hz.
As the plant is well decoupled and well approximated by a constant at low frequency, the high authority controller can easily be designed with SISO loop shaping. As the plant is well decoupled and well approximated by a constant at low frequency, the high authority controller can easily be designed with SISO loop shaping.
@ -1018,28 +1117,28 @@ L_hac_lac = G_dp <span class="org-builtin">*</span> Khac;
</div> </div>
<div id="org1eefea2" class="figure"> <div id="orgc55c5d0" class="figure">
<p><img src="figs/hac_iff_loop_gain_bode_plot.png" alt="hac_iff_loop_gain_bode_plot.png" /> <p><img src="figs/hac_iff_loop_gain_bode_plot.png" alt="hac_iff_loop_gain_bode_plot.png" />
</p> </p>
<p><span class="figure-number">Figure 21: </span>Bode Plot of the Loop gain for the High Authority Controller</p> <p><span class="figure-number">Figure 23: </span>Bode Plot of the Loop gain for the High Authority Controller</p>
</div> </div>
<p> <p>
As shown in the Root Locus plot in Figure <a href="#orgc90ee63">22</a>, the closed loop system should be stable. As shown in the Root Locus plot in Figure <a href="#org54bbcb8">24</a>, the closed loop system should be stable.
</p> </p>
<div id="orgc90ee63" class="figure"> <div id="org54bbcb8" class="figure">
<p><img src="figs/loci_hac_iff_fast_jack.png" alt="loci_hac_iff_fast_jack.png" /> <p><img src="figs/loci_hac_iff_fast_jack.png" alt="loci_hac_iff_fast_jack.png" />
</p> </p>
<p><span class="figure-number">Figure 22: </span>Root Locus for the High Authority Controller</p> <p><span class="figure-number">Figure 24: </span>Root Locus for the High Authority Controller</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgc5ddfb6" class="outline-3"> <div id="outline-container-org9c9ea48" class="outline-3">
<h3 id="orgc5ddfb6"><span class="section-number-3">5.3.</span> Performances</h3> <h3 id="org9c9ea48"><span class="section-number-3">6.3.</span> Performances</h3>
<div class="outline-text-3" id="text-5-3"> <div class="outline-text-3" id="text-6-3">
<p> <p>
In order to estimate the performances of the HAC-IFF control strategy, the transfer function from motion errors of the stepper motors to the motion error of the crystal is identified both in open loop and with the HAC-IFF strategy. In order to estimate the performances of the HAC-IFF control strategy, the transfer function from motion errors of the stepper motors to the motion error of the crystal is identified both in open loop and with the HAC-IFF strategy.
</p> </p>
@ -1059,22 +1158,72 @@ It is first verified that the closed-loop system is stable:
<p> <p>
And both transmissibilities are compared in Figure <a href="#org152d7e8">23</a>. And both transmissibilities are compared in Figure <a href="#org948d6ba">25</a>.
</p> </p>
<div id="org152d7e8" class="figure"> <div id="org948d6ba" class="figure">
<p><img src="figs/stepper_transmissibility_comp_ol_hac_iff.png" alt="stepper_transmissibility_comp_ol_hac_iff.png" /> <p><img src="figs/stepper_transmissibility_comp_ol_hac_iff.png" alt="stepper_transmissibility_comp_ol_hac_iff.png" />
</p> </p>
<p><span class="figure-number">Figure 23: </span>Comparison of the transmissibility of errors from vibrations of the stepper motor between the open-loop case and the hac-iff case.</p> <p><span class="figure-number">Figure 25: </span>Comparison of the transmissibility of errors from vibrations of the stepper motor between the open-loop case and the hac-iff case.</p>
</div> </div>
<div class="important" id="org755e221"> <div class="important" id="orgc81cfdd">
<p> <p>
The HAC-IFF control strategy can effectively reduce the transmissibility of the motion errors of the stepper motors. The HAC-IFF control strategy can effectively reduce the transmissibility of the motion errors of the stepper motors.
This reduction is effective inside the bandwidth of the controller. This reduction is effective inside the bandwidth of the controller.
</p> </p>
</div>
</div>
</div>
<div id="outline-container-orgbdf7b28" class="outline-3">
<h3 id="orgbdf7b28"><span class="section-number-3">6.4.</span> Close Loop noise budget</h3>
<div class="outline-text-3" id="text-6-4">
<p>
Let&rsquo;s compute the amplitude spectral density of the jack motion errors due to the sensor noise, the actuator noise and disturbances.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Computation of ASD of contribution of inputs to the closed-loop motion</span>
<span class="org-comment-delimiter">% </span><span class="org-comment">Error due to disturbances</span>
asd_d = abs(squeeze(freqresp(Wd<span class="org-builtin">*</span>(1<span class="org-builtin">/</span>(1 <span class="org-builtin">+</span> G_dp(1,1)<span class="org-builtin">*</span>Khac(1,1))), f, <span class="org-string">'Hz'</span>)));
<span class="org-comment-delimiter">% </span><span class="org-comment">Error due to actuator noise</span>
asd_u = abs(squeeze(freqresp(Wu<span class="org-builtin">*</span>(G_dp(1,1)<span class="org-builtin">/</span>(1 <span class="org-builtin">+</span> G_dp(1,1)<span class="org-builtin">*</span>Khac(1,1))), f, <span class="org-string">'Hz'</span>)));
<span class="org-comment-delimiter">% </span><span class="org-comment">Error due to sensor noise</span>
asd_n = abs(squeeze(freqresp(Wn<span class="org-builtin">*</span>(G_dp(1,1)<span class="org-builtin">*</span>Khac(1,1)<span class="org-builtin">/</span>(1 <span class="org-builtin">+</span> G_dp(1,1)<span class="org-builtin">*</span>Khac(1,1))), f, <span class="org-string">'Hz'</span>)));
</pre>
</div>
<p>
The closed-loop ASD is then:
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% ASD of the closed-loop motion</span>
asd_cl = sqrt(asd_d<span class="org-builtin">.^</span>2 <span class="org-builtin">+</span> asd_u<span class="org-builtin">.^</span>2 <span class="org-builtin">+</span> asd_n<span class="org-builtin">.^</span>2);
</pre>
</div>
<p>
The obtained ASD are shown in Figure <a href="#orgf0027c6">26</a>.
</p>
<div id="orgf0027c6" class="figure">
<p><img src="figs/close_loop_asd_noise_budget_hac_iff.png" alt="close_loop_asd_noise_budget_hac_iff.png" />
</p>
<p><span class="figure-number">Figure 26: </span>Closed Loop noise budget</p>
</div>
<p>
Let&rsquo;s compare the open-loop and close-loop cases (Figure <a href="#org691e64a">27</a>).
</p>
<div id="org691e64a" class="figure">
<p><img src="figs/cps_comp_ol_cl_hac_iff.png" alt="cps_comp_ol_cl_hac_iff.png" />
</p>
<p><span class="figure-number">Figure 27: </span>Cumulative Power Spectrum of the open-loop and closed-loop motion error along one fast-jack</p>
</div> </div>
</div> </div>
</div> </div>
@ -1082,7 +1231,7 @@ This reduction is effective inside the bandwidth of the controller.
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2021-11-30 mar. 15:17</p> <p class="date">Created: 2021-11-30 mar. 17:54</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -56,6 +56,7 @@ In this document, a Simscape (.e.g. multi-body) model of the ESRF Double Crystal
It is structured as follow: It is structured as follow:
- Section [[sec:dcm_kinematics]]: the kinematics of the DCM is presented, and Jacobian matrices which are used to solve the inverse and forward kinematics are computed. - Section [[sec:dcm_kinematics]]: the kinematics of the DCM is presented, and Jacobian matrices which are used to solve the inverse and forward kinematics are computed.
- Section [[sec:open_loop_identification]]: the system dynamics is identified in the absence of control. - Section [[sec:open_loop_identification]]: the system dynamics is identified in the absence of control.
- Section [[sec:dcm_noise_budget]]: an open-loop noise budget is performed.
- Section [[sec:active_damping_strain_gauges]]: it is studied whether if the strain gauges fixed to the piezoelectric actuators can be used to actively damp the plant. - Section [[sec:active_damping_strain_gauges]]: it is studied whether if the strain gauges fixed to the piezoelectric actuators can be used to actively damp the plant.
- Section [[sec:active_damping_iff]]: piezoelectric force sensors are added in series with the piezoelectric actuators and are used to actively damp the plant using the Integral Force Feedback (IFF) control strategy. - Section [[sec:active_damping_iff]]: piezoelectric force sensors are added in series with the piezoelectric actuators and are used to actively damp the plant using the Integral Force Feedback (IFF) control strategy.
- Section [[sec:hac_iff]]: the High Authority Control - Low Authority Control (HAC-LAC) strategy is tested on the Simscape model. - Section [[sec:hac_iff]]: the High Authority Control - Low Authority Control (HAC-LAC) strategy is tested on the Simscape model.
@ -95,17 +96,28 @@ It is structured as follow:
#+end_src #+end_src
** Bragg Angle ** Bragg Angle
#+begin_src matlab There is a simple relation eqref:eq:bragg_angle_formula between:
- $d_{\text{off}}$ is the wanted offset between the incident x-ray and the output x-ray
- $\theta_b$ is the bragg angle
- $d_z$ is the corresponding distance between the first and second crystals
\begin{equation} \label{eq:bragg_angle_formula}
d_z = \frac{d_{\text{off}}}{2 \cos \theta_b}
\end{equation}
#+begin_src matlab :exports none
%% Tested bragg angles %% Tested bragg angles
bragg = linspace(5, 80, 1000); % Bragg angle [deg] bragg = linspace(5, 80, 1000); % Bragg angle [deg]
d_off = 10.5e-3; % Wanted offset between x-rays [m] d_off = 10.5e-3; % Wanted offset between x-rays [m]
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab :exports none
%% Vertical Jack motion as a function of Bragg angle %% Vertical Jack motion as a function of Bragg angle
dz = d_off./(2*cos(bragg*pi/180)); dz = d_off./(2*cos(bragg*pi/180));
#+end_src #+end_src
This relation is shown in Figure [[fig:jack_motion_bragg_angle]].
#+begin_src matlab :exports none #+begin_src matlab :exports none
%% Jack motion as a function of Bragg angle %% Jack motion as a function of Bragg angle
figure; figure;
@ -122,6 +134,8 @@ exportFig('figs/jack_motion_bragg_angle.pdf', 'width', 'wide', 'height', 'normal
#+RESULTS: #+RESULTS:
[[file:figs/jack_motion_bragg_angle.png]] [[file:figs/jack_motion_bragg_angle.png]]
The required jack stroke is approximately 25mm.
#+begin_src matlab :results value replace :exports both #+begin_src matlab :results value replace :exports both
%% Required Jack stroke %% Required Jack stroke
ans = 1e3*(dz(end) - dz(1)) ans = 1e3*(dz(end) - dz(1))
@ -701,6 +715,148 @@ Here, we map the piezo forces at the center of stiffness.
Let's first compute the Jacobian: Let's first compute the Jacobian:
* Open-Loop Noise Budgeting
:PROPERTIES:
:header-args:matlab+: :tangle matlab/dcm_noise_budget.m
:END:
<<sec:dcm_noise_budget>>
** Introduction :ignore:
#+begin_src latex :file noise_budget_dcm_schematic_fast_jack_frame.pdf
\begin{tikzpicture}
% Blocs
\node[block] (G) {$G(s)$};
\node[addb, left= of G] (adddu) {};
\node[block, left= of adddu] (K) {$K(s)$};
\node[addb={+}{}{}{}{-}, left= of K] (subL) {};
\node[addb, right= of G] (addd) {};
\node[addb, below right=0.8 and 0.6 of addd] (adddn) {};
% Connections and labels
\draw[->] (subL.east) -- (K.west);
\draw[->] (K.east) -- (adddu.west);
\draw[->] (adddu.east) -- (G.west);
\draw[->] (G.east) -- (addd.west);
\draw[->] (addd-|adddn)node[branch]{}node[above]{$y_{\text{fj}}$} -- (adddn.north);
\draw[->] (adddn.west) -| (subL.south) node[below right]{$y_{\text{fj},m}$};
\draw[<-] (adddu.north) -- ++(0, 1) node[below right]{$d_u$};
\draw[<-] (addd.north) -- ++(0, 1) node[below right]{$d_{\text{fj}}$};
\draw[<-] (adddn.east) -- ++(1, 0)coordinate(dn) node[above left]{$n_{\text{fj}}$};
\draw[->] (addd.east) -- (addd-|dn);
\end{tikzpicture}
#+end_src
#+name: fig:noise_budget_dcm_schematic_fast_jack_frame
#+caption: Schematic representation of the control loop in the frame of one fast jack
#+RESULTS:
[[file:figs/noise_budget_dcm_schematic_fast_jack_frame.png]]
** Matlab Init :noexport:ignore:
#+begin_src matlab
%% dcm_noise_budget.m
% Basic uniaxial noise budgeting
#+end_src
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no :noweb yes
<<m-init-path>>
#+end_src
#+begin_src matlab :eval no :noweb yes
<<m-init-path-tangle>>
#+end_src
#+begin_src matlab :noweb yes
<<m-init-other>>
%% Frequency vector for noise budget [Hz]
f = logspace(-1, 3, 1000);
#+end_src
** Power Spectral Density of signals
Interferometer noise:
#+begin_src matlab
Wn = 6e-11*(1 + s/2/pi/200)/(1 + s/2/pi/60); % m/sqrt(Hz)
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
sprintf('Measurement noise: %.2f [nm,rms]', 1e9*sqrt(trapz(f, abs(squeeze(freqresp(Wn, f, 'Hz'))).^2)));
#+end_src
#+RESULTS:
: Measurement noise: 0.79 [nm,rms]
DAC noise (amplified by the PI voltage amplifier, and converted to newtons):
#+begin_src matlab
Wdac = tf(3e-8); % V/sqrt(Hz)
Wu = Wdac*22.5*10; % N/sqrt(Hz)
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
sprintf('DAC noise: %.2f [uV,rms]', 1e6*sqrt(trapz(f, abs(squeeze(freqresp(Wdac, f, 'Hz'))).^2)));
#+end_src
#+RESULTS:
: DAC noise: 0.95 [uV,rms]
Disturbances:
#+begin_src matlab
Wd = 5e-7/(1 + s/2/pi); % m/sqrt(Hz)
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
sprintf('Disturbance motion: %.2f [um,rms]', 1e6*sqrt(trapz(f, abs(squeeze(freqresp(Wd, f, 'Hz'))).^2)));
#+end_src
#+RESULTS:
: Disturbance motion: 0.61 [um,rms]
#+begin_src matlab :exports none :tangle no
save('matlab/mat/asd_noises_disturbances.mat', 'Wn', 'Wu', 'Wd');
#+end_src
#+begin_src matlab :eval no
%% Save ASD of noise and disturbances
save('mat/asd_noises_disturbances.mat', 'Wn', 'Wu', 'Wd');
#+end_src
** Open Loop disturbance and measurement noise
The comparison of the amplitude spectral density of the measurement noise and of the jack parasitic motion is performed in Figure [[fig:open_loop_noise_budget_fast_jack]].
It confirms that the sensor noise is low enough to measure the motion errors of the crystal.
#+begin_src matlab :exports none
%% Bode plot for the plant (strain gauge output)
figure;
hold on;
plot(f, abs(squeeze(freqresp(Wn, f, 'Hz'))), ...
'DisplayName', 'n');
plot(f, abs(squeeze(freqresp(Wd, f, 'Hz'))), ...
'DisplayName', 'd');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD [$m/\sqrt{Hz}$]');
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
xlim([f(1), f(end)]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/open_loop_noise_budget_fast_jack.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:open_loop_noise_budget_fast_jack
#+caption: Open Loop noise budgeting
#+RESULTS:
[[file:figs/open_loop_noise_budget_fast_jack.png]]
* Active Damping Plant (Strain gauges) * Active Damping Plant (Strain gauges)
:PROPERTIES: :PROPERTIES:
:header-args:matlab+: :tangle matlab/dcm_active_damping_strain_gauges.m :header-args:matlab+: :tangle matlab/dcm_active_damping_strain_gauges.m
@ -1673,6 +1829,95 @@ The HAC-IFF control strategy can effectively reduce the transmissibility of the
This reduction is effective inside the bandwidth of the controller. This reduction is effective inside the bandwidth of the controller.
#+end_important #+end_important
** Close Loop noise budget
#+begin_src matlab :exports none
%% Load disturbances
load('asd_noises_disturbances.mat');
#+end_src
Let's compute the amplitude spectral density of the jack motion errors due to the sensor noise, the actuator noise and disturbances.
#+begin_src matlab
%% Computation of ASD of contribution of inputs to the closed-loop motion
% Error due to disturbances
asd_d = abs(squeeze(freqresp(Wd*(1/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
% Error due to actuator noise
asd_u = abs(squeeze(freqresp(Wu*(G_dp(1,1)/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
% Error due to sensor noise
asd_n = abs(squeeze(freqresp(Wn*(G_dp(1,1)*Khac(1,1)/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
#+end_src
The closed-loop ASD is then:
#+begin_src matlab
%% ASD of the closed-loop motion
asd_cl = sqrt(asd_d.^2 + asd_u.^2 + asd_n.^2);
#+end_src
The obtained ASD are shown in Figure [[fig:close_loop_asd_noise_budget_hac_iff]].
#+begin_src matlab :exports none
%% Noise Budget (ASD)
f = logspace(-1, 3, 1000);
figure;
hold on;
plot(f, asd_n, 'DisplayName', '$n$');
plot(f, asd_u, 'DisplayName', '$d_u$');
plot(f, asd_d, 'DisplayName', '$d$');
plot(f, asd_cl, 'k--', 'DisplayName', '$y$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD [$m/\sqrt{Hz}$]');
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
xlim([f(1), f(end)]);
ylim([1e-16, 1e-8]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/close_loop_asd_noise_budget_hac_iff.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:close_loop_asd_noise_budget_hac_iff
#+caption: Closed Loop noise budget
#+RESULTS:
[[file:figs/close_loop_asd_noise_budget_hac_iff.png]]
Let's compare the open-loop and close-loop cases (Figure [[fig:cps_comp_ol_cl_hac_iff]]).
#+begin_src matlab :exports none
% Amplitude spectral density of the open loop motion errors [m/sqrt(Hz)]
asd_ol = abs(squeeze(freqresp(Wd, f, 'Hz')));
#+end_src
#+begin_src matlab :exports none
% CPS of open-loop motion [m^2]
cps_ol = flip(-cumtrapz(flip(f), flip(asd_ol.^2)));
% CPS of closed-loop motion [m^2]
cps_cl = flip(-cumtrapz(flip(f), flip(asd_cl.^2)));
#+end_src
#+begin_src matlab :exports none
%% Cumulative Power Spectrum - Motion error of fast jack
figure;
hold on;
plot(f, cps_ol, 'DisplayName', sprintf('OL, $\\epsilon_d = %.0f$ [nm,rms]', 1e9*sqrt(cps_ol(1))));
plot(f, cps_cl, 'DisplayName', sprintf('CL, $\\epsilon_d = %.0f$ [nm,rms]', 1e9*sqrt(cps_cl(1))));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('CPS [$m^2$]');
legend('location', 'southwest', 'FontSize', 8);
xlim([f(1), f(end)]);
% ylim([1e-16, 1e-8]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/cps_comp_ol_cl_hac_iff.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:cps_comp_ol_cl_hac_iff
#+caption: Cumulative Power Spectrum of the open-loop and closed-loop motion error along one fast-jack
#+RESULTS:
[[file:figs/cps_comp_ol_cl_hac_iff.png]]
* Helping Functions :noexport: * Helping Functions :noexport:
** Initialize Path ** Initialize Path
#+NAME: m-init-path #+NAME: m-init-path

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,211 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="304.626pt" height="87.035pt" viewBox="0 0 304.626 87.035" version="1.2">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 7.109375 -2.578125 C 7.109375 -2.65625 7.0625 -2.6875 6.984375 -2.6875 C 6.75 -2.6875 6.171875 -2.65625 5.9375 -2.65625 L 4.5625 -2.6875 C 4.46875 -2.6875 4.359375 -2.6875 4.359375 -2.5 C 4.359375 -2.390625 4.4375 -2.390625 4.65625 -2.390625 C 4.65625 -2.390625 4.953125 -2.390625 5.171875 -2.359375 C 5.4375 -2.34375 5.484375 -2.3125 5.484375 -2.171875 C 5.484375 -2.09375 5.375 -1.640625 5.28125 -1.28125 C 5 -0.203125 3.71875 -0.09375 3.375 -0.09375 C 2.421875 -0.09375 1.390625 -0.65625 1.390625 -2.15625 C 1.390625 -2.46875 1.484375 -4.09375 2.53125 -5.375 C 3.0625 -6.046875 4.015625 -6.640625 4.984375 -6.640625 C 6 -6.640625 6.578125 -5.890625 6.578125 -4.75 C 6.578125 -4.34375 6.546875 -4.34375 6.546875 -4.234375 C 6.546875 -4.140625 6.65625 -4.140625 6.6875 -4.140625 C 6.828125 -4.140625 6.828125 -4.15625 6.875 -4.34375 L 7.5 -6.859375 C 7.5 -6.875 7.46875 -6.953125 7.390625 -6.953125 C 7.359375 -6.953125 7.34375 -6.9375 7.234375 -6.828125 L 6.546875 -6.078125 C 6.453125 -6.21875 6 -6.953125 4.90625 -6.953125 C 2.71875 -6.953125 0.5 -4.765625 0.5 -2.484375 C 0.5 -0.921875 1.59375 0.21875 3.1875 0.21875 C 3.625 0.21875 4.0625 0.125 4.421875 -0.015625 C 4.90625 -0.21875 5.09375 -0.421875 5.28125 -0.625 C 5.359375 -0.375 5.625 -0.015625 5.71875 -0.015625 C 5.765625 -0.015625 5.78125 -0.046875 5.78125 -0.046875 C 5.8125 -0.0625 5.90625 -0.4375 5.953125 -0.65625 L 6.140625 -1.40625 C 6.1875 -1.578125 6.234375 -1.75 6.265625 -1.90625 C 6.375 -2.359375 6.390625 -2.375 6.953125 -2.390625 C 7 -2.390625 7.109375 -2.390625 7.109375 -2.578125 Z M 7.109375 -2.578125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 3.90625 -1.53125 C 3.90625 -1.890625 3.71875 -2.125 3.59375 -2.25 C 3.328125 -2.53125 3.046875 -2.578125 2.609375 -2.65625 C 2.25 -2.734375 1.859375 -2.8125 1.859375 -3.25 C 1.859375 -3.546875 2.09375 -4.140625 2.96875 -4.140625 C 3.21875 -4.140625 3.703125 -4.078125 3.859375 -3.6875 C 3.578125 -3.671875 3.375 -3.453125 3.375 -3.25 C 3.375 -3.109375 3.46875 -2.953125 3.6875 -2.953125 C 3.90625 -2.953125 4.140625 -3.125 4.140625 -3.515625 C 4.140625 -3.953125 3.71875 -4.359375 2.96875 -4.359375 C 1.671875 -4.359375 1.296875 -3.359375 1.296875 -2.921875 C 1.296875 -2.15625 2.03125 -2 2.3125 -1.9375 C 2.828125 -1.84375 3.34375 -1.734375 3.34375 -1.1875 C 3.34375 -0.9375 3.109375 -0.109375 1.9375 -0.109375 C 1.796875 -0.109375 1.03125 -0.109375 0.8125 -0.625 C 1.1875 -0.578125 1.421875 -0.875 1.421875 -1.15625 C 1.421875 -1.375 1.265625 -1.5 1.0625 -1.5 C 0.8125 -1.5 0.515625 -1.296875 0.515625 -0.84375 C 0.515625 -0.28125 1.078125 0.109375 1.921875 0.109375 C 3.515625 0.109375 3.90625 -1.078125 3.90625 -1.53125 Z M 3.90625 -1.53125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 7.296875 -0.203125 C 7.296875 -0.3125 7.1875 -0.3125 7.09375 -0.3125 C 6.6875 -0.3125 6.5625 -0.40625 6.421875 -0.75 L 5.015625 -3.984375 C 5.015625 -4.015625 4.96875 -4.09375 4.96875 -4.125 C 4.96875 -4.125 5.140625 -4.265625 5.25 -4.34375 L 6.984375 -5.671875 C 7.90625 -6.359375 8.296875 -6.40625 8.59375 -6.421875 C 8.671875 -6.4375 8.765625 -6.453125 8.765625 -6.625 C 8.765625 -6.671875 8.734375 -6.734375 8.65625 -6.734375 C 8.4375 -6.734375 8.1875 -6.703125 7.953125 -6.703125 C 7.59375 -6.703125 7.21875 -6.734375 6.859375 -6.734375 C 6.796875 -6.734375 6.671875 -6.734375 6.671875 -6.53125 C 6.671875 -6.46875 6.71875 -6.4375 6.796875 -6.421875 C 7.015625 -6.40625 7.09375 -6.359375 7.09375 -6.21875 C 7.09375 -6.046875 6.796875 -5.8125 6.75 -5.765625 L 2.90625 -2.8125 L 3.6875 -5.96875 C 3.78125 -6.328125 3.796875 -6.421875 4.515625 -6.421875 C 4.765625 -6.421875 4.84375 -6.421875 4.84375 -6.625 C 4.84375 -6.71875 4.765625 -6.734375 4.71875 -6.734375 L 3.453125 -6.703125 L 2.171875 -6.734375 C 2.109375 -6.734375 1.984375 -6.734375 1.984375 -6.546875 C 1.984375 -6.421875 2.078125 -6.421875 2.265625 -6.421875 C 2.390625 -6.421875 2.578125 -6.421875 2.6875 -6.40625 C 2.84375 -6.390625 2.90625 -6.359375 2.90625 -6.25 C 2.90625 -6.21875 2.90625 -6.1875 2.875 -6.0625 L 1.546875 -0.765625 C 1.453125 -0.390625 1.421875 -0.3125 0.65625 -0.3125 C 0.484375 -0.3125 0.375 -0.3125 0.375 -0.125 C 0.375 0 0.5 0 0.515625 0 L 1.78125 -0.03125 L 2.40625 -0.015625 C 2.625 -0.015625 2.84375 0 3.046875 0 C 3.109375 0 3.25 0 3.25 -0.203125 C 3.25 -0.3125 3.15625 -0.3125 2.96875 -0.3125 C 2.609375 -0.3125 2.328125 -0.3125 2.328125 -0.484375 C 2.328125 -0.546875 2.390625 -0.765625 2.421875 -0.921875 L 2.8125 -2.46875 L 4.28125 -3.609375 L 5.421875 -0.953125 C 5.546875 -0.6875 5.546875 -0.671875 5.546875 -0.609375 C 5.546875 -0.3125 5.109375 -0.3125 5.03125 -0.3125 C 4.921875 -0.3125 4.8125 -0.3125 4.8125 -0.109375 C 4.8125 0 4.953125 0 4.953125 0 C 5.34375 0 5.765625 -0.03125 6.15625 -0.03125 C 6.375 -0.03125 6.90625 0 7.125 0 C 7.171875 0 7.296875 0 7.296875 -0.203125 Z M 7.296875 -0.203125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-4">
<path style="stroke:none;" d="M 4.796875 -3.75 C 4.828125 -3.890625 4.828125 -3.921875 4.828125 -3.984375 C 4.828125 -4.15625 4.6875 -4.25 4.546875 -4.25 C 4.453125 -4.25 4.28125 -4.1875 4.203125 -4.046875 C 4.1875 -4 4.09375 -3.6875 4.0625 -3.515625 L 3.859375 -2.71875 L 3.421875 -0.953125 C 3.375 -0.796875 2.953125 -0.109375 2.3125 -0.109375 C 1.796875 -0.109375 1.703125 -0.546875 1.703125 -0.90625 C 1.703125 -1.359375 1.859375 -1.96875 2.203125 -2.84375 C 2.359375 -3.25 2.390625 -3.359375 2.390625 -3.546875 C 2.390625 -4 2.078125 -4.359375 1.59375 -4.359375 C 0.65625 -4.359375 0.28125 -2.921875 0.28125 -2.84375 C 0.28125 -2.734375 0.40625 -2.734375 0.40625 -2.734375 C 0.5 -2.734375 0.515625 -2.765625 0.5625 -2.921875 C 0.828125 -3.84375 1.21875 -4.140625 1.5625 -4.140625 C 1.640625 -4.140625 1.796875 -4.140625 1.796875 -3.828125 C 1.796875 -3.578125 1.703125 -3.328125 1.640625 -3.140625 C 1.25 -2.09375 1.0625 -1.53125 1.0625 -1.0625 C 1.0625 -0.1875 1.6875 0.109375 2.265625 0.109375 C 2.65625 0.109375 2.984375 -0.0625 3.265625 -0.328125 C 3.140625 0.171875 3.015625 0.65625 2.625 1.1875 C 2.359375 1.515625 1.984375 1.796875 1.53125 1.796875 C 1.40625 1.796875 0.953125 1.78125 0.78125 1.390625 C 0.953125 1.390625 1.078125 1.390625 1.21875 1.265625 C 1.3125 1.1875 1.40625 1.0625 1.40625 0.875 C 1.40625 0.5625 1.140625 0.515625 1.046875 0.515625 C 0.8125 0.515625 0.5 0.6875 0.5 1.15625 C 0.5 1.65625 0.921875 2.015625 1.53125 2.015625 C 2.546875 2.015625 3.5625 1.125 3.84375 0.015625 Z M 4.796875 -3.75 "/>
</symbol>
<symbol overflow="visible" id="glyph0-5">
<path style="stroke:none;" d="M 4.90625 -1.40625 C 4.90625 -1.515625 4.828125 -1.515625 4.796875 -1.515625 C 4.6875 -1.515625 4.6875 -1.46875 4.65625 -1.328125 C 4.484375 -0.6875 4.3125 -0.109375 3.90625 -0.109375 C 3.640625 -0.109375 3.609375 -0.359375 3.609375 -0.5625 C 3.609375 -0.796875 3.625 -0.875 3.671875 -1.03125 L 5.09375 -6.734375 C 5.09375 -6.734375 5.09375 -6.84375 4.953125 -6.84375 C 4.8125 -6.84375 3.875 -6.75 3.703125 -6.734375 C 3.625 -6.71875 3.5625 -6.671875 3.5625 -6.546875 C 3.5625 -6.421875 3.65625 -6.421875 3.8125 -6.421875 C 4.28125 -6.421875 4.296875 -6.359375 4.296875 -6.265625 L 4.265625 -6.0625 L 3.671875 -3.734375 C 3.5 -4.09375 3.21875 -4.359375 2.765625 -4.359375 C 1.609375 -4.359375 0.390625 -2.90625 0.390625 -1.46875 C 0.390625 -0.546875 0.9375 0.109375 1.703125 0.109375 C 1.90625 0.109375 2.390625 0.0625 2.984375 -0.625 C 3.0625 -0.21875 3.40625 0.109375 3.890625 0.109375 C 4.234375 0.109375 4.453125 -0.125 4.609375 -0.4375 C 4.78125 -0.78125 4.90625 -1.40625 4.90625 -1.40625 Z M 3.53125 -3.109375 L 3.03125 -1.171875 C 2.984375 -1 2.984375 -0.96875 2.84375 -0.8125 C 2.40625 -0.265625 2 -0.109375 1.71875 -0.109375 C 1.234375 -0.109375 1.09375 -0.65625 1.09375 -1.03125 C 1.09375 -1.53125 1.40625 -2.734375 1.640625 -3.1875 C 1.9375 -3.78125 2.390625 -4.140625 2.78125 -4.140625 C 3.421875 -4.140625 3.5625 -3.328125 3.5625 -3.265625 C 3.5625 -3.21875 3.546875 -3.15625 3.53125 -3.109375 Z M 3.53125 -3.109375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-6">
<path style="stroke:none;" d="M 5.625 -1.40625 C 5.625 -1.515625 5.546875 -1.515625 5.515625 -1.515625 C 5.40625 -1.515625 5.40625 -1.484375 5.359375 -1.328125 C 5.171875 -0.65625 4.84375 -0.109375 4.359375 -0.109375 C 4.1875 -0.109375 4.125 -0.203125 4.125 -0.4375 C 4.125 -0.6875 4.203125 -0.921875 4.296875 -1.140625 C 4.484375 -1.65625 4.90625 -2.734375 4.90625 -3.296875 C 4.90625 -3.96875 4.46875 -4.359375 3.765625 -4.359375 C 2.875 -4.359375 2.390625 -3.734375 2.234375 -3.5 C 2.171875 -4.046875 1.78125 -4.359375 1.328125 -4.359375 C 0.875 -4.359375 0.6875 -3.96875 0.578125 -3.796875 C 0.421875 -3.453125 0.28125 -2.875 0.28125 -2.84375 C 0.28125 -2.734375 0.40625 -2.734375 0.40625 -2.734375 C 0.5 -2.734375 0.515625 -2.75 0.578125 -2.96875 C 0.734375 -3.671875 0.9375 -4.140625 1.296875 -4.140625 C 1.484375 -4.140625 1.59375 -4.015625 1.59375 -3.6875 C 1.59375 -3.484375 1.5625 -3.375 1.4375 -2.859375 L 0.875 -0.578125 C 0.84375 -0.4375 0.78125 -0.203125 0.78125 -0.15625 C 0.78125 0.015625 0.921875 0.109375 1.0625 0.109375 C 1.1875 0.109375 1.359375 0.03125 1.421875 -0.171875 C 1.4375 -0.1875 1.5625 -0.65625 1.609375 -0.890625 L 1.828125 -1.78125 C 1.890625 -2 1.953125 -2.21875 2 -2.4375 L 2.125 -2.9375 C 2.28125 -3.25 2.796875 -4.140625 3.734375 -4.140625 C 4.1875 -4.140625 4.265625 -3.78125 4.265625 -3.453125 C 4.265625 -2.84375 3.78125 -1.578125 3.625 -1.15625 C 3.546875 -0.921875 3.53125 -0.8125 3.53125 -0.703125 C 3.53125 -0.234375 3.875 0.109375 4.34375 0.109375 C 5.265625 0.109375 5.625 -1.328125 5.625 -1.40625 Z M 5.625 -1.40625 "/>
</symbol>
<symbol overflow="visible" id="glyph1-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph1-1">
<path style="stroke:none;" d="M 3.265625 2.359375 C 3.265625 2.34375 3.265625 2.3125 3.09375 2.15625 C 1.859375 0.90625 1.546875 -0.953125 1.546875 -2.46875 C 1.546875 -4.1875 1.921875 -5.890625 3.140625 -7.125 C 3.265625 -7.25 3.265625 -7.265625 3.265625 -7.296875 C 3.265625 -7.359375 3.21875 -7.390625 3.171875 -7.390625 C 3.0625 -7.390625 2.171875 -6.71875 1.59375 -5.46875 C 1.09375 -4.390625 0.96875 -3.296875 0.96875 -2.46875 C 0.96875 -1.703125 1.078125 -0.5 1.625 0.609375 C 2.21875 1.828125 3.0625 2.46875 3.171875 2.46875 C 3.21875 2.46875 3.265625 2.4375 3.265625 2.359375 Z M 3.265625 2.359375 "/>
</symbol>
<symbol overflow="visible" id="glyph1-2">
<path style="stroke:none;" d="M 2.84375 -2.46875 C 2.84375 -3.234375 2.734375 -4.421875 2.203125 -5.546875 C 1.609375 -6.75 0.765625 -7.390625 0.65625 -7.390625 C 0.59375 -7.390625 0.5625 -7.359375 0.5625 -7.296875 C 0.5625 -7.265625 0.5625 -7.25 0.75 -7.0625 C 1.71875 -6.09375 2.28125 -4.53125 2.28125 -2.46875 C 2.28125 -0.78125 1.90625 0.953125 0.6875 2.203125 C 0.5625 2.3125 0.5625 2.34375 0.5625 2.359375 C 0.5625 2.421875 0.59375 2.46875 0.65625 2.46875 C 0.765625 2.46875 1.640625 1.796875 2.234375 0.546875 C 2.734375 -0.546875 2.84375 -1.640625 2.84375 -2.46875 Z M 2.84375 -2.46875 "/>
</symbol>
<symbol overflow="visible" id="glyph2-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph2-1">
<path style="stroke:none;" d="M 11.46875 -4.234375 C 11.46875 -4.546875 11.1875 -4.546875 10.9375 -4.546875 L 6.421875 -4.546875 L 6.421875 -9.0625 C 6.421875 -9.296875 6.421875 -9.59375 6.125 -9.59375 C 5.828125 -9.59375 5.828125 -9.3125 5.828125 -9.0625 L 5.828125 -4.546875 L 1.3125 -4.546875 C 1.078125 -4.546875 0.78125 -4.546875 0.78125 -4.25 C 0.78125 -3.953125 1.0625 -3.953125 1.3125 -3.953125 L 5.828125 -3.953125 L 5.828125 0.5625 C 5.828125 0.796875 5.828125 1.09375 6.109375 1.09375 C 6.421875 1.09375 6.421875 0.8125 6.421875 0.5625 L 6.421875 -3.953125 L 10.9375 -3.953125 C 11.171875 -3.953125 11.46875 -3.953125 11.46875 -4.234375 Z M 11.46875 -4.234375 "/>
</symbol>
<symbol overflow="visible" id="glyph3-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph3-1">
<path style="stroke:none;" d="M 6.84375 -2.46875 C 6.84375 -2.65625 6.65625 -2.65625 6.515625 -2.65625 L 1.140625 -2.65625 C 1 -2.65625 0.8125 -2.65625 0.8125 -2.46875 C 0.8125 -2.265625 1 -2.265625 1.140625 -2.265625 L 6.515625 -2.265625 C 6.65625 -2.265625 6.84375 -2.265625 6.84375 -2.46875 Z M 6.84375 -2.46875 "/>
</symbol>
<symbol overflow="visible" id="glyph4-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph4-1">
<path style="stroke:none;" d="M 2.75 -4.34375 C 2.75 -4.640625 2.453125 -4.84375 2.0625 -4.84375 C 1.515625 -4.84375 0.90625 -4.46875 0.90625 -3.734375 L 0.90625 -2.96875 L 0.3125 -2.96875 L 0.3125 -2.71875 L 0.90625 -2.71875 L 0.90625 -0.546875 C 0.90625 -0.25 0.828125 -0.25 0.390625 -0.25 L 0.390625 0 C 0.421875 0 0.890625 -0.03125 1.171875 -0.03125 L 2.0625 0 L 2.0625 -0.25 L 1.921875 -0.25 C 1.421875 -0.25 1.421875 -0.328125 1.421875 -0.5625 L 1.421875 -2.71875 L 2.28125 -2.71875 L 2.28125 -2.96875 L 1.390625 -2.96875 L 1.390625 -3.734375 C 1.390625 -4.375 1.765625 -4.65625 2.0625 -4.65625 C 2.125 -4.65625 2.1875 -4.640625 2.265625 -4.625 C 2.15625 -4.5625 2.109375 -4.453125 2.109375 -4.34375 C 2.109375 -4.15625 2.234375 -4.03125 2.421875 -4.03125 C 2.609375 -4.03125 2.75 -4.15625 2.75 -4.34375 Z M 2.75 -4.34375 "/>
</symbol>
<symbol overflow="visible" id="glyph4-2">
<path style="stroke:none;" d="M 1.671875 0.3125 L 1.671875 -3.03125 L 0.578125 -2.96875 L 0.578125 -2.71875 C 1.09375 -2.71875 1.15625 -2.671875 1.15625 -2.328125 L 1.15625 0.328125 C 1.15625 0.59375 1.109375 1.21875 0.640625 1.21875 C 0.625 1.21875 0.453125 1.21875 0.296875 1.140625 C 0.3125 1.140625 0.46875 1.046875 0.46875 0.84375 C 0.46875 0.65625 0.328125 0.53125 0.140625 0.53125 C -0.0625 0.53125 -0.1875 0.65625 -0.1875 0.859375 C -0.1875 1.21875 0.234375 1.40625 0.640625 1.40625 C 1.203125 1.40625 1.671875 0.96875 1.671875 0.3125 Z M 1.671875 -4.140625 C 1.671875 -4.375 1.5 -4.546875 1.28125 -4.546875 C 1.046875 -4.546875 0.890625 -4.359375 0.890625 -4.15625 C 0.890625 -3.9375 1.0625 -3.75 1.28125 -3.75 C 1.515625 -3.75 1.671875 -3.953125 1.671875 -4.140625 Z M 1.671875 -4.140625 "/>
</symbol>
<symbol overflow="visible" id="glyph5-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph5-1">
<path style="stroke:none;" d="M 1.640625 -0.046875 C 1.640625 -0.46875 1.484375 -0.796875 1.171875 -0.796875 C 0.9375 -0.796875 0.765625 -0.609375 0.765625 -0.40625 C 0.765625 -0.171875 0.9375 0 1.171875 0 C 1.34375 0 1.453125 -0.109375 1.453125 -0.109375 C 1.453125 0.265625 1.390625 0.703125 0.921875 1.15625 C 0.890625 1.171875 0.875 1.203125 0.875 1.234375 C 0.875 1.28125 0.921875 1.328125 0.96875 1.328125 C 1.0625 1.328125 1.640625 0.78125 1.640625 -0.046875 Z M 1.640625 -0.046875 "/>
</symbol>
<symbol overflow="visible" id="glyph5-2">
<path style="stroke:none;" d="M 6.65625 -0.984375 C 6.65625 -1.078125 6.5625 -1.078125 6.546875 -1.078125 C 6.4375 -1.078125 6.4375 -1.03125 6.40625 -0.953125 C 6.25 -0.40625 5.953125 -0.125 5.671875 -0.125 C 5.53125 -0.125 5.5 -0.21875 5.5 -0.359375 C 5.5 -0.53125 5.546875 -0.609375 5.65625 -0.921875 C 5.75 -1.140625 6.03125 -1.875 6.03125 -2.25 C 6.03125 -2.359375 6.03125 -2.65625 5.78125 -2.859375 C 5.65625 -2.9375 5.453125 -3.03125 5.140625 -3.03125 C 4.515625 -3.03125 4.140625 -2.625 3.90625 -2.34375 C 3.859375 -2.921875 3.375 -3.03125 3.015625 -3.03125 C 2.453125 -3.03125 2.0625 -2.6875 1.859375 -2.40625 C 1.8125 -2.890625 1.40625 -3.03125 1.109375 -3.03125 C 0.8125 -3.03125 0.65625 -2.828125 0.578125 -2.671875 C 0.421875 -2.40625 0.328125 -2.015625 0.328125 -1.984375 C 0.328125 -1.890625 0.421875 -1.890625 0.4375 -1.890625 C 0.53125 -1.890625 0.546875 -1.921875 0.59375 -2.109375 C 0.703125 -2.515625 0.828125 -2.84375 1.09375 -2.84375 C 1.28125 -2.84375 1.328125 -2.6875 1.328125 -2.515625 C 1.328125 -2.375 1.265625 -2.125 1.21875 -1.9375 L 0.84375 -0.4375 C 0.8125 -0.34375 0.765625 -0.171875 0.765625 -0.15625 C 0.765625 0 0.890625 0.0625 1 0.0625 C 1.125 0.0625 1.234375 -0.015625 1.28125 -0.078125 C 1.3125 -0.140625 1.359375 -0.359375 1.40625 -0.515625 L 1.546875 -1.125 C 1.59375 -1.28125 1.640625 -1.4375 1.671875 -1.59375 C 1.75 -1.875 1.75 -1.921875 1.953125 -2.21875 C 2.15625 -2.484375 2.46875 -2.84375 2.984375 -2.84375 C 3.390625 -2.84375 3.390625 -2.5 3.390625 -2.359375 C 3.390625 -2.1875 3.375 -2.109375 3.28125 -1.71875 L 2.984375 -0.5625 C 2.953125 -0.421875 2.890625 -0.1875 2.890625 -0.15625 C 2.890625 0 3.015625 0.0625 3.125 0.0625 C 3.25 0.0625 3.359375 -0.015625 3.390625 -0.078125 C 3.4375 -0.140625 3.484375 -0.359375 3.515625 -0.515625 L 3.671875 -1.125 C 3.71875 -1.28125 3.75 -1.4375 3.796875 -1.59375 C 3.859375 -1.890625 3.859375 -1.90625 4 -2.109375 C 4.21875 -2.453125 4.5625 -2.84375 5.109375 -2.84375 C 5.484375 -2.84375 5.515625 -2.53125 5.515625 -2.359375 C 5.515625 -1.953125 5.21875 -1.1875 5.109375 -0.890625 C 5.03125 -0.703125 5 -0.640625 5 -0.53125 C 5 -0.15625 5.3125 0.0625 5.65625 0.0625 C 6.34375 0.0625 6.65625 -0.875 6.65625 -0.984375 Z M 6.65625 -0.984375 "/>
</symbol>
<symbol overflow="visible" id="glyph5-3">
<path style="stroke:none;" d="M 4.328125 -0.984375 C 4.328125 -1.078125 4.234375 -1.078125 4.203125 -1.078125 C 4.109375 -1.078125 4.109375 -1.046875 4.0625 -0.859375 C 3.96875 -0.53125 3.84375 -0.125 3.5625 -0.125 C 3.375 -0.125 3.328125 -0.28125 3.328125 -0.46875 C 3.328125 -0.578125 3.390625 -0.828125 3.4375 -1 L 3.578125 -1.625 L 3.734375 -2.234375 C 3.78125 -2.40625 3.859375 -2.71875 3.859375 -2.75 C 3.859375 -2.890625 3.75 -2.96875 3.625 -2.96875 C 3.375 -2.96875 3.328125 -2.765625 3.265625 -2.546875 L 2.921875 -1.109375 C 2.875 -0.984375 2.8125 -0.71875 2.796875 -0.703125 C 2.671875 -0.5 2.390625 -0.125 1.96875 -0.125 C 1.5 -0.125 1.5 -0.578125 1.5 -0.703125 C 1.5 -1.109375 1.6875 -1.59375 1.875 -2.09375 C 1.9375 -2.234375 1.984375 -2.328125 1.984375 -2.453125 C 1.984375 -2.796875 1.671875 -3.03125 1.328125 -3.03125 C 0.640625 -3.03125 0.328125 -2.09375 0.328125 -1.984375 C 0.328125 -1.890625 0.421875 -1.890625 0.4375 -1.890625 C 0.53125 -1.890625 0.546875 -1.921875 0.5625 -2 C 0.734375 -2.5625 1.03125 -2.84375 1.296875 -2.84375 C 1.421875 -2.84375 1.46875 -2.765625 1.46875 -2.609375 C 1.46875 -2.453125 1.421875 -2.296875 1.34375 -2.140625 C 0.984375 -1.1875 0.984375 -1 0.984375 -0.8125 C 0.984375 -0.6875 0.984375 -0.375 1.234375 -0.15625 C 1.4375 0.015625 1.703125 0.0625 1.9375 0.0625 C 2.375 0.0625 2.609375 -0.171875 2.84375 -0.390625 C 2.984375 0.0625 3.453125 0.0625 3.53125 0.0625 C 3.765625 0.0625 3.953125 -0.0625 4.078125 -0.296875 C 4.234375 -0.5625 4.328125 -0.96875 4.328125 -0.984375 Z M 4.328125 -0.984375 "/>
</symbol>
</g>
<clipPath id="clip1">
<path d="M 1.484375 15 L 37 15 L 37 63 L 1.484375 63 Z M 1.484375 15 "/>
</clipPath>
<clipPath id="clip2">
<path d="M 240 51 L 288 51 L 288 86.082031 L 240 86.082031 Z M 240 51 "/>
</clipPath>
<clipPath id="clip3">
<path d="M 1.484375 36 L 28 36 L 28 69 L 1.484375 69 Z M 1.484375 36 "/>
</clipPath>
<clipPath id="clip4">
<path d="M 277 74 L 302.769531 74 L 302.769531 76 L 277 76 Z M 277 74 "/>
</clipPath>
<clipPath id="clip5">
<path d="M 261 59 L 294 59 L 294 86.082031 L 261 86.082031 Z M 261 59 "/>
</clipPath>
<clipPath id="clip6">
<path d="M 282 23 L 302.769531 23 L 302.769531 55 L 282 55 Z M 282 23 "/>
</clipPath>
</defs>
<g id="surface1">
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -17.008146 -14.172999 L 17.009419 -14.172999 L 17.009419 14.172997 L -17.008146 14.172997 Z M -17.008146 -14.172999 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="167.919958" y="41.339647"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="175.667062" y="41.339647"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="179.49858" y="41.339647"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-2" x="184.117369" y="41.339647"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -45.851786 0.00197369 C -45.851786 5.503711 -50.31479 9.962765 -55.816527 9.962765 C -61.318265 9.962765 -65.777319 5.503711 -65.777319 0.00197369 C -65.777319 -5.503714 -61.318265 -9.962768 -55.816527 -9.962768 C -50.31479 -9.962768 -45.851786 -5.503714 -45.851786 0.00197369 Z M -45.851786 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph2-1" x="116.603924" y="42.997268"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -128.638524 -14.172999 L -94.624909 -14.172999 L -94.624909 14.172997 L -128.638524 14.172997 Z M -128.638524 -14.172999 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-3" x="56.850441" y="41.339647"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="65.923839" y="41.339647"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="69.756346" y="41.339647"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-2" x="74.375136" y="41.339647"/>
</g>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 22.175781 38.875 C 22.175781 33.433594 17.765625 29.023438 12.324219 29.023438 C 6.882812 29.023438 2.46875 33.433594 2.46875 38.875 C 2.46875 44.320312 6.882812 48.730469 12.324219 48.730469 C 17.765625 48.730469 22.175781 44.320312 22.175781 38.875 Z M 22.175781 38.875 "/>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -157.486114 0.00197369 C -157.486114 5.503711 -161.945168 9.962765 -167.446906 9.962765 C -172.948644 9.962765 -177.411647 5.503711 -177.411647 0.00197369 C -177.411647 -5.503714 -172.948644 -9.962768 -167.446906 -9.962768 C -161.945168 -9.962768 -157.486114 -5.503714 -157.486114 0.00197369 Z M -157.486114 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph2-1" x="6.198049" y="42.997268"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph3-1" x="2.691923" y="56.448132"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 65.778592 0.00197369 C 65.778592 5.503711 61.319539 9.962765 55.813851 9.962765 C 50.312113 9.962765 45.85306 5.503711 45.85306 0.00197369 C 45.85306 -5.503714 50.312113 -9.962768 55.813851 -9.962768 C 61.319539 -9.962768 65.778592 -5.503714 65.778592 0.00197369 Z M 65.778592 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph2-1" x="227.0098" y="42.997268"/>
</g>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 273.75 75.242188 C 273.75 69.796875 269.335938 65.386719 263.894531 65.386719 C 258.453125 65.386719 254.042969 69.796875 254.042969 75.242188 C 254.042969 80.683594 258.453125 85.09375 263.894531 85.09375 C 269.335938 85.09375 273.75 80.683594 273.75 75.242188 Z M 273.75 75.242188 "/>
<g clip-path="url(#clip2)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 96.877432 -36.768435 C 96.877432 -31.262747 92.414429 -26.803694 86.912691 -26.803694 C 81.410953 -26.803694 76.951899 -31.262747 76.951899 -36.768435 C 76.951899 -42.270173 81.410953 -46.729226 86.912691 -46.729226 C 92.414429 -46.729226 96.877432 -42.270173 96.877432 -36.768435 Z M 96.877432 -36.768435 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph2-1" x="257.765793" y="79.360095"/>
</g>
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -157.486114 0.00197369 L -133.772953 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.051779 0.00197369 L 1.608524 1.684486 L 3.085659 0.00197369 L 1.608524 -1.684489 Z M 6.051779 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,42.823178,38.876952)"/>
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -94.127264 0.00197369 L -70.410154 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.051449 0.00197369 L 1.608194 1.684486 L 3.089279 0.00197369 L 1.608194 -1.684489 Z M 6.051449 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,105.487567,38.876952)"/>
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -45.851786 0.00197369 L -22.138625 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.054577 0.00197369 L 1.607372 1.684486 L 3.088458 0.00197369 L 1.607372 -1.684489 Z M 6.054577 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,153.230566,38.876952)"/>
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 17.507064 0.00197369 L 41.220225 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.054247 0.00197369 L 1.607042 1.684486 L 3.088127 0.00197369 L 1.607042 -1.684489 Z M 6.054247 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,215.894955,38.876952)"/>
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 86.912691 0.00197369 L 86.912691 -22.170859 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.053631 -0.000809243 L 1.610376 1.681704 L 3.087511 -0.000809243 L 1.610376 -1.683322 Z M 6.053631 -0.000809243 " transform="matrix(0,0.989034,0.989034,0,263.895332,57.997127)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 265.867188 38.875 C 265.867188 37.789062 264.984375 36.90625 263.894531 36.90625 C 262.808594 36.90625 261.925781 37.789062 261.925781 38.875 C 261.925781 39.964844 262.808594 40.847656 263.894531 40.847656 C 264.984375 40.847656 265.867188 39.964844 265.867188 38.875 Z M 265.867188 38.875 "/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="258.789443" y="32.281084"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph4-1" x="263.620875" y="33.758701"/>
<use xlink:href="#glyph4-2" x="266.063908" y="33.758701"/>
</g>
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 76.951899 -36.768435 L -167.446906 -36.768435 L -167.446906 -14.595602 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 12.324219 50.132812 L 10.660156 54.53125 L 12.324219 53.066406 L 13.988281 54.53125 Z M 12.324219 50.132812 "/>
<g clip-path="url(#clip3)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.05418 -0.000394043 L 1.606975 1.682119 L 3.08806 -0.000394043 L 1.606975 -1.682907 Z M 6.05418 -0.000394043 " transform="matrix(0,-0.989034,-0.989034,0,12.323829,56.120603)"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="16.102236" y="56.748798"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph4-1" x="20.933667" y="58.227404"/>
<use xlink:href="#glyph4-2" x="23.3767" y="58.227404"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph5-1" x="25.819496" y="58.227404"/>
<use xlink:href="#glyph5-2" x="28.159759" y="58.227404"/>
</g>
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -55.816527 14.5956 L -55.816527 38.308761 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.054182 -0.000757374 L 1.606977 1.681755 L 3.088062 -0.000757374 L 1.606977 -1.68327 Z M 6.054182 -0.000757374 " transform="matrix(0,0.989034,0.989034,0,122.731218,21.633301)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="126.509101" y="11.607304"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph5-3" x="131.637242" y="13.084921"/>
</g>
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 55.813851 14.5956 L 55.813851 38.308761 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.054182 -0.00191879 L 1.606977 1.684544 L 3.088062 -0.00191879 L 1.606977 -1.684432 Z M 6.054182 -0.00191879 " transform="matrix(0,0.989034,0.989034,0,233.138616,21.633301)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="236.914976" y="11.607304"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph4-1" x="242.043118" y="13.084921"/>
<use xlink:href="#glyph4-2" x="244.486151" y="13.084921"/>
</g>
<g clip-path="url(#clip4)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 101.510266 -36.768435 L 125.223428 -36.768435 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
</g>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 275.152344 75.242188 L 279.546875 76.90625 L 278.085938 75.242188 L 279.546875 73.578125 Z M 275.152344 75.242188 "/>
<g clip-path="url(#clip5)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.053016 0.00142477 L 1.60976 1.683938 L 3.086896 0.00142477 L 1.60976 -1.681088 Z M 6.053016 0.00142477 " transform="matrix(-0.989034,0,0,0.989034,281.138983,75.240778)"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-6" x="286.713832" y="68.643911"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph4-1" x="292.628256" y="70.122517"/>
<use xlink:href="#glyph4-2" x="295.071288" y="70.122517"/>
</g>
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 65.778592 0.00197369 L 120.590593 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,177.934917,38.876952)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 300.382812 38.875 L 295.984375 37.210938 L 297.449219 38.875 L 295.984375 40.542969 Z M 300.382812 38.875 "/>
<g clip-path="url(#clip6)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.054536 0.00197369 L 1.60733 1.684486 L 3.088416 0.00197369 L 1.60733 -1.684489 Z M 6.054536 0.00197369 " transform="matrix(0.989034,0,0,-0.989034,294.39467,38.876952)"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View File

@ -54,10 +54,8 @@ G_fs.OutputName = {'fs_ur', 'fs_uh', 'fs_d'};
% #+RESULTS: % The Bode plot of the identified dynamics is shown in Figure [[fig:iff_plant_bode_plot]].
% | -1.4113e-13 | 1.0339e-13 | 3.774e-14 | % At high frequency, the diagonal terms are constants while the off-diagonal terms have some roll-off.
% | 1.0339e-13 | -1.4113e-13 | 3.774e-14 |
% | 3.7792e-14 | 3.7792e-14 | -7.5585e-14 |
%% Bode plot for the plant %% Bode plot for the plant
@ -82,7 +80,7 @@ for i = 1:2
end end
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude'); set(gca, 'XTickLabel',[]);
legend('location', 'northwest', 'FontSize', 8, 'NumColumns', 2); legend('location', 'northwest', 'FontSize', 8, 'NumColumns', 2);
ylim([1e-13, 1e-7]); ylim([1e-13, 1e-7]);
@ -102,7 +100,11 @@ linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]); xlim([freqs(1), freqs(end)]);
% Controller - Root Locus % Controller - Root Locus
% We want to have integral action around the resonances of the system, but we do not want to integrate at low frequency.
% Therefore, we can use a low pass filter.
%% Integral Force Feedback Controller
Kiff_g1 = eye(3)*1/(1 + s/2/pi/20); Kiff_g1 = eye(3)*1/(1 + s/2/pi/20);
%% Root Locus for IFF %% Root Locus for IFF
@ -141,10 +143,19 @@ legend('location', 'northwest');
% [[file:figs/iff_root_locus.png]] % [[file:figs/iff_root_locus.png]]
%% Integral Force Feedback Controller %% Integral Force Feedback Controller with optimal gain
Kiff = g*Kiff_g1; Kiff = g*Kiff_g1;
% Damped Plant %% Save the IFF controller
save('mat/Kiff.mat', 'Kiff');
% #+name: fig:schematic_jacobian_frame_fastjack_iff
% #+caption: Use of Jacobian matrices to obtain the system in the frame of the fastjacks
% #+RESULTS:
% [[file:figs/schematic_jacobian_frame_fastjack_iff.png]]
%% Input/Output definition %% Input/Output definition
clear io; io_i = 1; clear io; io_i = 1;
@ -157,8 +168,8 @@ io(io_i) = linio([mdl, '/control_system'], 1, 'input'); io_i = io_i + 1;
% Force Sensor {3x1} [m] % Force Sensor {3x1} [m]
io(io_i) = linio([mdl, '/DCM'], 1, 'openoutput'); io_i = io_i + 1; io(io_i) = linio([mdl, '/DCM'], 1, 'openoutput'); io_i = io_i + 1;
%% DCM Kinematics %% Load DCM Kinematics
load('mat/dcm_kinematics.mat'); load('dcm_kinematics.mat');
%% Identification of the Open Loop plant %% Identification of the Open Loop plant
controller.type = 0; % Open Loop controller.type = 0; % Open Loop
@ -172,6 +183,12 @@ G_dp = J_a_111*inv(J_s_111)*linearize(mdl, io);
G_dp.InputName = {'u_ur', 'u_uh', 'u_d'}; G_dp.InputName = {'u_ur', 'u_uh', 'u_d'};
G_dp.OutputName = {'d_ur', 'd_uh', 'd_d'}; G_dp.OutputName = {'d_ur', 'd_uh', 'd_d'};
% The dynamics from $\bm{u}$ to $\bm{d}_{\text{fj}}$ (open-loop dynamics) and from $\bm{u}^\prime$ to $\bm{d}_{\text{fs}}$ are compared in Figure [[fig:comp_damped_undamped_plant_iff_bode_plot]].
% It is clear that the Integral Force Feedback control strategy is very effective in damping the resonances of the plant.
%% Comparison of the damped and undamped plant %% Comparison of the damped and undamped plant
figure; figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
@ -221,5 +238,3 @@ ylim([-180, 0]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]); xlim([freqs(1), freqs(end)]);
save('mat/Kiff.mat', 'Kiff');

View File

@ -40,13 +40,11 @@ clear io; io_i = 1;
%% Inputs %% Inputs
% Control Input {3x1} [N] % Control Input {3x1} [N]
io(io_i) = linio([mdl, '/u'], 1, 'openinput'); io_i = io_i + 1; io(io_i) = linio([mdl, '/control_system'], 1, 'openinput'); io_i = io_i + 1;
% % Stepper Displacement {3x1} [m]
% io(io_i) = linio([mdl, '/d'], 1, 'openinput'); io_i = io_i + 1;
%% Outputs %% Outputs
% Strain Gauges {3x1} [m] % Strain Gauges {3x1} [m]
io(io_i) = linio([mdl, '/sg'], 1, 'openoutput'); io_i = io_i + 1; io(io_i) = linio([mdl, '/DCM'], 2, 'openoutput'); io_i = io_i + 1;
%% Extraction of the dynamics %% Extraction of the dynamics
G_sg = linearize(mdl, io); G_sg = linearize(mdl, io);
@ -57,12 +55,12 @@ G_sg.OutputName = {'sg_ur', 'sg_uh', 'sg_d'};
% #+RESULTS: % #+RESULTS:
% | -1.4113e-13 | 1.0339e-13 | 3.774e-14 | % | 4.4443e-09 | 1.0339e-13 | 3.774e-14 |
% | 1.0339e-13 | -1.4113e-13 | 3.774e-14 | % | 1.0339e-13 | 4.4443e-09 | 3.774e-14 |
% | 3.7792e-14 | 3.7792e-14 | -7.5585e-14 | % | 3.7792e-14 | 3.7792e-14 | 4.4444e-09 |
%% Bode plot for the plant %% Bode plot for the plant (strain gauge output)
figure; figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
@ -83,7 +81,8 @@ end
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
ylim([1e-14, 1e-7]);
ax2 = nexttile; ax2 = nexttile;
hold on; hold on;
@ -95,7 +94,133 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off; hold off;
yticks(-360:90:360); yticks(-360:90:360);
ylim([-180, 180]); ylim([-180, 0]);
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
% Relative Active Damping
Krad_g1 = eye(3)*s/(s^2/(2*pi*500)^2 + 2*s/(2*pi*500) + 1);
% As can be seen in Figure [[fig:relative_damping_root_locus]], very little damping can be added using relative damping strategy using strain gauges.
%% Root Locus for IFF
gains = logspace(3, 8, 200);
figure;
hold on;
plot(real(pole(G_sg)), imag(pole(G_sg)), 'x', 'color', colors(1,:), ...
'DisplayName', '$g = 0$');
plot(real(tzero(G_sg)), imag(tzero(G_sg)), 'o', 'color', colors(1,:), ...
'HandleVisibility', 'off');
for g = gains
clpoles = pole(feedback(G_sg, g*Krad_g1, -1));
plot(real(clpoles), imag(clpoles), '.', 'color', colors(1,:), ...
'HandleVisibility', 'off');
end
% Optimal gain
g = 2e5;
clpoles = pole(feedback(G_sg, g*Krad_g1, -1));
plot(real(clpoles), imag(clpoles), 'x', 'color', colors(2,:), ...
'DisplayName', sprintf('$g=%.0e$', g));
hold off;
xlim([-6, 0]); ylim([0, 2700]);
xlabel('Real Part'); ylabel('Imaginary Part');
legend('location', 'northwest');
% #+name: fig:relative_damping_root_locus
% #+caption: Root Locus for the relative damping control
% #+RESULTS:
% [[file:figs/relative_damping_root_locus.png]]
Krad = -g*Krad_g1;
% Damped Plant
% The controller is implemented on Simscape, and the damped plant is identified.
%% Input/Output definition
clear io; io_i = 1;
%% Inputs
% Control Input {3x1} [N]
io(io_i) = linio([mdl, '/control_system'], 1, 'input'); io_i = io_i + 1;
%% Outputs
% Force Sensor {3x1} [m]
io(io_i) = linio([mdl, '/DCM'], 1, 'openoutput'); io_i = io_i + 1;
%% DCM Kinematics
load('dcm_kinematics.mat');
%% Identification of the Open Loop plant
controller.type = 0; % Open Loop
G_ol = J_a_111*inv(J_s_111)*linearize(mdl, io);
G_ol.InputName = {'u_ur', 'u_uh', 'u_d'};
G_ol.OutputName = {'d_ur', 'd_uh', 'd_d'};
%% Identification of the damped plant with Relative Active Damping
controller.type = 2; % RAD
G_dp = J_a_111*inv(J_s_111)*linearize(mdl, io);
G_dp.InputName = {'u_ur', 'u_uh', 'u_d'};
G_dp.OutputName = {'d_ur', 'd_uh', 'd_d'};
%% Comparison of the damped and undamped plant
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(G_ol(1,1), freqs, 'Hz'))), ...
'DisplayName', 'd - OL');
plot(freqs, abs(squeeze(freqresp(G_ol(2,2), freqs, 'Hz'))), ...
'DisplayName', 'uh - OL');
plot(freqs, abs(squeeze(freqresp(G_ol(3,3), freqs, 'Hz'))), ...
'DisplayName', 'ur - OL');
set(gca,'ColorOrderIndex',1)
plot(freqs, abs(squeeze(freqresp(G_dp(1,1), freqs, 'Hz'))), '--', ...
'DisplayName', 'd - IFF');
plot(freqs, abs(squeeze(freqresp(G_dp(2,2), freqs, 'Hz'))), '--', ...
'DisplayName', 'uh - IFF');
plot(freqs, abs(squeeze(freqresp(G_dp(3,3), freqs, 'Hz'))), '--', ...
'DisplayName', 'ur - IFF');
for i = 1:2
for j = i+1:3
plot(freqs, abs(squeeze(freqresp(G_dp(i,j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ...
'HandleVisibility', 'off');
end
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
ylim([1e-12, 1e-6]);
ax2 = nexttile;
hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(G_ol(1,1), freqs, 'Hz'))));
plot(freqs, 180/pi*angle(squeeze(freqresp(G_ol(2,2), freqs, 'Hz'))));
plot(freqs, 180/pi*angle(squeeze(freqresp(G_ol(3,3), freqs, 'Hz'))));
set(gca,'ColorOrderIndex',1)
plot(freqs, 180/pi*angle(squeeze(freqresp(G_dp(1,1), freqs, 'Hz'))), '--');
plot(freqs, 180/pi*angle(squeeze(freqresp(G_dp(2,2), freqs, 'Hz'))), '--');
plot(freqs, 180/pi*angle(squeeze(freqresp(G_dp(3,3), freqs, 'Hz'))), '--');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
yticks(-360:90:360);
ylim([-180, 0]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]); xlim([freqs(1), freqs(end)]);

View File

@ -32,3 +32,308 @@ colors = colororder;
%% Frequency Vector %% Frequency Vector
freqs = logspace(1, 3, 1000); freqs = logspace(1, 3, 1000);
% System Identification
% Let's identify the damped plant.
%% Input/Output definition
clear io; io_i = 1;
%% Inputs
% Control Input {3x1} [N]
io(io_i) = linio([mdl, '/control_system'], 1, 'input'); io_i = io_i + 1;
%% Outputs
% Force Sensor {3x1} [m]
io(io_i) = linio([mdl, '/DCM'], 1, 'openoutput'); io_i = io_i + 1;
%% Load DCM Kinematics and IFF controller
load('dcm_kinematics.mat');
load('Kiff.mat');
%% Identification of the damped plant with IFF
controller.type = 1; % IFF
G_dp = J_a_111*inv(J_s_111)*linearize(mdl, io);
G_dp.InputName = {'u_ur', 'u_uh', 'u_d'};
G_dp.OutputName = {'d_ur', 'd_uh', 'd_d'};
%% Comparison of the damped and undamped plant
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(G_dp(1,1), freqs, 'Hz'))), '-', ...
'DisplayName', 'd - IFF');
plot(freqs, abs(squeeze(freqresp(G_dp(2,2), freqs, 'Hz'))), '-', ...
'DisplayName', 'uh - IFF');
plot(freqs, abs(squeeze(freqresp(G_dp(3,3), freqs, 'Hz'))), '-', ...
'DisplayName', 'ur - IFF');
for i = 1:2
for j = i+1:3
plot(freqs, abs(squeeze(freqresp(G_dp(i,j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ...
'HandleVisibility', 'off');
end
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
ylim([1e-12, 1e-8]);
ax2 = nexttile;
hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(G_dp(1,1), freqs, 'Hz'))), '-');
plot(freqs, 180/pi*angle(squeeze(freqresp(G_dp(2,2), freqs, 'Hz'))), '-');
plot(freqs, 180/pi*angle(squeeze(freqresp(G_dp(3,3), freqs, 'Hz'))), '-');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
yticks(-360:90:360);
ylim([-180, 0]);
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
% High Authority Controller
% Let's design a controller with a bandwidth of 100Hz.
% As the plant is well decoupled and well approximated by a constant at low frequency, the high authority controller can easily be designed with SISO loop shaping.
%% Controller design
wc = 2*pi*100; % Wanted crossover frequency [rad/s]
a = 2; % Lead parameter
Khac = diag(1./diag(abs(evalfr(G_dp, 1j*wc)))) * ... % Diagonal controller
wc/s * ... % Integrator
1/(sqrt(a))*(1 + s/(wc/sqrt(a)))/(1 + s/(wc*sqrt(a))) * ... % Lead
1/(s^2/(4*wc)^2 + 2*s/(4*wc) + 1); % Low pass filter
%% Save the HAC controller
save('mat/Khac_iff.mat', 'Khac');
%% Loop Gain
L_hac_lac = G_dp * Khac;
%% Bode Plot of the Loop Gain
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(L_hac_lac(1,1), freqs, 'Hz'))), '-', ...
'DisplayName', 'd');
plot(freqs, abs(squeeze(freqresp(L_hac_lac(2,2), freqs, 'Hz'))), '-', ...
'DisplayName', 'uh');
plot(freqs, abs(squeeze(freqresp(L_hac_lac(3,3), freqs, 'Hz'))), '-', ...
'DisplayName', 'ur');
for i = 1:2
for j = i+1:3
plot(freqs, abs(squeeze(freqresp(L_hac_lac(i,j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ...
'HandleVisibility', 'off');
end
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Loop Gain'); set(gca, 'XTickLabel',[]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
ylim([1e-2, 1e1]);
ax2 = nexttile;
hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(L_hac_lac(1,1), freqs, 'Hz'))), '-');
plot(freqs, 180/pi*angle(squeeze(freqresp(L_hac_lac(2,2), freqs, 'Hz'))), '-');
plot(freqs, 180/pi*angle(squeeze(freqresp(L_hac_lac(3,3), freqs, 'Hz'))), '-');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
yticks(-360:90:360);
ylim([-180, 0]);
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
% #+name: fig:hac_iff_loop_gain_bode_plot
% #+caption: Bode Plot of the Loop gain for the High Authority Controller
% #+RESULTS:
% [[file:figs/hac_iff_loop_gain_bode_plot.png]]
%% Compute the Eigenvalues of the loop gain
Ldet = zeros(3, length(freqs));
Lmimo = squeeze(freqresp(L_hac_lac, freqs, 'Hz'));
for i_f = 1:length(freqs)
Ldet(:, i_f) = eig(squeeze(Lmimo(:,:,i_f)));
end
% As shown in the Root Locus plot in Figure [[fig:loci_hac_iff_fast_jack]], the closed loop system should be stable.
%% Plot of the eigenvalues of L in the complex plane
figure;
hold on;
% Angle used to draw the circles
theta = linspace(0, 2*pi, 100);
% Unit circle
plot(cos(theta), sin(theta), '--');
% Circle for module margin
plot(-1 + min(min(abs(Ldet + 1)))*cos(theta), min(min(abs(Ldet + 1)))*sin(theta), '--');
for i = 1:3
plot(real(squeeze(Ldet(i,:))), imag(squeeze(Ldet(i,:))), 'k.');
plot(real(squeeze(Ldet(i,:))), -imag(squeeze(Ldet(i,:))), 'k.');
end
% Unstable Point
plot(-1, 0, 'kx', 'HandleVisibility', 'off');
hold off;
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'lin');
xlabel('Real'); ylabel('Imag');
axis square;
xlim([-3, 1]); ylim([-2, 2]);
% Performances
% In order to estimate the performances of the HAC-IFF control strategy, the transfer function from motion errors of the stepper motors to the motion error of the crystal is identified both in open loop and with the HAC-IFF strategy.
%% Input/Output definition
clear io; io_i = 1;
%% Inputs
% Jack Motion Erros {3x1} [m]
io(io_i) = linio([mdl, '/stepper_errors'], 1, 'input'); io_i = io_i + 1;
%% Outputs
% Interferometer Output {3x1} [m]
io(io_i) = linio([mdl, '/DCM'], 1, 'output'); io_i = io_i + 1;
%% Identification of the transmissibility of errors in open-loop
controller.type = 0; % Open Loop
T_ol = inv(J_s_111)*linearize(mdl, io)*J_a_111;
T_ol.InputName = {'e_dz', 'e_ry', 'e_rx'};
T_ol.OutputName = {'dx', 'ry', 'rx'};
%% Load DCM Kinematics and IFF controller
load('dcm_kinematics.mat');
load('Kiff.mat');
%% Identification of the transmissibility of errors with HAC-IFF
controller.type = 3; % IFF
T_hl = inv(J_s_111)*linearize(mdl, io)*J_a_111;
T_hl.InputName = {'e_dz', 'e_ry', 'e_rx'};
T_hl.OutputName = {'dx', 'ry', 'rx'};
% #+RESULTS:
% : 1
% And both transmissibilities are compared in Figure [[fig:stepper_transmissibility_comp_ol_hac_iff]].
%% Transmissibility of stepper errors
f = logspace(0, 3, 1000);
figure;
hold on;
plot(f, abs(squeeze(freqresp(T_ol(1,1), f, 'Hz'))), '-', ...
'DisplayName', '$d_z$ - OL');
plot(f, abs(squeeze(freqresp(T_ol(2,2), f, 'Hz'))), '-', ...
'DisplayName', '$r_y$ - OL');
plot(f, abs(squeeze(freqresp(T_ol(3,3), f, 'Hz'))), '-', ...
'DisplayName', '$r_x$ - OL');
set(gca,'ColorOrderIndex',1)
plot(f, abs(squeeze(freqresp(T_hl(1,1), f, 'Hz'))), '--', ...
'DisplayName', '$d_z$ - HAC-IFF');
plot(f, abs(squeeze(freqresp(T_hl(2,2), f, 'Hz'))), '--', ...
'DisplayName', '$r_y$ - HAC-IFF');
plot(f, abs(squeeze(freqresp(T_hl(3,3), f, 'Hz'))), '--', ...
'DisplayName', '$r_x$ - HAC-IFF');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Stepper transmissibility');
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
ylim([1e-2, 1e2]);
xlim([f(1), f(end)]);
% Close Loop noise budget
%% Load disturbances
load('asd_noises_disturbances.mat');
% Let's compute the amplitude spectral density of the jack motion errors due to the sensor noise, the actuator noise and disturbances.
%% Computation of ASD of contribution of inputs to the closed-loop motion
% Error due to disturbances
asd_d = abs(squeeze(freqresp(Wd*(1/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
% Error due to actuator noise
asd_u = abs(squeeze(freqresp(Wu*(G_dp(1,1)/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
% Error due to sensor noise
asd_n = abs(squeeze(freqresp(Wn*(G_dp(1,1)*Khac(1,1)/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
% The closed-loop ASD is then:
%% ASD of the closed-loop motion
asd_cl = sqrt(asd_d.^2 + asd_u.^2 + asd_n.^2);
% The obtained ASD are shown in Figure [[fig:close_loop_asd_noise_budget_hac_iff]].
%% Noise Budget (ASD)
f = logspace(-1, 3, 1000);
figure;
hold on;
plot(f, asd_n, 'DisplayName', '$n$');
plot(f, asd_u, 'DisplayName', '$d_u$');
plot(f, asd_d, 'DisplayName', '$d$');
plot(f, asd_cl, 'k--', 'DisplayName', '$y$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD [$m/\sqrt{Hz}$]');
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
xlim([f(1), f(end)]);
ylim([1e-16, 1e-8]);
% #+name: fig:close_loop_asd_noise_budget_hac_iff
% #+caption: Closed Loop noise budget
% #+RESULTS:
% [[file:figs/close_loop_asd_noise_budget_hac_iff.png]]
% Let's compare the open-loop and close-loop cases (Figure [[fig:cps_comp_ol_cl_hac_iff]]).
% Amplitude spectral density of the open loop motion errors [m/sqrt(Hz)]
asd_ol = abs(squeeze(freqresp(Wd, f, 'Hz')));
% CPS of open-loop motion [m^2]
cps_ol = flip(-cumtrapz(flip(f), flip(asd_ol.^2)));
% CPS of closed-loop motion [m^2]
cps_cl = flip(-cumtrapz(flip(f), flip(asd_cl.^2)));
%% Cumulative Power Spectrum - Motion error of fast jack
figure;
hold on;
plot(f, cps_ol, 'DisplayName', sprintf('OL, $\\epsilon_d = %.0f$ [nm,rms]', 1e9*sqrt(cps_ol(1))));
plot(f, cps_cl, 'DisplayName', sprintf('CL, $\\epsilon_d = %.0f$ [nm,rms]', 1e9*sqrt(cps_cl(1))));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('CPS [$m^2$]');
legend('location', 'southwest', 'FontSize', 8);
xlim([f(1), f(end)]);
% ylim([1e-16, 1e-8]);

View File

@ -63,7 +63,7 @@ G.OutputName = {'int_111_1', 'int_111_2', 'int_111_3'};
% Plant in the frame of the fastjacks % Plant in the frame of the fastjacks
load('mat/dcm_kinematics.mat'); load('dcm_kinematics.mat');

View File

@ -22,6 +22,15 @@ colors = colororder;
freqs = logspace(1, 3, 1000); freqs = logspace(1, 3, 1000);
% Bragg Angle % Bragg Angle
% There is a simple relation eqref:eq:bragg_angle_formula between:
% - $d_{\text{off}}$ is the wanted offset between the incident x-ray and the output x-ray
% - $\theta_b$ is the bragg angle
% - $d_z$ is the corresponding distance between the first and second crystals
% \begin{equation} \label{eq:bragg_angle_formula}
% d_z = \frac{d_{\text{off}}}{2 \cos \theta_b}
% \end{equation}
%% Tested bragg angles %% Tested bragg angles
bragg = linspace(5, 80, 1000); % Bragg angle [deg] bragg = linspace(5, 80, 1000); % Bragg angle [deg]
@ -30,6 +39,11 @@ d_off = 10.5e-3; % Wanted offset between x-rays [m]
%% Vertical Jack motion as a function of Bragg angle %% Vertical Jack motion as a function of Bragg angle
dz = d_off./(2*cos(bragg*pi/180)); dz = d_off./(2*cos(bragg*pi/180));
% This relation is shown in Figure [[fig:jack_motion_bragg_angle]].
%% Jack motion as a function of Bragg angle %% Jack motion as a function of Bragg angle
figure; figure;
plot(bragg, 1e3*dz) plot(bragg, 1e3*dz)
@ -42,6 +56,8 @@ xlabel('Bragg angle [deg]'); ylabel('Jack Motion [mm]');
% #+RESULTS: % #+RESULTS:
% [[file:figs/jack_motion_bragg_angle.png]] % [[file:figs/jack_motion_bragg_angle.png]]
% The required jack stroke is approximately 25mm.
%% Required Jack stroke %% Required Jack stroke
ans = 1e3*(dz(end) - dz(1)) ans = 1e3*(dz(end) - dz(1))

71
matlab/dcm_noise_budget.m Normal file
View File

@ -0,0 +1,71 @@
% Matlab Init :noexport:ignore:
%% dcm_noise_budget.m
% Basic uniaxial noise budgeting
%% Clear Workspace and Close figures
clear; close all; clc;
%% Intialize Laplace variable
s = zpk('s');
%% Path for functions, data and scripts
addpath('./mat/'); % Path for data
%% Simscape Model - Nano Hexapod
addpath('./STEPS/')
%% Colors for the figures
colors = colororder;
%% Frequency Vector
freqs = logspace(1, 3, 1000);
%% Frequency vector for noise budget [Hz]
f = logspace(-1, 3, 1000);
% Power Spectral Density of signals
% Interferometer noise:
Wn = 6e-11*(1 + s/2/pi/200)/(1 + s/2/pi/60); % m/sqrt(Hz)
% #+RESULTS:
% : Measurement noise: 0.79 [nm,rms]
% DAC noise (amplified by the PI voltage amplifier, and converted to newtons):
Wdac = tf(3e-8); % V/sqrt(Hz)
Wu = Wdac*22.5*10; % N/sqrt(Hz)
% #+RESULTS:
% : DAC noise: 0.95 [uV,rms]
% Disturbances:
Wd = 5e-7/(1 + s/2/pi); % m/sqrt(Hz)
%% Save ASD of noise and disturbances
save('mat/asd_noises_disturbances.mat', 'Wn', 'Wu', 'Wd');
% Open Loop disturbance and measurement noise
% The comparison of the amplitude spectral density of the measurement noise and of the jack parasitic motion is performed in Figure [[fig:open_loop_noise_budget_fast_jack]].
% It confirms that the sensor noise is low enough to measure the motion errors of the crystal.
%% Bode plot for the plant (strain gauge output)
figure;
hold on;
plot(f, abs(squeeze(freqresp(Wn, f, 'Hz'))), ...
'DisplayName', 'n');
plot(f, abs(squeeze(freqresp(Wd, f, 'Hz'))), ...
'DisplayName', 'd');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD [$m/\sqrt{Hz}$]');
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
xlim([f(1), f(end)]);

BIN
matlab/mat/Khac_iff.mat Normal file

Binary file not shown.

Binary file not shown.