1361 lines
83 KiB
HTML
1361 lines
83 KiB
HTML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
|
<head>
|
|
<!-- 2019-09-16 lun. 15:21 -->
|
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>Cercalo Test Bench</title>
|
|
<meta name="generator" content="Org mode" />
|
|
<meta name="author" content="Dehaeze Thomas" />
|
|
<style type="text/css">
|
|
<!--/*--><![CDATA[/*><!--*/
|
|
.title { text-align: center;
|
|
margin-bottom: .2em; }
|
|
.subtitle { text-align: center;
|
|
font-size: medium;
|
|
font-weight: bold;
|
|
margin-top:0; }
|
|
.todo { font-family: monospace; color: red; }
|
|
.done { font-family: monospace; color: green; }
|
|
.priority { font-family: monospace; color: orange; }
|
|
.tag { background-color: #eee; font-family: monospace;
|
|
padding: 2px; font-size: 80%; font-weight: normal; }
|
|
.timestamp { color: #bebebe; }
|
|
.timestamp-kwd { color: #5f9ea0; }
|
|
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
|
|
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
|
|
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
|
|
.underline { text-decoration: underline; }
|
|
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
|
|
p.verse { margin-left: 3%; }
|
|
pre {
|
|
border: 1px solid #ccc;
|
|
box-shadow: 3px 3px 3px #eee;
|
|
padding: 8pt;
|
|
font-family: monospace;
|
|
overflow: auto;
|
|
margin: 1.2em;
|
|
}
|
|
pre.src {
|
|
position: relative;
|
|
overflow: visible;
|
|
padding-top: 1.2em;
|
|
}
|
|
pre.src:before {
|
|
display: none;
|
|
position: absolute;
|
|
background-color: white;
|
|
top: -10px;
|
|
right: 10px;
|
|
padding: 3px;
|
|
border: 1px solid black;
|
|
}
|
|
pre.src:hover:before { display: inline;}
|
|
/* Languages per Org manual */
|
|
pre.src-asymptote:before { content: 'Asymptote'; }
|
|
pre.src-awk:before { content: 'Awk'; }
|
|
pre.src-C:before { content: 'C'; }
|
|
/* pre.src-C++ doesn't work in CSS */
|
|
pre.src-clojure:before { content: 'Clojure'; }
|
|
pre.src-css:before { content: 'CSS'; }
|
|
pre.src-D:before { content: 'D'; }
|
|
pre.src-ditaa:before { content: 'ditaa'; }
|
|
pre.src-dot:before { content: 'Graphviz'; }
|
|
pre.src-calc:before { content: 'Emacs Calc'; }
|
|
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
|
|
pre.src-fortran:before { content: 'Fortran'; }
|
|
pre.src-gnuplot:before { content: 'gnuplot'; }
|
|
pre.src-haskell:before { content: 'Haskell'; }
|
|
pre.src-hledger:before { content: 'hledger'; }
|
|
pre.src-java:before { content: 'Java'; }
|
|
pre.src-js:before { content: 'Javascript'; }
|
|
pre.src-latex:before { content: 'LaTeX'; }
|
|
pre.src-ledger:before { content: 'Ledger'; }
|
|
pre.src-lisp:before { content: 'Lisp'; }
|
|
pre.src-lilypond:before { content: 'Lilypond'; }
|
|
pre.src-lua:before { content: 'Lua'; }
|
|
pre.src-matlab:before { content: 'MATLAB'; }
|
|
pre.src-mscgen:before { content: 'Mscgen'; }
|
|
pre.src-ocaml:before { content: 'Objective Caml'; }
|
|
pre.src-octave:before { content: 'Octave'; }
|
|
pre.src-org:before { content: 'Org mode'; }
|
|
pre.src-oz:before { content: 'OZ'; }
|
|
pre.src-plantuml:before { content: 'Plantuml'; }
|
|
pre.src-processing:before { content: 'Processing.js'; }
|
|
pre.src-python:before { content: 'Python'; }
|
|
pre.src-R:before { content: 'R'; }
|
|
pre.src-ruby:before { content: 'Ruby'; }
|
|
pre.src-sass:before { content: 'Sass'; }
|
|
pre.src-scheme:before { content: 'Scheme'; }
|
|
pre.src-screen:before { content: 'Gnu Screen'; }
|
|
pre.src-sed:before { content: 'Sed'; }
|
|
pre.src-sh:before { content: 'shell'; }
|
|
pre.src-sql:before { content: 'SQL'; }
|
|
pre.src-sqlite:before { content: 'SQLite'; }
|
|
/* additional languages in org.el's org-babel-load-languages alist */
|
|
pre.src-forth:before { content: 'Forth'; }
|
|
pre.src-io:before { content: 'IO'; }
|
|
pre.src-J:before { content: 'J'; }
|
|
pre.src-makefile:before { content: 'Makefile'; }
|
|
pre.src-maxima:before { content: 'Maxima'; }
|
|
pre.src-perl:before { content: 'Perl'; }
|
|
pre.src-picolisp:before { content: 'Pico Lisp'; }
|
|
pre.src-scala:before { content: 'Scala'; }
|
|
pre.src-shell:before { content: 'Shell Script'; }
|
|
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
|
|
/* additional language identifiers per "defun org-babel-execute"
|
|
in ob-*.el */
|
|
pre.src-cpp:before { content: 'C++'; }
|
|
pre.src-abc:before { content: 'ABC'; }
|
|
pre.src-coq:before { content: 'Coq'; }
|
|
pre.src-groovy:before { content: 'Groovy'; }
|
|
/* additional language identifiers from org-babel-shell-names in
|
|
ob-shell.el: ob-shell is the only babel language using a lambda to put
|
|
the execution function name together. */
|
|
pre.src-bash:before { content: 'bash'; }
|
|
pre.src-csh:before { content: 'csh'; }
|
|
pre.src-ash:before { content: 'ash'; }
|
|
pre.src-dash:before { content: 'dash'; }
|
|
pre.src-ksh:before { content: 'ksh'; }
|
|
pre.src-mksh:before { content: 'mksh'; }
|
|
pre.src-posh:before { content: 'posh'; }
|
|
/* Additional Emacs modes also supported by the LaTeX listings package */
|
|
pre.src-ada:before { content: 'Ada'; }
|
|
pre.src-asm:before { content: 'Assembler'; }
|
|
pre.src-caml:before { content: 'Caml'; }
|
|
pre.src-delphi:before { content: 'Delphi'; }
|
|
pre.src-html:before { content: 'HTML'; }
|
|
pre.src-idl:before { content: 'IDL'; }
|
|
pre.src-mercury:before { content: 'Mercury'; }
|
|
pre.src-metapost:before { content: 'MetaPost'; }
|
|
pre.src-modula-2:before { content: 'Modula-2'; }
|
|
pre.src-pascal:before { content: 'Pascal'; }
|
|
pre.src-ps:before { content: 'PostScript'; }
|
|
pre.src-prolog:before { content: 'Prolog'; }
|
|
pre.src-simula:before { content: 'Simula'; }
|
|
pre.src-tcl:before { content: 'tcl'; }
|
|
pre.src-tex:before { content: 'TeX'; }
|
|
pre.src-plain-tex:before { content: 'Plain TeX'; }
|
|
pre.src-verilog:before { content: 'Verilog'; }
|
|
pre.src-vhdl:before { content: 'VHDL'; }
|
|
pre.src-xml:before { content: 'XML'; }
|
|
pre.src-nxml:before { content: 'XML'; }
|
|
/* add a generic configuration mode; LaTeX export needs an additional
|
|
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
|
|
pre.src-conf:before { content: 'Configuration File'; }
|
|
|
|
table { border-collapse:collapse; }
|
|
caption.t-above { caption-side: top; }
|
|
caption.t-bottom { caption-side: bottom; }
|
|
td, th { vertical-align:top; }
|
|
th.org-right { text-align: center; }
|
|
th.org-left { text-align: center; }
|
|
th.org-center { text-align: center; }
|
|
td.org-right { text-align: right; }
|
|
td.org-left { text-align: left; }
|
|
td.org-center { text-align: center; }
|
|
dt { font-weight: bold; }
|
|
.footpara { display: inline; }
|
|
.footdef { margin-bottom: 1em; }
|
|
.figure { padding: 1em; }
|
|
.figure p { text-align: center; }
|
|
.equation-container {
|
|
display: table;
|
|
text-align: center;
|
|
width: 100%;
|
|
}
|
|
.equation {
|
|
vertical-align: middle;
|
|
}
|
|
.equation-label {
|
|
display: table-cell;
|
|
text-align: right;
|
|
vertical-align: middle;
|
|
}
|
|
.inlinetask {
|
|
padding: 10px;
|
|
border: 2px solid gray;
|
|
margin: 10px;
|
|
background: #ffffcc;
|
|
}
|
|
#org-div-home-and-up
|
|
{ text-align: right; font-size: 70%; white-space: nowrap; }
|
|
textarea { overflow-x: auto; }
|
|
.linenr { font-size: smaller }
|
|
.code-highlighted { background-color: #ffff00; }
|
|
.org-info-js_info-navigation { border-style: none; }
|
|
#org-info-js_console-label
|
|
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
|
|
.org-info-js_search-highlight
|
|
{ background-color: #ffff00; color: #000000; font-weight: bold; }
|
|
.org-svg { width: 90%; }
|
|
/*]]>*/-->
|
|
</style>
|
|
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
|
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
|
<link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
|
|
<script type="text/javascript" src="./js/jquery.min.js"></script>
|
|
<script type="text/javascript" src="./js/bootstrap.min.js"></script>
|
|
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
|
|
<script type="text/javascript" src="./js/readtheorg.js"></script>
|
|
<script type="text/javascript">
|
|
/*
|
|
@licstart The following is the entire license notice for the
|
|
JavaScript code in this tag.
|
|
|
|
Copyright (C) 2012-2019 Free Software Foundation, Inc.
|
|
|
|
The JavaScript code in this tag is free software: you can
|
|
redistribute it and/or modify it under the terms of the GNU
|
|
General Public License (GNU GPL) as published by the Free Software
|
|
Foundation, either version 3 of the License, or (at your option)
|
|
any later version. The code is distributed WITHOUT ANY WARRANTY;
|
|
without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
|
|
|
|
As additional permission under GNU GPL version 3 section 7, you
|
|
may distribute non-source (e.g., minimized or compacted) forms of
|
|
that code without the copy of the GNU GPL normally required by
|
|
section 4, provided you include this license notice and a URL
|
|
through which recipients can access the Corresponding Source.
|
|
|
|
|
|
@licend The above is the entire license notice
|
|
for the JavaScript code in this tag.
|
|
*/
|
|
<!--/*--><![CDATA[/*><!--*/
|
|
function CodeHighlightOn(elem, id)
|
|
{
|
|
var target = document.getElementById(id);
|
|
if(null != target) {
|
|
elem.cacheClassElem = elem.className;
|
|
elem.cacheClassTarget = target.className;
|
|
target.className = "code-highlighted";
|
|
elem.className = "code-highlighted";
|
|
}
|
|
}
|
|
function CodeHighlightOff(elem, id)
|
|
{
|
|
var target = document.getElementById(id);
|
|
if(elem.cacheClassElem)
|
|
elem.className = elem.cacheClassElem;
|
|
if(elem.cacheClassTarget)
|
|
target.className = elem.cacheClassTarget;
|
|
}
|
|
/*]]>*///-->
|
|
</script>
|
|
<script type="text/x-mathjax-config">
|
|
MathJax.Hub.Config({
|
|
displayAlign: "center",
|
|
displayIndent: "0em",
|
|
|
|
"HTML-CSS": { scale: 100,
|
|
linebreaks: { automatic: "false" },
|
|
webFont: "TeX"
|
|
},
|
|
SVG: {scale: 100,
|
|
linebreaks: { automatic: "false" },
|
|
font: "TeX"},
|
|
NativeMML: {scale: 100},
|
|
TeX: { equationNumbers: {autoNumber: "AMS"},
|
|
MultLineWidth: "85%",
|
|
TagSide: "right",
|
|
TagIndent: ".8em"
|
|
}
|
|
});
|
|
</script>
|
|
<script type="text/javascript"
|
|
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML"></script>
|
|
</head>
|
|
<body>
|
|
<div id="content">
|
|
<h1 class="title">Cercalo Test Bench</h1>
|
|
<div id="table-of-contents">
|
|
<h2>Table of Contents</h2>
|
|
<div id="text-table-of-contents">
|
|
<ul>
|
|
<li><a href="#org56fbace">1. Introduction</a>
|
|
<ul>
|
|
<li><a href="#orgc71c3a8">1.1. Block Diagram</a></li>
|
|
<li><a href="#org6dd135b">1.2. Amplifier for the Cercalo</a></li>
|
|
<li><a href="#org3f4c55a">1.3. Cercalo</a></li>
|
|
<li><a href="#org8cf1cba">1.4. Optical Setup</a></li>
|
|
<li><a href="#org6d8a72e">1.5. Newport</a></li>
|
|
<li><a href="#orgcf9e532">1.6. 4 quadrant Diode</a></li>
|
|
<li><a href="#orgbfa25c0">1.7. ADC/DAC</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org549f783">2. Identification</a>
|
|
<ul>
|
|
<li><a href="#orga174838">2.1. Excitation Data</a></li>
|
|
<li><a href="#org4707d35">2.2. Signals</a></li>
|
|
<li><a href="#org96d4dae">2.3. Huddle Test</a></li>
|
|
<li><a href="#org5b29539">2.4. Input / Output data</a></li>
|
|
<li><a href="#org0556947">2.5. Estimation of the Frequency Response Function Matrix</a></li>
|
|
<li><a href="#org6c025b6">2.6. Coherence</a></li>
|
|
<li><a href="#org74eeb16">2.7. Extraction of a transfer function matrix</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#orge157b63">3. Calibration of the 4 Quadrant Diode</a></li>
|
|
<li><a href="#orgc276bb8">4. Plant Scaling</a></li>
|
|
<li><a href="#orgffff224">5. Plant Analysis</a>
|
|
<ul>
|
|
<li><a href="#orge9e5454">5.1. Load Plant</a></li>
|
|
<li><a href="#org425e4e2">5.2. RGA-Number</a></li>
|
|
<li><a href="#orge80bcc0">5.3. Rotation Matrix</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#orgfd824b0">6. Control Objective</a></li>
|
|
<li><a href="#orgc7afa66">7. Control Design</a></li>
|
|
<li><a href="#org5791267">8. Measurement of the non-repeatability</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org56fbace" class="outline-2">
|
|
<h2 id="org56fbace"><span class="section-number-2">1</span> Introduction</h2>
|
|
<div class="outline-text-2" id="text-1">
|
|
</div>
|
|
<div id="outline-container-orgc71c3a8" class="outline-3">
|
|
<h3 id="orgc71c3a8"><span class="section-number-3">1.1</span> Block Diagram</h3>
|
|
<div class="outline-text-3" id="text-1-1">
|
|
<p>
|
|
The block diagram of the setup to be controlled is shown in Fig. <a href="#orgc07f042">1</a>.
|
|
</p>
|
|
|
|
|
|
<div id="orgc07f042" class="figure">
|
|
<p><img src="figs/cercalo_diagram_simplify.png" alt="cercalo_diagram_simplify.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 1: </span>Block Diagram of the Experimental Setup</p>
|
|
</div>
|
|
|
|
<p>
|
|
The transfer functions in the system are:
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li><b>Current Amplifier</b>: from the voltage set by the DAC to the voltage across the Cercalo inductors
|
|
\[ G_i = \begin{bmatrix} G_{i,h} & 0 \\ 0 & G_{i,v} \end{bmatrix} \]</li>
|
|
<li><b>Voltage Amplifier</b>: from the voltage across the Cercalo inductors to the measured voltage
|
|
\[ G_a = \begin{bmatrix} G_{a,h} & 0 \\ 0 & G_{a,v} \end{bmatrix} \]</li>
|
|
<li><b>Cercalo</b>: Transfer function from the Voltage across the cercalo inductors to the 4 quadrant measurement
|
|
\[ G_c = \begin{bmatrix} G_{\frac{V_{p,h}}{\tilde{U}_{c,h}}} & G_{\frac{V_{p,h}}{\tilde{U}_{c,v}}} \\ G_{\frac{V_{p,v}}{\tilde{U}_{c,h}}} & G_{\frac{V_{p,v}}{\tilde{U}_{c,v}}} \end{bmatrix} \]</li>
|
|
<li><b>Newport</b> Transfer function from the command signal of the Newport to the 4 quadrant measurement
|
|
\[ G_n = \begin{bmatrix} G_{\frac{V_{p,h}}{U_{n,h}}} & G_{\frac{V_{p,h}}{U_{n,v}}} \\ G_{\frac{V_{p,v}}{U_{n,h}}} & G_{\frac{V_{n,v}}{U_{n,v}}} \end{bmatrix} \]</li>
|
|
</ul>
|
|
|
|
<p>
|
|
The block diagram with each transfer function is shown in Fig. <a href="#orgc0fd79e">2</a>.
|
|
</p>
|
|
|
|
|
|
<div id="orgc0fd79e" class="figure">
|
|
<p><img src="figs/cercalo_diagram.png" alt="cercalo_diagram.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 2: </span>Block Diagram of the Experimental Setup with detailed dynamics</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org6dd135b" class="outline-3">
|
|
<h3 id="org6dd135b"><span class="section-number-3">1.2</span> Amplifier for the Cercalo</h3>
|
|
<div class="outline-text-3" id="text-1-2">
|
|
|
|
<div class="figure">
|
|
<p><img src="figs/cercalo_amplifier.png" alt="cercalo_amplifier.png" />
|
|
</p>
|
|
</div>
|
|
|
|
<p>
|
|
The value of the resistor in series with the buffer have been measured for both axis.
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>\(R_h = 41 \Omega\)</li>
|
|
<li>\(L_{c,h} = 0.1 mH\)</li>
|
|
<li>\(R_{c,h} = 9.3 \Omega\)</li>
|
|
<li>\(R_v = 41 \Omega\)</li>
|
|
<li>\(L_{c,v} = 0.1 mH\)</li>
|
|
<li>\(R_{c,v} = 8.3 \Omega\)</li>
|
|
</ul>
|
|
|
|
<p>
|
|
We want to find the transfer function from \(U_c\) to \(V_L\) and from \(U_c\) to \(i_c\).
|
|
</p>
|
|
|
|
<p>
|
|
We have that:
|
|
</p>
|
|
\begin{align*}
|
|
V_C &= R_c i + L_c s i \\
|
|
U_c &= (R + R_c) i + L_c s i
|
|
\end{align*}
|
|
|
|
<p>
|
|
Thus:
|
|
</p>
|
|
\begin{align}
|
|
\frac{i_c}{U_c} &= \frac{1}{(R + R_c) + L_c s} \\
|
|
&= \frac{G_0}{1 + s/\omega_0}
|
|
\end{align}
|
|
<p>
|
|
with
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>\(G_{0,i} = \frac{1}{R + R_c}\)</li>
|
|
<li>\(\omega_0 = \frac{R + R_c}{L_c}\)</li>
|
|
</ul>
|
|
|
|
<p>
|
|
And
|
|
</p>
|
|
\begin{align}
|
|
\frac{V_c}{U_c} &= \frac{R_c + L_c s}{(R + R_c) + L_c s} \\
|
|
&= \frac{\frac{R_c}{R + R_c} + \frac{L_c}{R + R_c} s}{1 + \frac{L_c}{R + R_c} s} \\
|
|
&= \frac{G_0 + s/\omega_0}{1 + s/\omega_0} \\
|
|
\end{align}
|
|
<p>
|
|
with
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>\(G_0 = \frac{R_c}{R + R_c}\)</li>
|
|
<li>\(\omega_0 = \frac{R + R_c}{L_c}\)</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Let's verify that the electrical circuit behaves as a constant current amplifier in the frequency band of interest.
|
|
</p>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">Rh = <span class="org-highlight-numbers-number">41</span>; <span class="org-comment">% [Ohm]</span>
|
|
Lch = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">3</span>; <span class="org-comment">% [H]</span>
|
|
Rch = <span class="org-highlight-numbers-number">9</span>.<span class="org-highlight-numbers-number">3</span>; <span class="org-comment">% [Ohm]</span>
|
|
|
|
Rv = <span class="org-highlight-numbers-number">41</span>; <span class="org-comment">% [Ohm]</span>
|
|
Lcv = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">3</span>; <span class="org-comment">% [H]</span>
|
|
Rcv = <span class="org-highlight-numbers-number">8</span>.<span class="org-highlight-numbers-number">3</span>; <span class="org-comment">% [Ohm]</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">Gih = <span class="org-highlight-numbers-number">1</span><span class="org-type">/</span><span class="org-rainbow-delimiters-depth-1">(</span>Rh <span class="org-type">+</span> Rch <span class="org-type">+</span> Lch <span class="org-type">*</span> s<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
Gvh = <span class="org-rainbow-delimiters-depth-1">(</span>Rch <span class="org-type">+</span> Lch <span class="org-type">*</span> s<span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">/</span><span class="org-rainbow-delimiters-depth-1">(</span>Rh <span class="org-type">+</span> Rch <span class="org-type">+</span> Lch <span class="org-type">*</span> s<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
Giv = <span class="org-highlight-numbers-number">1</span><span class="org-type">/</span><span class="org-rainbow-delimiters-depth-1">(</span>Rv <span class="org-type">+</span> Rcv <span class="org-type">+</span> Lcv <span class="org-type">*</span> s<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
Gvv = <span class="org-rainbow-delimiters-depth-1">(</span>Rcv <span class="org-type">+</span> Lcv <span class="org-type">*</span> s<span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">/</span><span class="org-rainbow-delimiters-depth-1">(</span>Rv <span class="org-type">+</span> Rcv <span class="org-type">+</span> Lcv <span class="org-type">*</span> s<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">Gih0 = freqresp<span class="org-rainbow-delimiters-depth-1">(</span>Gih, <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
Gvh0 = freqresp<span class="org-rainbow-delimiters-depth-1">(</span>Gvh, <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
Giv0 = freqresp<span class="org-rainbow-delimiters-depth-1">(</span>Giv, <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
Gvv0 = freqresp<span class="org-rainbow-delimiters-depth-1">(</span>Gvv, <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div id="orgfec4858" class="figure">
|
|
<p><img src="figs/current_amplifier_tf.png" alt="current_amplifier_tf.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 4: </span>Transfer function for the current amplifier (<a href="./figs/current_amplifier_tf.png">png</a>, <a href="./figs/current_amplifier_tf.pdf">pdf</a>)</p>
|
|
</div>
|
|
|
|
|
|
<div class="important">
|
|
<p>
|
|
The current amplifier has a constant gain over all the frequency band of interest.
|
|
\[ G_i(s) = \begin{bmatrix} 0.02 & 0 \\ 0 & 0.02 \end{bmatrix}\quad \left[\frac{A}{V}\right] \]
|
|
\[ G_a(s) = \begin{bmatrix} 0.185 & 0 \\ 0 & 0.168 \end{bmatrix} \left[\frac{V}{V}\right] \]
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org3f4c55a" class="outline-3">
|
|
<h3 id="org3f4c55a"><span class="section-number-3">1.3</span> Cercalo</h3>
|
|
<div class="outline-text-3" id="text-1-3">
|
|
<p>
|
|
From the Cercalo documentation, we have the parameters shown on table <a href="#orgfb4a003">1</a>.
|
|
</p>
|
|
|
|
<table id="orgfb4a003" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
<caption class="t-above"><span class="table-number">Table 1:</span> Cercalo Parameters</caption>
|
|
|
|
<colgroup>
|
|
<col class="org-left" />
|
|
|
|
<col class="org-right" />
|
|
|
|
<col class="org-right" />
|
|
|
|
<col class="org-right" />
|
|
|
|
<col class="org-right" />
|
|
|
|
<col class="org-right" />
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="org-left"> </th>
|
|
<th scope="col" class="org-right">Maximum Stroke [deg]</th>
|
|
<th scope="col" class="org-right">Resonance Frequency [Hz]</th>
|
|
<th scope="col" class="org-right">DC Gain [mA/deg]</th>
|
|
<th scope="col" class="org-right">Gain at resonance [deg/V]</th>
|
|
<th scope="col" class="org-right">RC Resistance [Ohm]</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="org-left">AX1 (Horizontal)</td>
|
|
<td class="org-right">5</td>
|
|
<td class="org-right">411.13</td>
|
|
<td class="org-right">28.4</td>
|
|
<td class="org-right">382.9</td>
|
|
<td class="org-right">9.41</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">AX2 (Vertical)</td>
|
|
<td class="org-right">5</td>
|
|
<td class="org-right">252.5</td>
|
|
<td class="org-right">35.2</td>
|
|
<td class="org-right">350.4</td>
|
|
<td class="org-right"> </td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>
|
|
The Inductance and DC resistance of the two axis of the Cercalo have been measured:
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>\(L_{c,h} = 0.1\ \text{mH}\)</li>
|
|
<li>\(L_{c,v} = 0.1\ \text{mH}\)</li>
|
|
<li>\(R_{c,h} = 9.3\ \Omega\)</li>
|
|
<li>\(R_{c,v} = 8.3\ \Omega\)</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Let's first consider the <b>horizontal direction</b> and we try to model the Cercalo by a spring/mass/damper system (Fig. <a href="#orgd829094">5</a>).
|
|
</p>
|
|
|
|
|
|
<div id="orgd829094" class="figure">
|
|
<p><img src="figs/mech_cercalo.png" alt="mech_cercalo.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 5: </span>1 degree-of-freedom model of the Cercalo</p>
|
|
</div>
|
|
|
|
|
|
<p>
|
|
The equation of motion is:
|
|
</p>
|
|
\begin{align*}
|
|
\frac{x}{F} &= \frac{1}{k + c s + m s^2} \\
|
|
&= \frac{G_0}{1 + 2 \xi \frac{s}{\omega_0} + \frac{s^2}{\omega_0^2}}
|
|
\end{align*}
|
|
<p>
|
|
with:
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>\(G_0 = 1/k\) is the gain at DC in rad/N</li>
|
|
<li>\(\xi = \frac{c}{2 \sqrt{km}}\) is the damping ratio of the system</li>
|
|
<li>\(\omega_0 = \sqrt{\frac{k}{m}}\) is the resonance frequency in rad</li>
|
|
</ul>
|
|
|
|
<p>
|
|
The force \(F\) applied to the mass is proportional to the current \(I\) flowing through the voice coils:
|
|
\[ \frac{F}{I} = \alpha \]
|
|
with \(\alpha\) is in \(N/A\) and is to be determined.
|
|
</p>
|
|
|
|
<p>
|
|
The current \(I\) is also proportional to the voltage at the output of the buffer:
|
|
</p>
|
|
\begin{align*}
|
|
\frac{I_c}{U_c} &= \frac{1}{(R + R_c) + L_c s} \\
|
|
&\approx 0.02 \left[ \frac{A}{V} \right]
|
|
\end{align*}
|
|
|
|
<p>
|
|
Let's try to determine the equivalent mass and spring values.
|
|
From table <a href="#orgfb4a003">1</a>, for the horizontal direction:
|
|
\[ \left| \frac{x}{I} \right|(0) = \left| \alpha \frac{x}{F} \right|(0) = 28.4\ \frac{mA}{deg} = 1.63\ \frac{A}{rad} \]
|
|
</p>
|
|
|
|
<p>
|
|
So:
|
|
\[ \alpha \frac{1}{k} = 1.63 \Longleftrightarrow k = \frac{\alpha}{1.63} \left[\frac{N}{rad}\right] \]
|
|
</p>
|
|
|
|
<p>
|
|
We also know the resonance frequency:
|
|
\[ \omega_0 = 411.1\ \text{Hz} = 2583\ \frac{rad}{s} \]
|
|
</p>
|
|
|
|
<p>
|
|
And the gain at resonance:
|
|
</p>
|
|
\begin{align*}
|
|
\left| \frac{x}{U_c} \right|(j\omega_0) &= \left| 0.02 \frac{x}{I_c} \right| (j\omega_0) \\
|
|
&= \left| 0.02 \alpha \frac{x}{F} \right| (j\omega_0) \\
|
|
&= 0.02 \alpha \frac{1/k}{2\xi} \\
|
|
&= 282.9\ \left[\frac{deg}{V}\right] \\
|
|
&= 4.938\ \left[\frac{rad}{V}\right]
|
|
\end{align*}
|
|
|
|
<p>
|
|
Thus:
|
|
</p>
|
|
\begin{align*}
|
|
& \frac{\alpha}{2 \xi k} = 245 \\
|
|
\Leftrightarrow & \frac{1.63}{2 \xi} = 245 \\
|
|
\Leftrightarrow & \xi = 0.0033 \\
|
|
\Leftrightarrow & \xi = 0.33 \%
|
|
\end{align*}
|
|
|
|
<div class="important">
|
|
\begin{align*}
|
|
G_0 &= \frac{1.63}{\alpha}\ \frac{rad}{N} \\
|
|
\xi &= 0.0033 \\
|
|
\omega_0 &= 2583\ \frac{rad}{s}
|
|
\end{align*}
|
|
<p>
|
|
and in terms of the physical properties:
|
|
</p>
|
|
\begin{align*}
|
|
k &= \frac{\alpha}{1.63}\ \frac{N}{rad} \\
|
|
\xi &= 0.0033 \\
|
|
m &= \frac{\alpha}{1.1 \cdot 10^7}\ \frac{kg}{m^2}
|
|
\end{align*}
|
|
|
|
<p>
|
|
Thus, we have to determine \(\alpha\).
|
|
This can be done experimentally by determining the gain at DC or at resonance of the system.
|
|
For that, we need to know the angle of the mirror, thus we need to <b>calibrate</b> the photo-diodes.
|
|
This will be done using the Newport.
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org8cf1cba" class="outline-3">
|
|
<h3 id="org8cf1cba"><span class="section-number-3">1.4</span> Optical Setup</h3>
|
|
</div>
|
|
<div id="outline-container-org6d8a72e" class="outline-3">
|
|
<h3 id="org6d8a72e"><span class="section-number-3">1.5</span> Newport</h3>
|
|
<div class="outline-text-3" id="text-1-5">
|
|
<p>
|
|
Parameters of the Newport are shown in Fig. <a href="#org893d45e">6</a>.
|
|
</p>
|
|
|
|
<p>
|
|
It's dynamics for small angle excitation is shown in Fig. <a href="#org4e41b71">7</a>.
|
|
</p>
|
|
|
|
<p>
|
|
And we have:
|
|
</p>
|
|
\begin{align*}
|
|
G_{n, h}(0) &= 2.62 \cdot 10^{-3}\ \frac{rad}{V} \\
|
|
G_{n, v}(0) &= 2.62 \cdot 10^{-3}\ \frac{rad}{V}
|
|
\end{align*}
|
|
|
|
|
|
<div id="org893d45e" class="figure">
|
|
<p><img src="figs/newport_doc.png" alt="newport_doc.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 6: </span>Documentation of the Newport</p>
|
|
</div>
|
|
|
|
|
|
<div id="org4e41b71" class="figure">
|
|
<p><img src="figs/newport_gain.png" alt="newport_gain.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 7: </span>Transfer function of the Newport</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgcf9e532" class="outline-3">
|
|
<h3 id="orgcf9e532"><span class="section-number-3">1.6</span> 4 quadrant Diode</h3>
|
|
<div class="outline-text-3" id="text-1-6">
|
|
<p>
|
|
The front view of the 4 quadrant photo-diode is shown in Fig. <a href="#org279009d">8</a>.
|
|
</p>
|
|
|
|
|
|
<div id="org279009d" class="figure">
|
|
<p><img src="figs/4qd_naming.png" alt="4qd_naming.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 8: </span>Front view of the 4QD</p>
|
|
</div>
|
|
|
|
<p>
|
|
Each of the photo-diode is amplified using a 4-channel amplifier as shown in Fig. <a href="#org7f931ef">9</a>.
|
|
</p>
|
|
|
|
<div id="org7f931ef" class="figure">
|
|
<p><img src="figs/4qd_amplifier.png" alt="4qd_amplifier.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 9: </span>Wiring of the amplifier. The amplifier is located on the bottom right of the board</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgbfa25c0" class="outline-3">
|
|
<h3 id="orgbfa25c0"><span class="section-number-3">1.7</span> ADC/DAC</h3>
|
|
<div class="outline-text-3" id="text-1-7">
|
|
<p>
|
|
Let's compute the theoretical noise of the ADC/DAC.
|
|
</p>
|
|
|
|
\begin{align*}
|
|
\Delta V &= 20 V \\
|
|
n &= 16bits \\
|
|
q &= \Delta V/2^n = 305 \mu V \\
|
|
f_N &= 10kHz \\
|
|
\Gamma_n &= \frac{q^2}{12 f_N} = 7.76 \cdot 10^{-13} \frac{V^2}{Hz}
|
|
\end{align*}
|
|
<p>
|
|
with \(\Delta V\) the total range of the ADC, \(n\) its number of bits, \(q\) the quantization, \(f_N\) the sampling frequency and \(\Gamma_n\) its theoretical Power Spectral Density.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org549f783" class="outline-2">
|
|
<h2 id="org549f783"><span class="section-number-2">2</span> Identification</h2>
|
|
<div class="outline-text-2" id="text-2">
|
|
<p>
|
|
<a id="orgaf96e37"></a>
|
|
</p>
|
|
<div class="note">
|
|
<p>
|
|
All the files (data and Matlab scripts) are accessible <a href="data/plant_identification.zip">here</a>.
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orga174838" class="outline-3">
|
|
<h3 id="orga174838"><span class="section-number-3">2.1</span> Excitation Data</h3>
|
|
<div class="outline-text-3" id="text-2-1">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">fs = <span class="org-highlight-numbers-number">1e4</span>;
|
|
Ts = <span class="org-highlight-numbers-number">1</span><span class="org-type">/</span>fs;
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We generate white noise with the "random number" simulink block, and we filter that noise.
|
|
</p>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">Gi = <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">/</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">+</span>s<span class="org-type">/</span><span class="org-highlight-numbers-number">2</span><span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span><span class="org-highlight-numbers-number">100</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">c2d<span class="org-rainbow-delimiters-depth-1">(</span>Gi, Ts, <span class="org-string">'tustin'</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<pre class="example">
|
|
c2d(Gi, Ts, 'tustin')
|
|
|
|
ans =
|
|
|
|
0.030459 (z+1)
|
|
--------------
|
|
(z-0.9391)
|
|
|
|
Sample time: 0.0001 seconds
|
|
Discrete-time zero/pole/gain model.
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org4707d35" class="outline-3">
|
|
<h3 id="org4707d35"><span class="section-number-3">2.2</span> Signals</h3>
|
|
<div class="outline-text-3" id="text-2-2">
|
|
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
|
|
|
|
<colgroup>
|
|
<col class="org-left" />
|
|
|
|
<col class="org-left" />
|
|
|
|
<col class="org-left" />
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="org-left">Signal</th>
|
|
<th scope="col" class="org-left">Name</th>
|
|
<th scope="col" class="org-left">Unit</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="org-left">Voltage Sent to Cercalo - Horizontal</td>
|
|
<td class="org-left"><code>Uch</code></td>
|
|
<td class="org-left">[V]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Voltage Sent to Cercalo - Vertical</td>
|
|
<td class="org-left"><code>Ucv</code></td>
|
|
<td class="org-left">[V]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Voltage Sent to Newport - Horizontal</td>
|
|
<td class="org-left"><code>Unh</code></td>
|
|
<td class="org-left">[V]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Voltage Sent to Newport - Vertical</td>
|
|
<td class="org-left"><code>Unv</code></td>
|
|
<td class="org-left">[V]</td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr>
|
|
<td class="org-left">4Q Photodiode Measurement - Horizontal</td>
|
|
<td class="org-left"><code>Vph</code></td>
|
|
<td class="org-left">[V]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">4Q Photodiode Measurement - Vertical</td>
|
|
<td class="org-left"><code>Vpv</code></td>
|
|
<td class="org-left">[V]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Measured Voltage across the Inductance - Horizontal</td>
|
|
<td class="org-left"><code>Vch</code></td>
|
|
<td class="org-left">[V]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Measured Voltage across the Inductance - Vertical</td>
|
|
<td class="org-left"><code>Vcv</code></td>
|
|
<td class="org-left">[V]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Newport Metrology - Horizontal</td>
|
|
<td class="org-left"><code>Vnh</code></td>
|
|
<td class="org-left">[V]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Newport Metrology - Vertical</td>
|
|
<td class="org-left"><code>Vnv</code></td>
|
|
<td class="org-left">[V]</td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr>
|
|
<td class="org-left">Attocube Measurement</td>
|
|
<td class="org-left"><code>Va</code></td>
|
|
<td class="org-left">[m]</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org96d4dae" class="outline-3">
|
|
<h3 id="org96d4dae"><span class="section-number-3">2.3</span> Huddle Test</h3>
|
|
<div class="outline-text-3" id="text-2-3">
|
|
<p>
|
|
We load the data taken during the Huddle Test.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/data_test.mat'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'t', 'Uch', 'Ucv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Unh', 'Unv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Vph', 'Vpv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Vch', 'Vcv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Vnh', 'Vnv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Va'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We remove the first second of data where everything is settling down.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">t0 = <span class="org-highlight-numbers-number">1</span>;
|
|
|
|
Uch<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
Ucv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
Unh<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
Unv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
Vph<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
Vpv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
Vch<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
Vcv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
Vnh<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
Vnv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
Va<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
t<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
|
|
t = t <span class="org-type">-</span> t<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>; % We start at t=<span class="org-highlight-numbers-number">0</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We compute the Power Spectral Density of the horizontal and vertical positions of the beam as measured by the 4 quadrant diode.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab"><span class="org-rainbow-delimiters-depth-1">[</span>psd_Vph, f<span class="org-rainbow-delimiters-depth-1">]</span> = pwelch<span class="org-rainbow-delimiters-depth-1">(</span>Vph, hanning<span class="org-rainbow-delimiters-depth-2">(</span>ceil<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>fs<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>psd_Vpv, <span class="org-type">~</span><span class="org-rainbow-delimiters-depth-1">]</span> = pwelch<span class="org-rainbow-delimiters-depth-1">(</span>Vpv, hanning<span class="org-rainbow-delimiters-depth-2">(</span>ceil<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>fs<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab"><span class="org-type">figure</span>;
|
|
hold on;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>f, sqrt<span class="org-rainbow-delimiters-depth-2">(</span>psd_Vph<span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'DisplayName', '</span>$<span class="org-type">\</span>Gamma_<span class="org-rainbow-delimiters-depth-2">{</span>Vp_h<span class="org-rainbow-delimiters-depth-2">}</span>$'<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>f, sqrt<span class="org-rainbow-delimiters-depth-2">(</span>psd_Vpv<span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'DisplayName', '</span>$<span class="org-type">\</span>Gamma_<span class="org-rainbow-delimiters-depth-2">{</span>Vp_v<span class="org-rainbow-delimiters-depth-2">}</span>$'<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
hold off;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'xscale', 'log'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; set</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">gca, 'yscale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; ylabel</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">'</span>ASD $<span class="org-type">\</span>left<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-type">\</span>frac<span class="org-rainbow-delimiters-depth-3">{</span>V<span class="org-rainbow-delimiters-depth-3">}{</span><span class="org-type">\</span>sqrt<span class="org-rainbow-delimiters-depth-4">{</span>Hz<span class="org-rainbow-delimiters-depth-4">}</span><span class="org-rainbow-delimiters-depth-3">}</span><span class="org-type">\</span>right<span class="org-rainbow-delimiters-depth-2">]</span>$'<span class="org-rainbow-delimiters-depth-1">)</span>
|
|
legend<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Location', 'southwest'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We compute the Power Spectral Density of the voltage across the inductance used for horizontal and vertical positioning of the Cercalo.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab"><span class="org-rainbow-delimiters-depth-1">[</span>psd_Vch, f<span class="org-rainbow-delimiters-depth-1">]</span> = pwelch<span class="org-rainbow-delimiters-depth-1">(</span>Vch, hanning<span class="org-rainbow-delimiters-depth-2">(</span>ceil<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>fs<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>psd_Vcv, <span class="org-type">~</span><span class="org-rainbow-delimiters-depth-1">]</span> = pwelch<span class="org-rainbow-delimiters-depth-1">(</span>Vcv, hanning<span class="org-rainbow-delimiters-depth-2">(</span>ceil<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>fs<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab"><span class="org-type">figure</span>;
|
|
hold on;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>f, sqrt<span class="org-rainbow-delimiters-depth-2">(</span>psd_Vch<span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'DisplayName', '</span>$<span class="org-type">\</span>Gamma_<span class="org-rainbow-delimiters-depth-2">{</span>Vc_h<span class="org-rainbow-delimiters-depth-2">}</span>$'<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>f, sqrt<span class="org-rainbow-delimiters-depth-2">(</span>psd_Vcv<span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'DisplayName', '</span>$<span class="org-type">\</span>Gamma_<span class="org-rainbow-delimiters-depth-2">{</span>Vc_v<span class="org-rainbow-delimiters-depth-2">}</span>$'<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
hold off;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'xscale', 'log'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; set</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">gca, 'yscale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; ylabel</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">'</span>ASD $<span class="org-type">\</span>left<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-type">\</span>frac<span class="org-rainbow-delimiters-depth-3">{</span>V<span class="org-rainbow-delimiters-depth-3">}{</span><span class="org-type">\</span>sqrt<span class="org-rainbow-delimiters-depth-4">{</span>Hz<span class="org-rainbow-delimiters-depth-4">}</span><span class="org-rainbow-delimiters-depth-3">}</span><span class="org-type">\</span>right<span class="org-rainbow-delimiters-depth-2">]</span>$'<span class="org-rainbow-delimiters-depth-1">)</span>
|
|
legend<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Location', 'southwest'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org5b29539" class="outline-3">
|
|
<h3 id="org5b29539"><span class="section-number-3">2.4</span> Input / Output data</h3>
|
|
<div class="outline-text-3" id="text-2-4">
|
|
<p>
|
|
The identification data is loaded
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">uh = load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/data_uh.mat'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'t', 'Uch', 'Ucv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Unh', 'Unv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Vph', 'Vpv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Vch', 'Vcv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Vnh', 'Vnv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Va'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
uv = load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/data_uh.mat'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'t', 'Uch', 'Ucv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Unh', 'Unv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Vph', 'Vpv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Vch', 'Vcv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Vnh', 'Vnv'</span>, <span class="org-underline">...</span>
|
|
<span class="org-string">'Va'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We remove the first seconds where the Cercalo is turned on.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">t0 = <span class="org-highlight-numbers-number">1</span>;
|
|
|
|
uh.Uch<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.Ucv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.Unh<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.Unv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.Vph<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.Vpv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.Vch<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.Vcv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.Vnh<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.Vnv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.Va<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uh.t<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
|
|
uh.t = uh.t <span class="org-type">-</span> uh.t<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>; % We start at t=<span class="org-highlight-numbers-number">0</span>
|
|
|
|
t0 = <span class="org-highlight-numbers-number">1</span>;
|
|
|
|
uv.Uch<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.Ucv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.Unh<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.Unv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.Vph<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.Vpv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.Vch<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.Vcv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.Vnh<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.Vnv<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.Va<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
uv.t<span class="org-rainbow-delimiters-depth-1">(</span>t<span class="org-type"><</span>t0<span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>;
|
|
|
|
uv.t = uv.t <span class="org-type">-</span> uv.t<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>; % We start at t=<span class="org-highlight-numbers-number">0</span>
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div id="orga6bc5e6" class="figure">
|
|
<p><img src="figs/identification_uh.png" alt="identification_uh.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 10: </span>Identification signals when exciting the horizontal direction (<a href="./figs/identification_uh.png">png</a>, <a href="./figs/identification_uh.pdf">pdf</a>)</p>
|
|
</div>
|
|
|
|
|
|
|
|
<div id="org82bc95e" class="figure">
|
|
<p><img src="figs/identification_uv.png" alt="identification_uv.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 11: </span>Identification signals when exciting in the vertical direction (<a href="./figs/identification_uv.png">png</a>, <a href="./figs/identification_uv.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org0556947" class="outline-3">
|
|
<h3 id="org0556947"><span class="section-number-3">2.5</span> Estimation of the Frequency Response Function Matrix</h3>
|
|
<div class="outline-text-3" id="text-2-5">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">win = hanning<span class="org-rainbow-delimiters-depth-1">(</span>ceil<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>fs<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We compute an estimate of the transfer functions.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab"><span class="org-rainbow-delimiters-depth-1">[</span>tf_Uch_Vph, f<span class="org-rainbow-delimiters-depth-1">]</span> = tfestimate<span class="org-rainbow-delimiters-depth-1">(</span>uh.Uch, uh.Vph, win, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>tf_Uch_Vpv, <span class="org-type">~</span><span class="org-rainbow-delimiters-depth-1">]</span> = tfestimate<span class="org-rainbow-delimiters-depth-1">(</span>uh.Uch, uh.Vpv, win, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>tf_Ucv_Vph, <span class="org-type">~</span><span class="org-rainbow-delimiters-depth-1">]</span> = tfestimate<span class="org-rainbow-delimiters-depth-1">(</span>uv.Ucv, uv.Vph, win, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>tf_Ucv_Vpv, <span class="org-type">~</span><span class="org-rainbow-delimiters-depth-1">]</span> = tfestimate<span class="org-rainbow-delimiters-depth-1">(</span>uv.Ucv, uv.Vpv, win, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div id="org171e666" class="figure">
|
|
<p><img src="figs/frequency_response_matrix.png" alt="frequency_response_matrix.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 12: </span>Frequency Response Matrix (<a href="./figs/frequency_response_matrix.png">png</a>, <a href="./figs/frequency_response_matrix.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org6c025b6" class="outline-3">
|
|
<h3 id="org6c025b6"><span class="section-number-3">2.6</span> Coherence</h3>
|
|
<div class="outline-text-3" id="text-2-6">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab"><span class="org-rainbow-delimiters-depth-1">[</span>coh_Uch_Vph, f<span class="org-rainbow-delimiters-depth-1">]</span> = mscohere<span class="org-rainbow-delimiters-depth-1">(</span>uh.Uch, uh.Vph, win, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>coh_Uch_Vpv, <span class="org-type">~</span><span class="org-rainbow-delimiters-depth-1">]</span> = mscohere<span class="org-rainbow-delimiters-depth-1">(</span>uh.Uch, uh.Vpv, win, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>coh_Ucv_Vph, <span class="org-type">~</span><span class="org-rainbow-delimiters-depth-1">]</span> = mscohere<span class="org-rainbow-delimiters-depth-1">(</span>uv.Ucv, uv.Vph, win, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>coh_Ucv_Vpv, <span class="org-type">~</span><span class="org-rainbow-delimiters-depth-1">]</span> = mscohere<span class="org-rainbow-delimiters-depth-1">(</span>uv.Ucv, uv.Vpv, win, <span class="org-rainbow-delimiters-depth-2">[]</span>, <span class="org-rainbow-delimiters-depth-2">[]</span>, fs<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div id="orgd207281" class="figure">
|
|
<p><img src="figs/identification_coherence.png" alt="identification_coherence.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 13: </span>Coherence (<a href="./figs/identification_coherence.png">png</a>, <a href="./figs/identification_coherence.pdf">pdf</a>)</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div id="outline-container-org74eeb16" class="outline-3">
|
|
<h3 id="org74eeb16"><span class="section-number-3">2.7</span> Extraction of a transfer function matrix</h3>
|
|
<div class="outline-text-3" id="text-2-7">
|
|
<p>
|
|
First we define the initial guess for the resonance frequencies and the weights associated.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">freqs_res_uh = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">410</span><span class="org-rainbow-delimiters-depth-1">]</span>; <span class="org-comment">% [Hz]</span>
|
|
freqs_res_uv = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">250</span><span class="org-rainbow-delimiters-depth-1">]</span>; <span class="org-comment">% [Hz]</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
From the number of resonance frequency we want to fit, we define the order <code>N</code> of the system we want to obtain.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">N = <span class="org-highlight-numbers-number">2</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We then make an initial guess on the complex values of the poles.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">xi = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">001</span>; <span class="org-comment">% Approximate modal damping</span>
|
|
poles_uh = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>freqs_res_uh<span class="org-type">*</span><span class="org-rainbow-delimiters-depth-2">(</span>xi <span class="org-type">+</span> <span class="org-highlight-numbers-number">1i</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>freqs_res_uh<span class="org-type">*</span><span class="org-rainbow-delimiters-depth-2">(</span>xi <span class="org-type">-</span> <span class="org-highlight-numbers-number">1i</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">]</span>;
|
|
poles_uv = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>freqs_res_uv<span class="org-type">*</span><span class="org-rainbow-delimiters-depth-2">(</span>xi <span class="org-type">+</span> <span class="org-highlight-numbers-number">1i</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>freqs_res_uv<span class="org-type">*</span><span class="org-rainbow-delimiters-depth-2">(</span>xi <span class="org-type">-</span> <span class="org-highlight-numbers-number">1i</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">]</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We then define the weight that will be used for the fitting.
|
|
Basically, we want more weight around the resonance and at low frequency (below the first resonance).
|
|
Also, we want more importance where we have a better coherence.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">weight_Uch_Vph = coh_Uch_Vph';
|
|
weight_Uch_Vpv = coh_Uch_Vpv';
|
|
weight_Ucv_Vph = coh_Ucv_Vph';
|
|
weight_Ucv_Vpv = coh_Ucv_Vpv';
|
|
|
|
alpha = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span>;
|
|
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">freq_i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:length</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">freqs_res</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
|
weight_Uch_Vph<span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-type">></span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">-</span>alpha<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span>freqs_res_uh<span class="org-rainbow-delimiters-depth-2">(</span>freq_i<span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-type">&</span> f<span class="org-type"><</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span> <span class="org-type">+</span> alpha<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span>freqs_res_uh<span class="org-rainbow-delimiters-depth-2">(</span>freq_i<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-highlight-numbers-number">10</span>;
|
|
weight_Uch_Vpv<span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-type">></span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">-</span>alpha<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span>freqs_res_uh<span class="org-rainbow-delimiters-depth-2">(</span>freq_i<span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-type">&</span> f<span class="org-type"><</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span> <span class="org-type">+</span> alpha<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span>freqs_res_uh<span class="org-rainbow-delimiters-depth-2">(</span>freq_i<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-highlight-numbers-number">10</span>;
|
|
weight_Ucv_Vph<span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-type">></span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">-</span>alpha<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span>freqs_res_uv<span class="org-rainbow-delimiters-depth-2">(</span>freq_i<span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-type">&</span> f<span class="org-type"><</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span> <span class="org-type">+</span> alpha<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span>freqs_res_uv<span class="org-rainbow-delimiters-depth-2">(</span>freq_i<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-highlight-numbers-number">10</span>;
|
|
weight_Ucv_Vpv<span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-type">></span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">-</span>alpha<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span>freqs_res_uv<span class="org-rainbow-delimiters-depth-2">(</span>freq_i<span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-type">&</span> f<span class="org-type"><</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span> <span class="org-type">+</span> alpha<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span>freqs_res_uv<span class="org-rainbow-delimiters-depth-2">(</span>freq_i<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-highlight-numbers-number">10</span>;
|
|
<span class="org-keyword">end</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Ignore data above some frequency.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">weight_Uch_Vph<span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-type">></span><span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-highlight-numbers-number">0</span>;
|
|
weight_Uch_Vpv<span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-type">></span><span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-highlight-numbers-number">0</span>;
|
|
weight_Ucv_Vph<span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-type">></span><span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-highlight-numbers-number">0</span>;
|
|
weight_Ucv_Vpv<span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-type">></span><span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-highlight-numbers-number">0</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div id="org9848359" class="figure">
|
|
<p><img src="figs/weights.png" alt="weights.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 14: </span>Weights amplitude (<a href="./figs/weights.png">png</a>, <a href="./figs/weights.pdf">pdf</a>)</p>
|
|
</div>
|
|
|
|
<p>
|
|
When we set some options for <code>vfit3</code>.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">opts = struct<span class="org-rainbow-delimiters-depth-1">()</span>;
|
|
|
|
opts.stable = <span class="org-highlight-numbers-number">1</span>; <span class="org-comment">% Enforce stable poles</span>
|
|
opts.asymp = <span class="org-highlight-numbers-number">1</span>; <span class="org-comment">% Force D matrix to be null</span>
|
|
opts.relax = <span class="org-highlight-numbers-number">1</span>; <span class="org-comment">% Use vector fitting with relaxed non-triviality constraint</span>
|
|
opts.skip_pole = <span class="org-highlight-numbers-number">0</span>; <span class="org-comment">% Do NOT skip pole identification</span>
|
|
opts.skip_res = <span class="org-highlight-numbers-number">0</span>; <span class="org-comment">% Do NOT skip identification of residues (C,D,E)</span>
|
|
opts.cmplx_ss = <span class="org-highlight-numbers-number">0</span>; <span class="org-comment">% Create real state space model with block diagonal A</span>
|
|
|
|
opts.spy1 = <span class="org-highlight-numbers-number">0</span>; <span class="org-comment">% No plotting for first stage of vector fitting</span>
|
|
opts.spy2 = <span class="org-highlight-numbers-number">0</span>; <span class="org-comment">% Create magnitude plot for fitting of f(s)</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
We define the number of iteration.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">Niter = <span class="org-highlight-numbers-number">5</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
An we run the <code>vectfit3</code> algorithm.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab"><span class="org-keyword">for</span> <span class="org-variable-name">iter</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:Niter</span>
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>SER_Uch_Vph, poles, <span class="org-type">~</span>, fit_Uch_Vph<span class="org-rainbow-delimiters-depth-1">]</span> = vectfit3<span class="org-rainbow-delimiters-depth-1">(</span>tf_Uch_Vph<span class="org-type">.'</span>, <span class="org-highlight-numbers-number">1i</span><span class="org-type">*</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>f, poles_uh, weight_Uch_Vph, opts<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">iter</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:Niter</span>
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>SER_Uch_Vpv, poles, <span class="org-type">~</span>, fit_Uch_Vpv<span class="org-rainbow-delimiters-depth-1">]</span> = vectfit3<span class="org-rainbow-delimiters-depth-1">(</span>tf_Uch_Vpv<span class="org-type">.'</span>, <span class="org-highlight-numbers-number">1i</span><span class="org-type">*</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>f, poles_uh, weight_Uch_Vpv, opts<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">iter</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:Niter</span>
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>SER_Ucv_Vph, poles, <span class="org-type">~</span>, fit_Ucv_Vph<span class="org-rainbow-delimiters-depth-1">]</span> = vectfit3<span class="org-rainbow-delimiters-depth-1">(</span>tf_Ucv_Vph<span class="org-type">.'</span>, <span class="org-highlight-numbers-number">1i</span><span class="org-type">*</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>f, poles_uv, weight_Ucv_Vph, opts<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">iter</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:Niter</span>
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>SER_Ucv_Vpv, poles, <span class="org-type">~</span>, fit_Ucv_Vpv<span class="org-rainbow-delimiters-depth-1">]</span> = vectfit3<span class="org-rainbow-delimiters-depth-1">(</span>tf_Ucv_Vpv<span class="org-type">.'</span>, <span class="org-highlight-numbers-number">1i</span><span class="org-type">*</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>f, poles_uv, weight_Ucv_Vpv, opts<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div id="org61a8901" class="figure">
|
|
<p><img src="figs/identification_matrix_fit.png" alt="identification_matrix_fit.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 15: </span>Transfer Function Extraction of the FRF matrix (<a href="./figs/identification_matrix_fit.png">png</a>, <a href="./figs/identification_matrix_fit.pdf">pdf</a>)</p>
|
|
</div>
|
|
|
|
|
|
|
|
<div id="org05ccf64" class="figure">
|
|
<p><img src="figs/identification_matrix_fit_phase.png" alt="identification_matrix_fit_phase.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 16: </span>Transfer Function Extraction of the FRF matrix (<a href="./figs/identification_matrix_fit_phase.png">png</a>, <a href="./figs/identification_matrix_fit_phase.pdf">pdf</a>)</p>
|
|
</div>
|
|
|
|
<p>
|
|
And finally, we create the identified state space model:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">G_uh_xh = minreal<span class="org-rainbow-delimiters-depth-1">(</span>ss<span class="org-rainbow-delimiters-depth-2">(</span>full<span class="org-rainbow-delimiters-depth-3">(</span>SER_uh_xh.A<span class="org-rainbow-delimiters-depth-3">)</span>,SER_uh_xh.B,SER_uh_xh.C,SER_uh_xh.D<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
G_uv_xh = minreal<span class="org-rainbow-delimiters-depth-1">(</span>ss<span class="org-rainbow-delimiters-depth-2">(</span>full<span class="org-rainbow-delimiters-depth-3">(</span>SER_uv_xh.A<span class="org-rainbow-delimiters-depth-3">)</span>,SER_uv_xh.B,SER_uv_xh.C,SER_uv_xh.D<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
G_uh_xv = minreal<span class="org-rainbow-delimiters-depth-1">(</span>ss<span class="org-rainbow-delimiters-depth-2">(</span>full<span class="org-rainbow-delimiters-depth-3">(</span>SER_uh_xv.A<span class="org-rainbow-delimiters-depth-3">)</span>,SER_uh_xv.B,SER_uh_xv.C,SER_uh_xv.D<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
G_uv_xv = minreal<span class="org-rainbow-delimiters-depth-1">(</span>ss<span class="org-rainbow-delimiters-depth-2">(</span>full<span class="org-rainbow-delimiters-depth-3">(</span>SER_uv_xv.A<span class="org-rainbow-delimiters-depth-3">)</span>,SER_uv_xv.B,SER_uv_xv.C,SER_uv_xv.D<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
G = <span class="org-rainbow-delimiters-depth-1">[</span>G_uh_xh, G_uv_xh;
|
|
G_uh_xv, G_uv_xv<span class="org-rainbow-delimiters-depth-1">]</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/plant.mat', 'G'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orge157b63" class="outline-2">
|
|
<h2 id="orge157b63"><span class="section-number-2">3</span> Calibration of the 4 Quadrant Diode</h2>
|
|
</div>
|
|
<div id="outline-container-orgc276bb8" class="outline-2">
|
|
<h2 id="orgc276bb8"><span class="section-number-2">4</span> Plant Scaling</h2>
|
|
<div class="outline-text-2" id="text-4">
|
|
<ul class="org-ul">
|
|
<li>measured noise</li>
|
|
<li>expected perturbations</li>
|
|
<li>maximum input usage</li>
|
|
<li>maximum wanted error</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgffff224" class="outline-2">
|
|
<h2 id="orgffff224"><span class="section-number-2">5</span> Plant Analysis</h2>
|
|
<div class="outline-text-2" id="text-5">
|
|
</div>
|
|
<div id="outline-container-orge9e5454" class="outline-3">
|
|
<h3 id="orge9e5454"><span class="section-number-3">5.1</span> Load Plant</h3>
|
|
<div class="outline-text-3" id="text-5-1">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/plant.mat', 'G'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org425e4e2" class="outline-3">
|
|
<h3 id="org425e4e2"><span class="section-number-3">5.2</span> RGA-Number</h3>
|
|
<div class="outline-text-3" id="text-5-2">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">freqs = logspace<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">4</span>, <span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
G_resp = freqresp<span class="org-rainbow-delimiters-depth-1">(</span>G, freqs, <span class="org-string">'Hz'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
A = zeros<span class="org-rainbow-delimiters-depth-1">(</span>size<span class="org-rainbow-delimiters-depth-2">(</span>G_resp<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
RGAnum = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span>, length<span class="org-rainbow-delimiters-depth-2">(</span>freqs<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:length</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">freqs</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
|
A<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span> = G_resp<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">.*</span>inv<span class="org-rainbow-delimiters-depth-1">(</span>G_resp<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>';
|
|
RGAnum<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span> = sum<span class="org-rainbow-delimiters-depth-1">(</span>sum<span class="org-rainbow-delimiters-depth-2">(</span>abs<span class="org-rainbow-delimiters-depth-3">(</span>A<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-type">-</span>eye<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
<span class="org-comment">% </span><span class="org-comment"><span class="org-constant">RGA </span></span><span class="org-comment">= G0.*inv(G0)';</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab"><span class="org-type">figure</span>;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, RGAnum<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'xscale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">U = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">2</span>, length<span class="org-rainbow-delimiters-depth-2">(</span>freqs<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
S = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">2</span>, length<span class="org-rainbow-delimiters-depth-2">(</span>freqs<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
|
V = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">2</span>, length<span class="org-rainbow-delimiters-depth-2">(</span>freqs<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:length</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">freqs</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
|
<span class="org-rainbow-delimiters-depth-1">[</span>Ui, Si, Vi<span class="org-rainbow-delimiters-depth-1">]</span> = svd<span class="org-rainbow-delimiters-depth-1">(</span>G_resp<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
U<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span> = Ui;
|
|
S<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span> = Si;
|
|
V<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span> = Vi;
|
|
<span class="org-keyword">end</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orge80bcc0" class="outline-3">
|
|
<h3 id="orge80bcc0"><span class="section-number-3">5.3</span> Rotation Matrix</h3>
|
|
<div class="outline-text-3" id="text-5-3">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">G0 = freqresp<span class="org-rainbow-delimiters-depth-1">(</span>G, <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgfd824b0" class="outline-2">
|
|
<h2 id="orgfd824b0"><span class="section-number-2">6</span> Control Objective</h2>
|
|
<div class="outline-text-2" id="text-6">
|
|
<p>
|
|
The maximum expected stroke is \(y_\text{max} = 3mm \approx 5e^{-2} rad\) at \(1Hz\).
|
|
The maximum wanted error is \(e_\text{max} = 10 \mu rad\).
|
|
</p>
|
|
|
|
<p>
|
|
Thus, we require the sensitivity function at \(\omega_0 = 1\text{ Hz}\):
|
|
</p>
|
|
\begin{align*}
|
|
|S(j\omega_0)| &< \left| \frac{e_\text{max}}{y_\text{max}} \right| \\
|
|
&< 2 \cdot 10^{-4}
|
|
\end{align*}
|
|
|
|
<p>
|
|
In terms of loop gain, this is equivalent to:
|
|
\[ |L(j\omega_0)| > 5 \cdot 10^{3} \]
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgc7afa66" class="outline-2">
|
|
<h2 id="orgc7afa66"><span class="section-number-2">7</span> Control Design</h2>
|
|
</div>
|
|
<div id="outline-container-org5791267" class="outline-2">
|
|
<h2 id="org5791267"><span class="section-number-2">8</span> Measurement of the non-repeatability</h2>
|
|
</div>
|
|
</div>
|
|
<div id="postamble" class="status">
|
|
<p class="author">Author: Dehaeze Thomas</p>
|
|
<p class="date">Created: 2019-09-16 lun. 15:21</p>
|
|
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
|
</div>
|
|
</body>
|
|
</html>
|