1357 lines
98 KiB
HTML
1357 lines
98 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. 11:59 -->
|
|
<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="#org754474f">1. Introduction</a>
|
|
<ul>
|
|
<li><a href="#org5c645da">1.1. Signals</a></li>
|
|
<li><a href="#org0aa0ee3">1.2. Cercalo</a></li>
|
|
<li><a href="#org002d4fa">1.3. Optical Setup</a></li>
|
|
<li><a href="#org39881ce">1.4. 4 quadrant Diode</a></li>
|
|
<li><a href="#orgd6654c5">1.5. ADC/DAC</a></li>
|
|
<li><a href="#org6c0b30a">1.6. Amplifier for the Cercalo</a></li>
|
|
<li><a href="#org4f39adb">1.7. Block Diagram</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org84958b2">2. Identification</a>
|
|
<ul>
|
|
<li><a href="#orgd0268b2">2.1. Excitation Data</a></li>
|
|
<li><a href="#orgeac50db">2.2. Signals</a></li>
|
|
<li><a href="#org5dc4e7d">2.3. Huddle Test</a></li>
|
|
<li><a href="#org2028261">2.4. Input / Output data</a></li>
|
|
<li><a href="#org15893d8">2.5. Estimation of the Frequency Response Function Matrix</a></li>
|
|
<li><a href="#org48cc1e6">2.6. Coherence</a></li>
|
|
<li><a href="#org3c28674">2.7. Extraction of a transfer function matrix</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org14b4ee4">3. Sensor Noise</a></li>
|
|
<li><a href="#org7fd124d">4. Plant Analysis</a>
|
|
<ul>
|
|
<li><a href="#org0fae2b8">4.1. Load Plant</a></li>
|
|
<li><a href="#orgfeb824b">4.2. RGA-Number</a></li>
|
|
<li><a href="#org1704d2b">4.3. Rotation Matrix</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org6ec2576">5. Control Objective</a></li>
|
|
<li><a href="#org41cbf8b">6. Plant Scaling</a></li>
|
|
<li><a href="#org0103d04">7. Control Design</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org754474f" class="outline-2">
|
|
<h2 id="org754474f"><span class="section-number-2">1</span> Introduction</h2>
|
|
<div class="outline-text-2" id="text-1">
|
|
</div>
|
|
<div id="outline-container-org5c645da" class="outline-3">
|
|
<h3 id="org5c645da"><span class="section-number-3">1.1</span> Signals</h3>
|
|
<div class="outline-text-3" id="text-1-1">
|
|
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
|
|
|
|
<colgroup>
|
|
<col class="org-left" />
|
|
|
|
<col class="org-left" />
|
|
|
|
<col class="org-left" />
|
|
|
|
<col class="org-right" />
|
|
</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>
|
|
<th scope="col" class="org-right">Number</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>
|
|
<td class="org-right">1</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>
|
|
<td class="org-right">2</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>
|
|
<td class="org-right">3</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>
|
|
<td class="org-right">4</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>
|
|
<td class="org-right">5</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>
|
|
<td class="org-right">6</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>
|
|
<td class="org-right">7</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>
|
|
<td class="org-right">8</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>
|
|
<td class="org-right">9</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>
|
|
<td class="org-right">10</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>
|
|
<td class="org-right">11</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org0aa0ee3" class="outline-3">
|
|
<h3 id="org0aa0ee3"><span class="section-number-3">1.2</span> Cercalo</h3>
|
|
<div class="outline-text-3" id="text-1-2">
|
|
<table id="orga3759f1" 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</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</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>
|
|
L = 0.1mH on both directions
|
|
</p>
|
|
|
|
<p>
|
|
Resistance= 41 Ohm
|
|
</p>
|
|
|
|
<p>
|
|
Ax2 = 8.3
|
|
Ax1 = 9.3
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div id="outline-container-org002d4fa" class="outline-3">
|
|
<h3 id="org002d4fa"><span class="section-number-3">1.3</span> Optical Setup</h3>
|
|
</div>
|
|
<div id="outline-container-org39881ce" class="outline-3">
|
|
<h3 id="org39881ce"><span class="section-number-3">1.4</span> 4 quadrant Diode</h3>
|
|
<div class="outline-text-3" id="text-1-4">
|
|
<p>
|
|
Front view of the photodiode.
|
|
</p>
|
|
|
|
|
|
<div class="figure">
|
|
<p><img src="figs/4qd_naming.png" alt="4qd_naming.png" />
|
|
</p>
|
|
</div>
|
|
|
|
<p>
|
|
Signals going to the amplifier on the board. The amplifier is located on the bottom right of the board.
|
|
</p>
|
|
|
|
<div class="figure">
|
|
<p><img src="figs/4qd_amplifier.png" alt="4qd_amplifier.png" />
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgd6654c5" class="outline-3">
|
|
<h3 id="orgd6654c5"><span class="section-number-3">1.5</span> ADC/DAC</h3>
|
|
<div class="outline-text-3" id="text-1-5">
|
|
<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 id="outline-container-org6c0b30a" class="outline-3">
|
|
<h3 id="org6c0b30a"><span class="section-number-3">1.6</span> Amplifier for the Cercalo</h3>
|
|
<div class="outline-text-3" id="text-1-6">
|
|
|
|
<div class="figure">
|
|
<p><img src="figs/cercalo_amplifier.png" alt="cercalo_amplifier.png" />
|
|
</p>
|
|
</div>
|
|
|
|
<p>
|
|
The values of the parameters are:
|
|
</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>
|
|
|
|
<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="important">
|
|
<p>
|
|
The current amplifier has a constant gain over all the frequency band of interest.
|
|
</p>
|
|
|
|
</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>
|
|
</div>
|
|
|
|
<div id="outline-container-org4f39adb" class="outline-3">
|
|
<h3 id="org4f39adb"><span class="section-number-3">1.7</span> Block Diagram</h3>
|
|
<div class="outline-text-3" id="text-1-7">
|
|
<div class="org-src-container">
|
|
<pre class="src src-latex"><span class="org-font-latex-sedate"><span class="org-keyword">\begin</span></span>{<span class="org-function-name">tikzpicture</span>}
|
|
<span class="org-font-latex-sedate">\node</span>[DAC] (dac) at (0, 0) {};
|
|
<span class="org-font-latex-sedate">\node</span>[block, right=1.2 of dac] (Gi) {<span class="org-font-latex-math">$G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_i</span></span><span class="org-font-latex-math">$</span>};
|
|
<span class="org-font-latex-sedate">\node</span>[block, right=1.5 of Gi] (Gc) {<span class="org-font-latex-math">$G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_c</span></span><span class="org-font-latex-math">$</span>};
|
|
<span class="org-font-latex-sedate">\node</span>[addb, right=0.5 of Gc] (add) {};
|
|
<span class="org-font-latex-sedate">\node</span>[block, above= of add] (Gn) {<span class="org-font-latex-math">$G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_n</span></span><span class="org-font-latex-math">$</span>};
|
|
<span class="org-font-latex-sedate">\node</span>[ADC, right=1.2 of add] (adc) {};
|
|
<span class="org-font-latex-sedate">\coordinate</span> (GiGc) at (<span class="org-font-latex-math">$0.8*(Gi.east) + 0.2*(Gc.west)$</span>);
|
|
<span class="org-font-latex-sedate">\node</span>[block] (Amp) at (GiGc|-Gn) {<span class="org-font-latex-math">$G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_a</span></span><span class="org-font-latex-math">$</span>};
|
|
|
|
<span class="org-font-latex-sedate">\node</span>[above, align=center] at (Gi.north) {Current<span class="org-font-latex-warning">\\</span>Amplifier};
|
|
<span class="org-font-latex-sedate">\node</span>[above, align=center] at (Gc.north) {Cercalo};
|
|
<span class="org-font-latex-sedate">\node</span>[left, align=right] at (Gn.west) {Newport};
|
|
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (<span class="org-font-latex-math">$(dac.west) + (-1, 0)$</span>) --node[midway, sloped]{<span class="org-font-latex-math">$/$</span>} (dac.west);
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (dac.east) -- (Gi.west) node[above left]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}U</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,h}</span></span><span class="org-font-latex-math"> \\ U</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,v}</span></span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (Gi.east) -- (Gc.west) node[above left]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\tilde</span></span><span class="org-font-latex-math">{U}</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,h}</span></span><span class="org-font-latex-math"> \\ </span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\tilde</span></span><span class="org-font-latex-math">{U}</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,v}</span></span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (Gc.east) -- (add.west);
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (Gn.south) -- (add.north);
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (GiGc)node[branch]{} -- (Amp.south);
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (Amp.north) -- ++(0, 1.5) node[below right]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}V</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,h}</span></span><span class="org-font-latex-math"> \\ V</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,v}</span></span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (<span class="org-font-latex-math">$(Gn.north) + (0, 1.5)$</span>) -- (Gn.north) node[above right]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}U</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{n,h}</span></span><span class="org-font-latex-math"> \\ U</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{n,v}</span></span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (add.east) -- (adc.west) node[above left]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}V</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{p,h}</span></span><span class="org-font-latex-math"> \\ V</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{p,v}</span></span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (adc.east) --node[midway, sloped]{<span class="org-font-latex-math">$/$</span>} ++(1, 0);
|
|
<span class="org-font-latex-sedate"><span class="org-keyword">\end</span></span>{<span class="org-function-name">tikzpicture</span>}
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div class="figure">
|
|
<p><img src="figs/cercalo_diagram_simplify.png" alt="cercalo_diagram_simplify.png" />
|
|
</p>
|
|
</div>
|
|
|
|
<ul class="org-ul">
|
|
<li>Transfer function for the <b>Current Amplifier</b>:
|
|
\[ G_i = \begin{bmatrix} G_{i,h} & 0 \\ 0 & G_{i,v} \end{bmatrix} \]</li>
|
|
<li>Transfer function for the <b>Voltage Amplifier</b>:
|
|
\[ G_a = \begin{bmatrix} G_{a,h} & 0 \\ 0 & G_{a,v} \end{bmatrix} \]</li>
|
|
<li>Transfer function from the Voltage across the <b>Cercalo</b> 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>Transfer function from the <b>Newport</b> command signal 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>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-latex"><span class="org-font-latex-sedate"><span class="org-keyword">\begin</span></span>{<span class="org-function-name">tikzpicture</span>}
|
|
<span class="org-font-latex-sedate">\node</span>[DAC] (dac) at (0, 0) {};
|
|
<span class="org-font-latex-sedate">\node</span>[block, right=1.5 of dac] (Gi) {<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">} G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{i,h}</span></span><span class="org-font-latex-math"> & 0 \\ 0 & G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{i,v}</span></span><span class="org-font-latex-math"> </span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\node</span>[block, right=1.8 of Gi] (Gc) {<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">} G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{\frac{V_{p,h}}{\tilde{U}_{c,h}}}</span></span><span class="org-font-latex-math"> & G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{\frac{V_{p,h}}{\tilde{U}_{c,v}}}</span></span><span class="org-font-latex-math"> \\ G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{\frac{V_{p,v}}{\tilde{U}_{c,h}}}</span></span><span class="org-font-latex-math"> & G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{\frac{V_{p,v}}{\tilde{U}_{c,v}}}</span></span><span class="org-font-latex-math"> </span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\node</span>[addb, right= of Gc] (add) {};
|
|
<span class="org-font-latex-sedate">\node</span>[block, above= of add] (Gn) {<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">} G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{\frac{V_{p,h}}{U_{n,h}}}</span></span><span class="org-font-latex-math"> & G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{\frac{V_{p,h}}{U_{n,v}}}</span></span><span class="org-font-latex-math"> \\ G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{\frac{V_{p,v}}{U_{n,h}}}</span></span><span class="org-font-latex-math"> & G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{\frac{V_{n,v}}{U_{n,v}}}</span></span><span class="org-font-latex-math"> </span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\node</span>[ADC, right = 1.5 of add] (adc) {};
|
|
<span class="org-font-latex-sedate">\coordinate</span> (GiGc) at (<span class="org-font-latex-math">$0.7*(Gi.east) + 0.3*(Gc.west)$</span>);
|
|
<span class="org-font-latex-sedate">\node</span>[block] (Amp) at (GiGc|-Gn) {<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">} G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{a,h}</span></span><span class="org-font-latex-math"> & 0 \\ 0 & G</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{a,v}</span></span><span class="org-font-latex-math"> </span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
|
|
<span class="org-font-latex-sedate">\node</span>[above, align=center] at (Gi.north) {Current<span class="org-font-latex-warning">\\</span>Amplifier};
|
|
<span class="org-font-latex-sedate">\node</span>[above, align=center] at (Gc.north) {Cercalo};
|
|
<span class="org-font-latex-sedate">\node</span>[left, align=right] at (Gn.west) {Newport};
|
|
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (<span class="org-font-latex-math">$(dac.west) + (-1, 0)$</span>) --node[midway, sloped]{<span class="org-font-latex-math">$/$</span>} (dac.west);
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (dac.east) -- (Gi.west) node[above left]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}U</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,h}</span></span><span class="org-font-latex-math"> \\ U</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,v}</span></span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (Gi.east) -- (Gc.west) node[above left]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}</span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\tilde</span></span><span class="org-font-latex-math">{U}</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,h}</span></span><span class="org-font-latex-math"> \\ </span><span class="org-font-latex-sedate"><span class="org-font-latex-math">\tilde</span></span><span class="org-font-latex-math">{U}</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,v}</span></span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (Gc.east) -- (add.west);
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (Gn.south) -- (add.north);
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (GiGc)node[branch]{} -- (Amp.south);
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (Amp.north) -- ++(0, 1.5) node[below right]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}V</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,h}</span></span><span class="org-font-latex-math"> \\ V</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{c,v}</span></span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (<span class="org-font-latex-math">$(Gn.north) + (0, 1.5)$</span>) -- (Gn.north) node[above right]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}U</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{n,h}</span></span><span class="org-font-latex-math"> \\ U</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{n,v}</span></span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (add.east) -- (adc.west) node[above left]{<span class="org-font-latex-math">$</span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\begin</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}V</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{p,h}</span></span><span class="org-font-latex-math"> \\ V</span><span class="org-font-latex-math"><span class="org-font-latex-script-char">_{p,v}</span></span><span class="org-font-latex-sedate"><span class="org-keyword"><span class="org-font-latex-math">\end</span></span></span><span class="org-font-latex-math">{</span><span class="org-function-name"><span class="org-font-latex-math">bmatrix</span></span><span class="org-font-latex-math">}$</span>};
|
|
<span class="org-font-latex-sedate">\draw</span>[->] (adc.east) --node[midway, sloped]{<span class="org-font-latex-math">$/$</span>} ++(1, 0);
|
|
<span class="org-font-latex-sedate"><span class="org-keyword">\end</span></span>{<span class="org-function-name">tikzpicture</span>}
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div class="figure">
|
|
<p><img src="figs/cercalo_diagram.png" alt="cercalo_diagram.png" />
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org84958b2" class="outline-2">
|
|
<h2 id="org84958b2"><span class="section-number-2">2</span> Identification</h2>
|
|
<div class="outline-text-2" id="text-2">
|
|
<p>
|
|
<a id="orgf9e9ac3"></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-orgd0268b2" class="outline-3">
|
|
<h3 id="orgd0268b2"><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-orgeac50db" class="outline-3">
|
|
<h3 id="orgeac50db"><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-org5dc4e7d" class="outline-3">
|
|
<h3 id="org5dc4e7d"><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-org2028261" class="outline-3">
|
|
<h3 id="org2028261"><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="orgeb45e59" class="figure">
|
|
<p><img src="figs/identification_uh.png" alt="identification_uh.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 6: </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="org37217b5" class="figure">
|
|
<p><img src="figs/identification_uv.png" alt="identification_uv.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 7: </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-org15893d8" class="outline-3">
|
|
<h3 id="org15893d8"><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="org6ee4e7c" class="figure">
|
|
<p><img src="figs/frequency_response_matrix.png" alt="frequency_response_matrix.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 8: </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-org48cc1e6" class="outline-3">
|
|
<h3 id="org48cc1e6"><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="org3ec05cb" class="figure">
|
|
<p><img src="figs/identification_coherence.png" alt="identification_coherence.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 9: </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-org3c28674" class="outline-3">
|
|
<h3 id="org3c28674"><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="org60f2a97" class="figure">
|
|
<p><img src="figs/weights.png" alt="weights.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 10: </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="org74c7619" class="figure">
|
|
<p><img src="figs/identification_matrix_fit.png" alt="identification_matrix_fit.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 11: </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="org82ac5fe" class="figure">
|
|
<p><img src="figs/identification_matrix_fit_phase.png" alt="identification_matrix_fit_phase.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 12: </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-org14b4ee4" class="outline-2">
|
|
<h2 id="org14b4ee4"><span class="section-number-2">3</span> Sensor Noise</h2>
|
|
</div>
|
|
<div id="outline-container-org7fd124d" class="outline-2">
|
|
<h2 id="org7fd124d"><span class="section-number-2">4</span> Plant Analysis</h2>
|
|
<div class="outline-text-2" id="text-4">
|
|
</div>
|
|
<div id="outline-container-org0fae2b8" class="outline-3">
|
|
<h3 id="org0fae2b8"><span class="section-number-3">4.1</span> Load Plant</h3>
|
|
<div class="outline-text-3" id="text-4-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-orgfeb824b" class="outline-3">
|
|
<h3 id="orgfeb824b"><span class="section-number-3">4.2</span> RGA-Number</h3>
|
|
<div class="outline-text-3" id="text-4-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-org1704d2b" class="outline-3">
|
|
<h3 id="org1704d2b"><span class="section-number-3">4.3</span> Rotation Matrix</h3>
|
|
<div class="outline-text-3" id="text-4-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-org6ec2576" class="outline-2">
|
|
<h2 id="org6ec2576"><span class="section-number-2">5</span> Control Objective</h2>
|
|
<div class="outline-text-2" id="text-5">
|
|
<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-org41cbf8b" class="outline-2">
|
|
<h2 id="org41cbf8b"><span class="section-number-2">6</span> Plant Scaling</h2>
|
|
<div class="outline-text-2" id="text-6">
|
|
<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-org0103d04" class="outline-2">
|
|
<h2 id="org0103d04"><span class="section-number-2">7</span> Control Design</h2>
|
|
</div>
|
|
</div>
|
|
<div id="postamble" class="status">
|
|
<p class="author">Author: Dehaeze Thomas</p>
|
|
<p class="date">Created: 2019-09-16 lun. 11:59</p>
|
|
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
|
</div>
|
|
</body>
|
|
</html>
|