Compare commits

...

4 Commits

Author SHA1 Message Date
4c3090ac52 Use online CSS / JS 2020-11-12 10:15:29 +01:00
80f3c9aa67 Move files to matlab folder 2020-11-12 10:14:52 +01:00
a4d25b24cf Update .gitignore to ignore tex outputs 2020-11-03 11:08:26 +01:00
892989585b Export the report to PDF 2020-11-03 11:08:16 +01:00
35 changed files with 991 additions and 2396 deletions

4
.gitignore vendored
View File

@@ -1,5 +1,9 @@
auto/ auto/
*.tex *.tex
*.bbl
*.synctex.gz
.auctex-auto/
_minted*
**/figs/*.svg **/figs/*.svg
**/figs/*.tex **/figs/*.tex

View File

@@ -1,145 +0,0 @@
.org-bold { /* bold */ font-weight: bold; }
.org-bold-italic { /* bold-italic */ font-weight: bold; font-style: italic; }
.org-buffer-menu-buffer { /* buffer-menu-buffer */ font-weight: bold; }
.org-builtin { /* font-lock-builtin-face */ color: #7a378b; }
.org-button { /* button */ text-decoration: underline; }
.org-calendar-today { /* calendar-today */ text-decoration: underline; }
.org-change-log-acknowledgement { /* change-log-acknowledgement */ color: #b22222; }
.org-change-log-conditionals { /* change-log-conditionals */ color: #a0522d; }
.org-change-log-date { /* change-log-date */ color: #8b2252; }
.org-change-log-email { /* change-log-email */ color: #a0522d; }
.org-change-log-file { /* change-log-file */ color: #0000ff; }
.org-change-log-function { /* change-log-function */ color: #a0522d; }
.org-change-log-list { /* change-log-list */ color: #a020f0; }
.org-change-log-name { /* change-log-name */ color: #008b8b; }
.org-comint-highlight-input { /* comint-highlight-input */ font-weight: bold; }
.org-comint-highlight-prompt { /* comint-highlight-prompt */ color: #00008b; }
.org-comment { /* font-lock-comment-face */ color: #999988; font-style: italic; }
.org-comment-delimiter { /* font-lock-comment-delimiter-face */ color: #999988; font-style: italic; }
.org-completions-annotations { /* completions-annotations */ font-style: italic; }
.org-completions-common-part { /* completions-common-part */ color: #000000; background-color: #ffffff; }
.org-completions-first-difference { /* completions-first-difference */ font-weight: bold; }
.org-constant { /* font-lock-constant-face */ color: #008b8b; }
.org-diary { /* diary */ color: #ff0000; }
.org-diff-context { /* diff-context */ color: #7f7f7f; }
.org-diff-file-header { /* diff-file-header */ background-color: #b3b3b3; font-weight: bold; }
.org-diff-function { /* diff-function */ background-color: #cccccc; }
.org-diff-header { /* diff-header */ background-color: #cccccc; }
.org-diff-hunk-header { /* diff-hunk-header */ background-color: #cccccc; }
.org-diff-index { /* diff-index */ background-color: #b3b3b3; font-weight: bold; }
.org-diff-nonexistent { /* diff-nonexistent */ background-color: #b3b3b3; font-weight: bold; }
.org-diff-refine-change { /* diff-refine-change */ background-color: #d9d9d9; }
.org-dired-directory { /* dired-directory */ color: #0000ff; }
.org-dired-flagged { /* dired-flagged */ color: #ff0000; font-weight: bold; }
.org-dired-header { /* dired-header */ color: #228b22; }
.org-dired-ignored { /* dired-ignored */ color: #7f7f7f; }
.org-dired-mark { /* dired-mark */ color: #008b8b; }
.org-dired-marked { /* dired-marked */ color: #ff0000; font-weight: bold; }
.org-dired-perm-write { /* dired-perm-write */ color: #b22222; }
.org-dired-symlink { /* dired-symlink */ color: #a020f0; }
.org-dired-warning { /* dired-warning */ color: #ff0000; font-weight: bold; }
.org-doc { /* font-lock-doc-face */ color: #8b2252; }
.org-escape-glyph { /* escape-glyph */ color: #a52a2a; }
.org-file-name-shadow { /* file-name-shadow */ color: #7f7f7f; }
.org-flyspell-duplicate { /* flyspell-duplicate */ color: #cdad00; font-weight: bold; text-decoration: underline; }
.org-flyspell-incorrect { /* flyspell-incorrect */ color: #ff4500; font-weight: bold; text-decoration: underline; }
.org-fringe { /* fringe */ background-color: #f2f2f2; }
.org-function-name { /* font-lock-function-name-face */ color: teal; }
.org-header-line { /* header-line */ color: #333333; background-color: #e5e5e5; }
.org-help-argument-name { /* help-argument-name */ font-style: italic; }
.org-highlight { /* highlight */ background-color: #b4eeb4; }
.org-holiday { /* holiday */ background-color: #ffc0cb; }
.org-isearch { /* isearch */ color: #b0e2ff; background-color: #cd00cd; }
.org-isearch-fail { /* isearch-fail */ background-color: #ffc1c1; }
.org-italic { /* italic */ font-style: italic; }
.org-keyword { /* font-lock-keyword-face */ color: #0086b3; }
.org-lazy-highlight { /* lazy-highlight */ background-color: #afeeee; }
.org-link { /* link */ color: #0000ff; text-decoration: underline; }
.org-link-visited { /* link-visited */ color: #8b008b; text-decoration: underline; }
.org-log-edit-header { /* log-edit-header */ color: #a020f0; }
.org-log-edit-summary { /* log-edit-summary */ color: #0000ff; }
.org-log-edit-unknown-header { /* log-edit-unknown-header */ color: #b22222; }
.org-match { /* match */ background-color: #ffff00; }
.org-next-error { /* next-error */ background-color: #eedc82; }
.org-nobreak-space { /* nobreak-space */ color: #a52a2a; text-decoration: underline; }
.org-org-archived { /* org-archived */ color: #7f7f7f; }
.org-org-block { /* org-block */ color: #7f7f7f; }
.org-org-block-begin-line { /* org-block-begin-line */ color: #b22222; }
.org-org-block-end-line { /* org-block-end-line */ color: #b22222; }
.org-org-checkbox { /* org-checkbox */ font-weight: bold; }
.org-org-checkbox-statistics-done { /* org-checkbox-statistics-done */ color: #228b22; font-weight: bold; }
.org-org-checkbox-statistics-todo { /* org-checkbox-statistics-todo */ color: #ff0000; font-weight: bold; }
.org-org-clock-overlay { /* org-clock-overlay */ background-color: #ffff00; }
.org-org-code { /* org-code */ color: #7f7f7f; }
.org-org-column { /* org-column */ background-color: #e5e5e5; }
.org-org-column-title { /* org-column-title */ background-color: #e5e5e5; font-weight: bold; text-decoration: underline; }
.org-org-date { /* org-date */ color: #a020f0; text-decoration: underline; }
.org-org-document-info { /* org-document-info */ color: #191970; }
.org-org-document-info-keyword { /* org-document-info-keyword */ color: #7f7f7f; }
.org-org-document-title { /* org-document-title */ color: #191970; font-size: 144%; font-weight: bold; }
.org-org-done { /* org-done */ color: #228b22; font-weight: bold; }
.org-org-drawer { /* org-drawer */ color: #0000ff; }
.org-org-ellipsis { /* org-ellipsis */ color: #b8860b; text-decoration: underline; }
.org-org-footnote { /* org-footnote */ color: #a020f0; text-decoration: underline; }
.org-org-formula { /* org-formula */ color: #b22222; }
.org-org-headline-done { /* org-headline-done */ color: #bc8f8f; }
.org-org-hide { /* org-hide */ color: #ffffff; }
.org-org-latex-and-export-specials { /* org-latex-and-export-specials */ color: #8b4513; }
.org-org-level-1 { /* org-level-1 */ color: #0000ff; }
.org-org-level-2 { /* org-level-2 */ color: #a0522d; }
.org-org-level-3 { /* org-level-3 */ color: #a020f0; }
.org-org-level-4 { /* org-level-4 */ color: #b22222; }
.org-org-level-5 { /* org-level-5 */ color: #228b22; }
.org-org-level-6 { /* org-level-6 */ color: #008b8b; }
.org-org-level-7 { /* org-level-7 */ color: #7a378b; }
.org-org-level-8 { /* org-level-8 */ color: #8b2252; }
.org-org-link { /* org-link */ color: #0000ff; text-decoration: underline; }
.org-org-meta-line { /* org-meta-line */ color: #b22222; }
.org-org-mode-line-clock { /* org-mode-line-clock */ color: #000000; background-color: #bfbfbf; }
.org-org-mode-line-clock-overrun { /* org-mode-line-clock-overrun */ color: #000000; background-color: #ff0000; }
.org-org-quote { /* org-quote */ color: #7f7f7f; }
.org-org-scheduled { /* org-scheduled */ color: #006400; }
.org-org-scheduled-previously { /* org-scheduled-previously */ color: #b22222; }
.org-org-scheduled-today { /* org-scheduled-today */ color: #006400; }
.org-org-sexp-date { /* org-sexp-date */ color: #a020f0; }
.org-org-special-keyword { /* org-special-keyword */ color: #a020f0; }
.org-org-table { /* org-table */ color: #0000ff; }
.org-org-tag { /* org-tag */ font-weight: bold; }
.org-org-target { /* org-target */ text-decoration: underline; }
.org-org-time-grid { /* org-time-grid */ color: #b8860b; }
.org-org-todo { /* org-todo */ color: #ff0000; font-weight: bold; }
.org-org-upcoming-deadline { /* org-upcoming-deadline */ color: #b22222; }
.org-org-verbatim { /* org-verbatim */ color: #7f7f7f; }
.org-org-verse { /* org-verse */ color: #7f7f7f; }
.org-org-warning { /* org-warning */ color: #ff0000; font-weight: bold; }
.org-outline-1 { /* outline-1 */ color: #0000ff; }
.org-outline-2 { /* outline-2 */ color: #a0522d; }
.org-outline-3 { /* outline-3 */ color: #a020f0; }
.org-outline-4 { /* outline-4 */ color: #b22222; }
.org-outline-5 { /* outline-5 */ color: #228b22; }
.org-outline-6 { /* outline-6 */ color: #008b8b; }
.org-outline-7 { /* outline-7 */ color: #7a378b; }
.org-outline-8 { /* outline-8 */ color: #8b2252; }
.org-preprocessor { /* font-lock-preprocessor-face */ color: #7a378b; }
.org-query-replace { /* query-replace */ color: #b0e2ff; background-color: #cd00cd; }
.org-regexp-grouping-backslash { /* font-lock-regexp-grouping-backslash */ font-weight: bold; }
.org-regexp-grouping-construct { /* font-lock-regexp-grouping-construct */ font-weight: bold; }
.org-region { /* region */ background-color: #eedc82; }
.org-secondary-selection { /* secondary-selection */ background-color: #ffff00; }
.org-shadow { /* shadow */ color: #7f7f7f; }
.org-show-paren-match { /* show-paren-match */ background-color: #40e0d0; }
.org-show-paren-mismatch { /* show-paren-mismatch */ color: #ffffff; background-color: #a020f0; }
.org-string { /* font-lock-string-face */ color: #dd1144; }
.org-tool-bar { /* tool-bar */ color: #000000; background-color: #bfbfbf; }
.org-tooltip { /* tooltip */ color: #000000; background-color: #ffffe0; }
.org-trailing-whitespace { /* trailing-whitespace */ background-color: #ff0000; }
.org-type { /* font-lock-type-face */ color: #228b22; }
.org-underline { /* underline */ text-decoration: underline; }
.org-variable-name { /* font-lock-variable-name-face */ color: teal; }
.org-warning { /* font-lock-warning-face */ color: #ff0000; font-weight: bold; }
.org-widget-button { /* widget-button */ font-weight: bold; }
.org-widget-button-pressed { /* widget-button-pressed */ color: #ff0000; }
.org-widget-documentation { /* widget-documentation */ color: #006400; }
.org-widget-field { /* widget-field */ background-color: #d9d9d9; }
.org-widget-inactive { /* widget-inactive */ color: #7f7f7f; }
.org-widget-single-line-field { /* widget-single-line-field */ background-color: #d9d9d9; }

File diff suppressed because it is too large Load Diff

BIN
doc/buf634.pdf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 97 KiB

1720
index.html

File diff suppressed because it is too large Load Diff

176
index.org
View File

@@ -1,24 +1,29 @@
#+TITLE: Sercalo Test Bench #+TITLE: Sercalo Test Bench
:DRAWER: :DRAWER:
#+BIND: org-latex-image-default-option "scale=1"
#+BIND: org-latex-image-default-width ""
#+STARTUP: overview #+STARTUP: overview
#+LANGUAGE: en #+LANGUAGE: en
#+EMAIL: dehaeze.thomas@gmail.com #+EMAIL: dehaeze.thomas@gmail.com
#+AUTHOR: Dehaeze Thomas #+AUTHOR: Dehaeze Thomas
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/> #+HTML_LINK_HOME: ../index.html
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/> #+HTML_LINK_UP: ../index.html
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="./js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="./js/readtheorg.js"></script>
#+LATEX_CLASS: scrreprt #+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
#+LATEX_CLASS_OPTIONS: [] #+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
#+LATEX_CLASS: cleanreport
#+LATEX_CLASS_OPTIONS: [conf, hangsection, secbreak]
#+LATEX_HEADER: \usepackage{minted} #+LATEX_HEADER: \usepackage{minted}
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{/home/thomas/Cloud/thesis/latex/}{config.tex}") #+LATEX_HEADER: \newcommand{\authorFirstName}{Thomas}
#+LATEX_HEADER: \newcommand{\authorLastName}{Dehaeze}
#+LATEX_HEADER: \newcommand{\authorEmail}{dehaeze.thomas@gmail.com}
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{/home/thomas/Cloud/tikz/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes #+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150 #+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100 #+PROPERTY: header-args:latex+ :imoutoptions -quality 100
@@ -27,6 +32,7 @@
#+PROPERTY: header-args:latex+ :exports both #+PROPERTY: header-args:latex+ :exports both
#+PROPERTY: header-args:latex+ :mkdirp yes #+PROPERTY: header-args:latex+ :mkdirp yes
#+PROPERTY: header-args:latex+ :noweb yes #+PROPERTY: header-args:latex+ :noweb yes
#+PROPERTY: header-args:latex+ :tangle no
#+PROPERTY: header-args:latex+ :output-dir figs #+PROPERTY: header-args:latex+ :output-dir figs
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png") #+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
@@ -40,6 +46,12 @@
#+PROPERTY: header-args:matlab+ :mkdirp yes #+PROPERTY: header-args:matlab+ :mkdirp yes
:END: :END:
#+begin_export html
<hr>
<p>This report is also available as a <a href="./index.pdf">pdf</a>.</p>
<hr>
#+end_export
* Introduction * Introduction
** Block Diagram ** Block Diagram
The block diagram of the setup to be controlled is shown in Fig. [[fig:block_diagram_simplify]]. The block diagram of the setup to be controlled is shown in Fig. [[fig:block_diagram_simplify]].
@@ -136,6 +148,7 @@ The block diagram with each transfer function is shown in Fig. [[fig:block_diagr
#+end_src #+end_src
#+name: fig:block_diagram #+name: fig:block_diagram
#+attr_latex: :width \linewidth
#+caption: Block Diagram of the Experimental Setup with detailed dynamics #+caption: Block Diagram of the Experimental Setup with detailed dynamics
#+RESULTS: #+RESULTS:
[[file:figs/sercalo_diagram.png]] [[file:figs/sercalo_diagram.png]]
@@ -144,11 +157,14 @@ The block diagram with each transfer function is shown in Fig. [[fig:block_diagr
From the Sercalo documentation, we have the parameters shown on table [[tab:sercalo_parameters]]. From the Sercalo documentation, we have the parameters shown on table [[tab:sercalo_parameters]].
#+name: tab:sercalo_parameters #+name: tab:sercalo_parameters
#+attr_latex: :environment tabularx :width \linewidth :align lXXXXX
#+attr_latex: :center t :booktabs t :float t
#+caption: Sercalo Parameters #+caption: Sercalo Parameters
| | Maximum Stroke [deg] | Resonance Frequency [Hz] | DC Gain [mA/deg] | Gain at resonance [deg/V] | RC Resistance [Ohm] | | | Max. Stroke | Res. Freq. | DC Gain | Gain at res. | RC Res. |
|------------------+----------------------+--------------------------+------------------+---------------------------+---------------------| | | [deg] | [Hz] | [mA/deg] | [deg/V] | [Ohm] |
| AX1 (Horizontal) | 5 | 411.13 | 28.4 | 382.9 | 9.41 | |------------------+-------------+------------+----------+--------------+---------|
| AX2 (Vertical) | 5 | 252.5 | 35.2 | 350.4 | | | AX1 (Horizontal) | 5 | 411.13 | 28.4 | 382.9 | 9.41 |
| AX2 (Vertical) | 5 | 252.5 | 35.2 | 350.4 | |
The Inductance and DC resistance of the two axis of the Sercalo have been measured: The Inductance and DC resistance of the two axis of the Sercalo have been measured:
- $L_{c,h} = 0.1\ \text{mH}$ - $L_{c,h} = 0.1\ \text{mH}$
@@ -269,10 +285,12 @@ And we have:
\end{align*} \end{align*}
#+name: fig:newport_doc #+name: fig:newport_doc
#+attr_latex: :width \linewidth
#+caption: Documentation of the Newport #+caption: Documentation of the Newport
[[file:figs/newport_doc.png]] [[file:figs/newport_doc.png]]
#+name: fig:newport_gain #+name: fig:newport_gain
#+attr_latex: :width \linewidth
#+caption: Transfer function of the Newport #+caption: Transfer function of the Newport
[[file:figs/newport_gain.png]] [[file:figs/newport_gain.png]]
@@ -349,27 +367,7 @@ In this section, we seek to identify all the blocks as shown in Fig. [[fig:block
|-----------------------------------------------------+-------+------| |-----------------------------------------------------+-------+------|
| Attocube Measurement | =Va= | [m] | | Attocube Measurement | =Va= | [m] |
** ZIP file containing the data and matlab files :ignore: ** Matlab Init :noexport:ignore:
#+begin_src bash :exports none :results none
if [ matlab/sercalo_identification.m -nt data/sercalo_identification.zip ]; then
cp matlab/sercalo_identification.m sercalo_identification.m;
zip data/sercalo_identification \
mat/data_cal_pd_h.mat \
mat/data_cal_pd_v.mat \
mat/data_uch.mat \
mat/data_ucv.mat \
mat/data_unh.mat \
mat/data_unv.mat \
sercalo_identification.m
rm sercalo_identification.m;
fi
#+end_src
#+begin_note
All the files (data and Matlab scripts) are accessible [[file:data/sercalo_identification.zip][here]].
#+end_note
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
#+end_src #+end_src
@@ -378,6 +376,14 @@ In this section, we seek to identify all the blocks as shown in Fig. [[fig:block
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
#+begin_src matlab #+begin_src matlab
fs = 1e4; fs = 1e4;
Ts = 1/fs; Ts = 1/fs;
@@ -539,6 +545,8 @@ Thus, we obtain the "gain of the 4 quadrant photo-diode as shown on table [[tab:
#+end_src #+end_src
#+name: tab:gain_4qd #+name: tab:gain_4qd
#+attr_latex: :environment tabularx :width 0.5\linewidth :align lX
#+attr_latex: :center t :booktabs t :float t
#+caption: Identified Gain of the 4 quadrant diode #+caption: Identified Gain of the 4 quadrant diode
#+RESULTS: #+RESULTS:
| Horizontal [V/rad] | Vertical [V/rad] | | Horizontal [V/rad] | Vertical [V/rad] |
@@ -1807,6 +1815,8 @@ The goal is to determine the noise of the photodiodes as well as the noise of th
Multiple measurements are done with different experimental configuration as follow: Multiple measurements are done with different experimental configuration as follow:
#+name: tab:huddle_tests #+name: tab:huddle_tests
#+attr_latex: :environment tabularx :width 0.7\linewidth :align lXXX
#+attr_latex: :center t :booktabs t :float t
#+caption: Experimental Configuration for the various Huddle test #+caption: Experimental Configuration for the various Huddle test
| Number | OL/CL | Compensation Unit | Aluminum | | Number | OL/CL | Compensation Unit | Aluminum |
|--------+-------------+-------------------+----------| |--------+-------------+-------------------+----------|
@@ -1825,6 +1835,14 @@ Multiple measurements are done with different experimental configuration as foll
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
** Load Data ** Load Data
#+begin_src matlab #+begin_src matlab
ht_1 = load('./mat/data_huddle_test_1.mat', 't', 'Vph', 'Vpv', 'Va'); ht_1 = load('./mat/data_huddle_test_1.mat', 't', 'Vph', 'Vpv', 'Va');
@@ -2058,7 +2076,6 @@ We filter the data with a first order low pass filter with a crossover frequency
#+CAPTION: PSD of the 4QD signal during Huddle tests ([[./figs/huddle_test_4qd_psd.png][png]], [[./figs/huddle_test_4qd_psd.pdf][pdf]]) #+CAPTION: PSD of the 4QD signal during Huddle tests ([[./figs/huddle_test_4qd_psd.png][png]], [[./figs/huddle_test_4qd_psd.pdf][pdf]])
[[file:figs/huddle_test_4qd_psd.png]] [[file:figs/huddle_test_4qd_psd.png]]
** Conclusion ** Conclusion
The Attocube's "Environmental Compensation Unit" does not have a significant effect on the stability of the measurement. The Attocube's "Environmental Compensation Unit" does not have a significant effect on the stability of the measurement.
@@ -2103,6 +2120,14 @@ The Attocube's "Environmental Compensation Unit" does not have a significant eff
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
** Effect of the Sercalo angle error on the measured distance by the Attocube ** Effect of the Sercalo angle error on the measured distance by the Attocube
<<sec:sercalo_angle_error>> <<sec:sercalo_angle_error>>
To simplify, we suppose that the Newport mirror is a flat mirror (instead of a concave one). To simplify, we suppose that the Newport mirror is a flat mirror (instead of a concave one).
@@ -2245,6 +2270,8 @@ The tracking error of the feedback system used to position the Sercalo mirror sh
#+end_important #+end_important
#+name: tab:effect_angle_error #+name: tab:effect_angle_error
#+attr_latex: :environment tabularx :width 0.6\linewidth :align lX
#+attr_latex: :center t :booktabs t :float t
#+caption: Effect of an angle error $\delta \theta_c$ of the Sercalo's mirror on the measurement error $\delta L$ by the Attocube #+caption: Effect of an angle error $\delta \theta_c$ of the Sercalo's mirror on the measurement error $\delta L$ by the Attocube
| Angle Error $\delta \theta_c$ | Distance measurement error $\delta L$ | | Angle Error $\delta \theta_c$ | Distance measurement error $\delta L$ |
|-------------------------------+---------------------------------------| |-------------------------------+---------------------------------------|
@@ -2354,11 +2381,11 @@ These physical properties should change relatively slowly, however, for a beam p
| $\Delta 10\%RH$ | 10nm | | $\Delta 10\%RH$ | 10nm |
An *Environmental Compensation Unit* is used and can compensate for variations or air properties up to: An *Environmental Compensation Unit* is used and can compensate for variations or air properties up to:
| Air property Variations | Measurement error | | Air property Variations | Measurement error |
|-------------------------+-------------------| |-------------------------+---------------------|
| $\Delta T = \pm 0.1^oC$ | 20nm | | $\Delta T = \pm 0.1^oC$ | $\pm 10\,\text{nm}$ |
| $\Delta P = \pm 1hPa$ | 50nm | | $\Delta P = \pm 1hPa$ | $\pm 25\,\text{nm}$ |
| $\Delta \pm 2\%RH$ | 4nm | | $\Delta \pm 2\%RH$ | $\pm 2\,\text{nm}$ |
#+begin_important #+begin_important
The total measurement error induced by air properties variations is then: The total measurement error induced by air properties variations is then:
@@ -2663,6 +2690,14 @@ This corresponds to a measurement error of the Attocube equals to (in [m])
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
** Coprime Factorization ** Coprime Factorization
#+begin_src matlab #+begin_src matlab
load('mat/plant.mat', 'sys', 'Gi', 'Zc', 'Ga', 'Gc', 'Gn', 'Gd'); load('mat/plant.mat', 'sys', 'Gi', 'Zc', 'Ga', 'Gc', 'Gn', 'Gd');
@@ -2679,6 +2714,8 @@ The goal is the scale the plant prior to control synthesis.
This will simplify the choice of weighting functions and will yield useful insight on the controllability of the plant. This will simplify the choice of weighting functions and will yield useful insight on the controllability of the plant.
#+name: tab:plant_scaling_values #+name: tab:plant_scaling_values
#+attr_latex: :environment tabularx :width 0.7\linewidth :align lXXX
#+attr_latex: :center t :booktabs t :float t
#+caption: Maximum wanted values for various signals #+caption: Maximum wanted values for various signals
| | Value | Unit | Variable Name | | | Value | Unit | Variable Name |
|------------------------+-------+-------------+---------------| |------------------------+-------+-------------+---------------|
@@ -2719,6 +2756,14 @@ The plant is put in a general configuration as shown in Fig. [[fig:general_contr
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
** Load Plant ** Load Plant
#+begin_src matlab #+begin_src matlab
load('mat/plant.mat', 'G'); load('mat/plant.mat', 'G');
@@ -2778,6 +2823,14 @@ The plant is put in a general configuration as shown in Fig. [[fig:general_contr
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
#+begin_src matlab #+begin_src matlab
freqs = logspace(1, 3, 1000); freqs = logspace(1, 3, 1000);
#+end_src #+end_src
@@ -2845,22 +2898,7 @@ Active damping does not seems to be applicable here.
** Introduction :ignore: ** Introduction :ignore:
In this section, we try to implement a simple decentralized controller. In this section, we try to implement a simple decentralized controller.
** ZIP file containing the data and matlab files :ignore: ** Matlab Init :noexport:ignore:
#+begin_src bash :exports none :results none
if [ matlab/decentralized_control.m -nt data/decentralized_control.zip ]; then
cp matlab/decentralized_control.m decentralized_control.m;
zip data/decentralized_control \
mat/plant.mat \
decentralized_control.m
rm decentralized_control.m;
fi
#+end_src
#+begin_note
All the files (data and Matlab scripts) are accessible [[file:data/decentralized_control.zip][here]].
#+end_note
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
#+end_src #+end_src
@@ -2869,6 +2907,14 @@ In this section, we try to implement a simple decentralized controller.
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
#+begin_src matlab #+begin_src matlab
freqs = logspace(0, 3, 1000); freqs = logspace(0, 3, 1000);
#+end_src #+end_src
@@ -2991,6 +3037,14 @@ This can be used to align the 4QD:
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
#+begin_src matlab #+begin_src matlab
freqs = logspace(0, 2, 1000); freqs = logspace(0, 2, 1000);
#+end_src #+end_src
@@ -3065,6 +3119,14 @@ All sources of error (detailed in the budget error in Section [[sec:budget_error
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
#+begin_src matlab #+begin_src matlab
fs = 1e4; fs = 1e4;
#+end_src #+end_src

BIN
index.pdf Normal file

Binary file not shown.

7
js/bootstrap.min.js vendored

File diff suppressed because one or more lines are too long

4
js/jquery.min.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
!function(a,b){"use strict";function c(c,g){var h=this;h.$el=a(c),h.el=c,h.id=e++,h.$window=a(b),h.$document=a(document),h.$el.bind("destroyed",a.proxy(h.teardown,h)),h.$clonedHeader=null,h.$originalHeader=null,h.isSticky=!1,h.hasBeenSticky=!1,h.leftOffset=null,h.topOffset=null,h.init=function(){h.$el.each(function(){var b=a(this);b.css("padding",0),h.$originalHeader=a("thead:first",this),h.$clonedHeader=h.$originalHeader.clone(),b.trigger("clonedHeader."+d,[h.$clonedHeader]),h.$clonedHeader.addClass("tableFloatingHeader"),h.$clonedHeader.css("display","none"),h.$originalHeader.addClass("tableFloatingHeaderOriginal"),h.$originalHeader.after(h.$clonedHeader),h.$printStyle=a('<style type="text/css" media="print">.tableFloatingHeader{display:none !important;}.tableFloatingHeaderOriginal{position:static !important;}</style>'),a("head").append(h.$printStyle)}),h.setOptions(g),h.updateWidth(),h.toggleHeaders(),h.bind()},h.destroy=function(){h.$el.unbind("destroyed",h.teardown),h.teardown()},h.teardown=function(){h.isSticky&&h.$originalHeader.css("position","static"),a.removeData(h.el,"plugin_"+d),h.unbind(),h.$clonedHeader.remove(),h.$originalHeader.removeClass("tableFloatingHeaderOriginal"),h.$originalHeader.css("visibility","visible"),h.$printStyle.remove(),h.el=null,h.$el=null},h.bind=function(){h.$scrollableArea.on("scroll."+d,h.toggleHeaders),h.isWindowScrolling||(h.$window.on("scroll."+d+h.id,h.setPositionValues),h.$window.on("resize."+d+h.id,h.toggleHeaders)),h.$scrollableArea.on("resize."+d,h.toggleHeaders),h.$scrollableArea.on("resize."+d,h.updateWidth)},h.unbind=function(){h.$scrollableArea.off("."+d,h.toggleHeaders),h.isWindowScrolling||(h.$window.off("."+d+h.id,h.setPositionValues),h.$window.off("."+d+h.id,h.toggleHeaders)),h.$scrollableArea.off("."+d,h.updateWidth)},h.toggleHeaders=function(){h.$el&&h.$el.each(function(){var b,c=a(this),d=h.isWindowScrolling?isNaN(h.options.fixedOffset)?h.options.fixedOffset.outerHeight():h.options.fixedOffset:h.$scrollableArea.offset().top+(isNaN(h.options.fixedOffset)?0:h.options.fixedOffset),e=c.offset(),f=h.$scrollableArea.scrollTop()+d,g=h.$scrollableArea.scrollLeft(),i=h.isWindowScrolling?f>e.top:d>e.top,j=(h.isWindowScrolling?f:0)<e.top+c.height()-h.$clonedHeader.height()-(h.isWindowScrolling?0:d);i&&j?(b=e.left-g+h.options.leftOffset,h.$originalHeader.css({position:"fixed","margin-top":h.options.marginTop,left:b,"z-index":3}),h.leftOffset=b,h.topOffset=d,h.$clonedHeader.css("display",""),h.isSticky||(h.isSticky=!0,h.updateWidth()),h.setPositionValues()):h.isSticky&&(h.$originalHeader.css("position","static"),h.$clonedHeader.css("display","none"),h.isSticky=!1,h.resetWidth(a("td,th",h.$clonedHeader),a("td,th",h.$originalHeader)))})},h.setPositionValues=function(){var a=h.$window.scrollTop(),b=h.$window.scrollLeft();!h.isSticky||0>a||a+h.$window.height()>h.$document.height()||0>b||b+h.$window.width()>h.$document.width()||h.$originalHeader.css({top:h.topOffset-(h.isWindowScrolling?0:a),left:h.leftOffset-(h.isWindowScrolling?0:b)})},h.updateWidth=function(){if(h.isSticky){h.$originalHeaderCells||(h.$originalHeaderCells=a("th,td",h.$originalHeader)),h.$clonedHeaderCells||(h.$clonedHeaderCells=a("th,td",h.$clonedHeader));var b=h.getWidth(h.$clonedHeaderCells);h.setWidth(b,h.$clonedHeaderCells,h.$originalHeaderCells),h.$originalHeader.css("width",h.$clonedHeader.width())}},h.getWidth=function(c){var d=[];return c.each(function(c){var e,f=a(this);if("border-box"===f.css("box-sizing"))e=f[0].getBoundingClientRect().width;else{var g=a("th",h.$originalHeader);if("collapse"===g.css("border-collapse"))if(b.getComputedStyle)e=parseFloat(b.getComputedStyle(this,null).width);else{var i=parseFloat(f.css("padding-left")),j=parseFloat(f.css("padding-right")),k=parseFloat(f.css("border-width"));e=f.outerWidth()-i-j-k}else e=f.width()}d[c]=e}),d},h.setWidth=function(a,b,c){b.each(function(b){var d=a[b];c.eq(b).css({"min-width":d,"max-width":d})})},h.resetWidth=function(b,c){b.each(function(b){var d=a(this);c.eq(b).css({"min-width":d.css("min-width"),"max-width":d.css("max-width")})})},h.setOptions=function(c){h.options=a.extend({},f,c),h.$scrollableArea=a(h.options.scrollableArea),h.isWindowScrolling=h.$scrollableArea[0]===b},h.updateOptions=function(a){h.setOptions(a),h.unbind(),h.bind(),h.updateWidth(),h.toggleHeaders()},h.init()}var d="stickyTableHeaders",e=0,f={fixedOffset:0,leftOffset:0,marginTop:0,scrollableArea:b};a.fn[d]=function(b){return this.each(function(){var e=a.data(this,"plugin_"+d);e?"string"==typeof b?e[b].apply(e):e.updateOptions(b):"destroy"!==b&&a.data(this,"plugin_"+d,new c(this,b))})}}(jQuery,window);

View File

@@ -1,85 +0,0 @@
$(function() {
$('.note').before("<p class='admonition-title note'>Note</p>");
$('.seealso').before("<p class='admonition-title seealso'>See also</p>");
$('.warning').before("<p class='admonition-title warning'>Warning</p>");
$('.caution').before("<p class='admonition-title caution'>Caution</p>");
$('.attention').before("<p class='admonition-title attention'>Attention</p>");
$('.tip').before("<p class='admonition-title tip'>Tip</p>");
$('.important').before("<p class='admonition-title important'>Important</p>");
$('.hint').before("<p class='admonition-title hint'>Hint</p>");
$('.error').before("<p class='admonition-title error'>Error</p>");
$('.danger').before("<p class='admonition-title danger'>Danger</p>");
});
$( document ).ready(function() {
// Shift nav in mobile when clicking the menu.
$(document).on('click', "[data-toggle='wy-nav-top']", function() {
$("[data-toggle='wy-nav-shift']").toggleClass("shift");
$("[data-toggle='rst-versions']").toggleClass("shift");
});
// Close menu when you click a link.
$(document).on('click', ".wy-menu-vertical .current ul li a", function() {
$("[data-toggle='wy-nav-shift']").removeClass("shift");
$("[data-toggle='rst-versions']").toggleClass("shift");
});
$(document).on('click', "[data-toggle='rst-current-version']", function() {
$("[data-toggle='rst-versions']").toggleClass("shift-up");
});
// Make tables responsive
$("table.docutils:not(.field-list)").wrap("<div class='wy-table-responsive'></div>");
});
$( document ).ready(function() {
$('#text-table-of-contents ul').first().addClass('nav');
// ScrollSpy also requires that we use
// a Bootstrap nav component.
$('body').scrollspy({target: '#text-table-of-contents'});
// add sticky table headers
$('table').stickyTableHeaders();
// set the height of tableOfContents
var $postamble = $('#postamble');
var $tableOfContents = $('#table-of-contents');
$tableOfContents.css({paddingBottom: $postamble.outerHeight()});
// add TOC button
var toggleSidebar = $('<div id="toggle-sidebar"><a href="#table-of-contents"><h2>Table of Contents</h2></a></div>');
$('#content').prepend(toggleSidebar);
// add close button when sidebar showed in mobile screen
var closeBtn = $('<a class="close-sidebar" href="#">Close</a>');
var tocTitle = $('#table-of-contents').find('h2');
tocTitle.append(closeBtn);
});
window.SphinxRtdTheme = (function (jquery) {
var stickyNav = (function () {
var navBar,
win,
stickyNavCssClass = 'stickynav',
applyStickNav = function () {
if (navBar.height() <= win.height()) {
navBar.addClass(stickyNavCssClass);
} else {
navBar.removeClass(stickyNavCssClass);
}
},
enable = function () {
applyStickNav();
win.on('resize', applyStickNav);
},
init = function () {
navBar = jquery('nav.wy-nav-side:first');
win = jquery(window);
};
jquery(init);
return {
enable : enable
};
}());
return {
StickyNav : stickyNav
};
}($));

View File

@@ -4,6 +4,8 @@ clear; close all; clc;
%% Intialize Laplace variable %% Intialize Laplace variable
s = zpk('s'); s = zpk('s');
addpath('./mat/');
freqs = logspace(1, 3, 1000); freqs = logspace(1, 3, 1000);
% Load Plant % Load Plant
@@ -21,7 +23,7 @@ Kppf.OutputName = {'Uch', 'Ucv'};
figure; figure;
% Magnitude % Magnitude
ax1 = subaxis(2,1,1); ax1 = subplot(2,1,1);
hold on; hold on;
plot(freqs, abs(squeeze(freqresp(G, freqs, 'Hz'))), 'k-'); plot(freqs, abs(squeeze(freqresp(G, freqs, 'Hz'))), 'k-');
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
@@ -30,7 +32,7 @@ ylabel('Magnitude [dB]');
hold off; hold off;
% Phase % Phase
ax2 = subaxis(2,1,2); ax2 = subplot(2,1,2);
hold on; hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(G, freqs, 'Hz'))), 'k-'); plot(freqs, 180/pi*angle(squeeze(freqresp(G, freqs, 'Hz'))), 'k-');
set(gca,'xscale','log'); set(gca,'xscale','log');

View File

@@ -4,6 +4,8 @@ clear; close all; clc;
%% Intialize Laplace variable %% Intialize Laplace variable
s = zpk('s'); s = zpk('s');
addpath('./mat/');
freqs = logspace(0, 3, 1000); freqs = logspace(0, 3, 1000);
% Load Plant % Load Plant
@@ -23,7 +25,7 @@ K.OutputName = {'Uch', 'Ucv'};
figure; figure;
% Magnitude % Magnitude
ax1 = subaxis(2,1,1); ax1 = subplot(2,1,1);
hold on; hold on;
plot(freqs, abs(squeeze(freqresp(Kh*sys('Rh', 'Uch'), freqs, 'Hz'))), 'DisplayName', '$L_h = K_h G_{d,h}^{-1} G_{\frac{V_{p,h}}{\tilde{U}_{c,h}}} G_{i,h} $'); plot(freqs, abs(squeeze(freqresp(Kh*sys('Rh', 'Uch'), freqs, 'Hz'))), 'DisplayName', '$L_h = K_h G_{d,h}^{-1} G_{\frac{V_{p,h}}{\tilde{U}_{c,h}}} G_{i,h} $');
plot(freqs, abs(squeeze(freqresp(Kv*sys('Rv', 'Ucv'), freqs, 'Hz'))), 'DisplayName', '$L_v = K_v G_{d,v}^{-1} G_{\frac{V_{p,v}}{\tilde{U}_{c,v}}} G_{i,v} $'); plot(freqs, abs(squeeze(freqresp(Kv*sys('Rv', 'Ucv'), freqs, 'Hz'))), 'DisplayName', '$L_v = K_v G_{d,v}^{-1} G_{\frac{V_{p,v}}{\tilde{U}_{c,v}}} G_{i,v} $');
@@ -34,7 +36,7 @@ hold off;
legend('location', 'northeast'); legend('location', 'northeast');
% Phase % Phase
ax2 = subaxis(2,1,2); ax2 = subplot(2,1,2);
hold on; hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(Kh*sys('Rh', 'Uch'), freqs, 'Hz')))); plot(freqs, 180/pi*angle(squeeze(freqresp(Kh*sys('Rh', 'Uch'), freqs, 'Hz'))));
plot(freqs, 180/pi*angle(squeeze(freqresp(Kv*sys('Rv', 'Ucv'), freqs, 'Hz')))); plot(freqs, 180/pi*angle(squeeze(freqresp(Kv*sys('Rv', 'Ucv'), freqs, 'Hz'))));

View File

@@ -4,6 +4,8 @@ clear; close all; clc;
%% Intialize Laplace variable %% Intialize Laplace variable
s = zpk('s'); s = zpk('s');
addpath('./mat/');
% Effect of the Sercalo angle error on the measured distance by the Attocube % Effect of the Sercalo angle error on the measured distance by the Attocube
% <<sec:sercalo_angle_error>> % <<sec:sercalo_angle_error>>
% To simplify, we suppose that the Newport mirror is a flat mirror (instead of a concave one). % To simplify, we suppose that the Newport mirror is a flat mirror (instead of a concave one).
@@ -179,6 +181,8 @@ clear; close all; clc;
%% Intialize Laplace variable %% Intialize Laplace variable
s = zpk('s'); s = zpk('s');
addpath('./mat/');
% Coprime Factorization % Coprime Factorization
load('mat/plant.mat', 'sys', 'Gi', 'Zc', 'Ga', 'Gc', 'Gn', 'Gd'); load('mat/plant.mat', 'sys', 'Gi', 'Zc', 'Ga', 'Gc', 'Gn', 'Gd');
@@ -191,6 +195,8 @@ clear; close all; clc;
%% Intialize Laplace variable %% Intialize Laplace variable
s = zpk('s'); s = zpk('s');
addpath('./mat/');
% Load Plant % Load Plant
load('mat/plant.mat', 'G'); load('mat/plant.mat', 'G');
@@ -233,6 +239,8 @@ clear; close all; clc;
%% Intialize Laplace variable %% Intialize Laplace variable
s = zpk('s'); s = zpk('s');
addpath('./mat/');
freqs = logspace(0, 2, 1000); freqs = logspace(0, 2, 1000);
% Load Plant % Load Plant
@@ -283,6 +291,8 @@ clear; close all; clc;
%% Intialize Laplace variable %% Intialize Laplace variable
s = zpk('s'); s = zpk('s');
addpath('./mat/');
fs = 1e4; fs = 1e4;
% Data Load and pre-processing % Data Load and pre-processing
@@ -515,14 +525,14 @@ Unvm = mean(reshape(uv.Unv, [fs floor(length(uv.t)/fs)]),2);
figure; figure;
ax1 = subplot(1, 2, 1); ax1 = subplot(1, 2, 1);
hold on; hold on;
plot(uh.Unh, uh.Va); plot(uh.Unh, uh.Vaf);
plot(Unhm, Vahm) plot(Unhm, Vahm)
hold off; hold off;
xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [m]'); xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [m]');
ax2 = subplot(1, 2, 2); ax2 = subplot(1, 2, 2);
hold on; hold on;
plot(uv.Unv, uv.Va); plot(uv.Unv, uv.Vaf);
plot(Unvm, Vavm) plot(Unvm, Vavm)
hold off; hold off;
xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [m]'); xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [m]');
@@ -536,17 +546,16 @@ linkaxes([ax1,ax2],'xy');
% [[file:figs/repeat_plot_raw.png]] % [[file:figs/repeat_plot_raw.png]]
figure; figure;
ax1 = subplot(1, 2, 1); ax1 = subplot(1, 2, 1);
hold on; hold on;
plot(uh.Unh, 1e9*(uh.Va - repmat(Vahm, length(uh.t)/length(Vahm),1))); plot(uh.Unh, 1e9*(uh.Vaf - repmat(Vahm, length(uh.t)/length(Vahm),1)));
hold off; hold off;
xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [nm]'); xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [nm]');
ax2 = subplot(1, 2, 2); ax2 = subplot(1, 2, 2);
hold on; hold on;
plot(uv.Unv, 1e9*(uv.Va - repmat(Vavm, length(uv.t)/length(Vavm),1))); plot(uv.Unv, 1e9*(uv.Vaf - repmat(Vavm, length(uv.t)/length(Vavm),1)));
hold off; hold off;
xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [nm]'); xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [nm]');
@@ -562,7 +571,7 @@ ylim([-100 100]);
% We also plot the displacement measured during the huddle test. % We also plot the displacement measured during the huddle test.
% All the signals are shown on Fig. [[]]. % All the signals are shown on Fig. [[fig:non-repeatability-parts]].
Vphm = mean(reshape(uh.Vph/freqresp(Gd(1,1), 0), [fs floor(length(uh.t)/fs)]),2); Vphm = mean(reshape(uh.Vph/freqresp(Gd(1,1), 0), [fs floor(length(uh.t)/fs)]),2);
@@ -582,6 +591,16 @@ ht = load('./mat/data_huddle_test_3.mat', 't', 'Va');
htm = 1e9*ht.Va(1:length(Vaheq)) - repmat(mean(1e9*ht.Va(1:length(Vaheq))), length(uh.t)/length(Vaheq),1); htm = 1e9*ht.Va(1:length(Vaheq)) - repmat(mean(1e9*ht.Va(1:length(Vaheq))), length(uh.t)/length(Vaheq),1);
figure;
hold on;
plot(uh.Unh, 1e9*(uh.Va - repmat(Vahm, length(uh.t)/length(Vahm),1)), 'DisplayName', 'Measured Non-Repeatability');
plot(uh.Unh, 1e9*ht.Va(1:length(Vaheq))-mean(1e9*ht.Va(1:length(Vaheq))), 'DisplayName', 'Huddle Test');
plot(uh.Unh, 1e9*Vaheq, 'DisplayName', 'Due to Sercalo Angle Error');
hold off;
xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [nm]');
ylim([-100 100]);
legend();
figure; figure;
ax1 = subplot(1, 2, 1); ax1 = subplot(1, 2, 1);
hold on; hold on;
@@ -602,3 +621,71 @@ legend('location', 'northeast');
linkaxes([ax1,ax2],'xy'); linkaxes([ax1,ax2],'xy');
ylim([-100 100]); ylim([-100 100]);
% Results with a low pass filter
% We filter the data with a first order low pass filter with a crossover frequency of $\omega_0$.
w0 = 10; % [Hz]
G_lpf = 1/(1 + s/2/pi/w0);
uh.Vaf = lsim(G_lpf, uh.Va, uh.t);
uv.Vaf = lsim(G_lpf, uv.Va, uv.t);
% Processing
% First, we get the mean value as measured by the interferometer for each value of the Newport angle.
Vahm = mean(reshape(uh.Vaf, [fs floor(length(uh.t)/fs)]),2);
Unhm = mean(reshape(uh.Unh, [fs floor(length(uh.t)/fs)]),2);
Vavm = mean(reshape(uv.Vaf, [fs floor(length(uv.t)/fs)]),2);
Unvm = mean(reshape(uv.Unv, [fs floor(length(uv.t)/fs)]),2);
% #+RESULTS:
% | Va - Horizontal [nm rms] | Va - Vertical [nm rms] |
% |--------------------------+------------------------|
% | 22.9 | 13.9 |
figure;
ax1 = subplot(1, 2, 1);
hold on;
plot(uh.Unh, uh.Vaf);
plot(Unhm, Vahm)
hold off;
xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [m]');
ax2 = subplot(1, 2, 2);
hold on;
plot(uv.Unv, uv.Vaf);
plot(Unvm, Vavm)
hold off;
xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [m]');
linkaxes([ax1,ax2],'xy');
% #+NAME: fig:repeat_plot_raw
% #+CAPTION: Repeatability of the measurement ([[./figs/repeat_plot_lpf.png][png]], [[./figs/repeat_plot_lpf.pdf][pdf]])
% [[file:figs/repeat_plot_lpf.png]]
figure;
ax1 = subplot(1, 2, 1);
hold on;
plot(uh.Unh, 1e9*(uh.Vaf - repmat(Vahm, length(uh.t)/length(Vahm),1)));
hold off;
xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [nm]');
ax2 = subplot(1, 2, 2);
hold on;
plot(uv.Unv, 1e9*(uv.Vaf - repmat(Vavm, length(uv.t)/length(Vavm),1)));
hold off;
xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [nm]');
linkaxes([ax1,ax2],'xy');
ylim([-60 60]);

View File

@@ -4,6 +4,8 @@ clear; close all; clc;
%% Intialize Laplace variable %% Intialize Laplace variable
s = zpk('s'); s = zpk('s');
addpath('./mat/');
% Load Data % Load Data
ht_1 = load('./mat/data_huddle_test_1.mat', 't', 'Vph', 'Vpv', 'Va'); ht_1 = load('./mat/data_huddle_test_1.mat', 't', 'Vph', 'Vpv', 'Va');
@@ -43,36 +45,53 @@ ht_2 = ht_s{2};
ht_3 = ht_s{3}; ht_3 = ht_s{3};
ht_4 = ht_s{4}; ht_4 = ht_s{4};
% Filter data with low pass filter
% We filter the data with a first order low pass filter with a crossover frequency of $\omega_0$.
w0 = 50; % [Hz]
G_lpf = 1/(1 + s/2/pi/w0);
ht_1.Vaf = lsim(G_lpf, ht_1.Va, ht_1.t);
ht_2.Vaf = lsim(G_lpf, ht_2.Va, ht_2.t);
ht_3.Vaf = lsim(G_lpf, ht_3.Va, ht_3.t);
ht_4.Vaf = lsim(G_lpf, ht_4.Va, ht_4.t);
% Time domain plots % Time domain plots
figure; figure;
ax1 = subaxis(2, 2, 1) ax1 = subplot(2, 2, 1);
hold on; hold on;
plot(ht_1.t, 1e9*ht_1.Va); plot(ht_1.t, 1e9*ht_1.Va);
plot(ht_1.t, 1e9*ht_1.Vaf);
hold off; hold off;
ylabel('Displacement [nm]'); ylabel('Displacement [nm]');
set(gca, 'XTickLabel',[]); set(gca, 'XTickLabel',[]);
title('OL'); title('OL');
ax2 = subaxis(2, 2, 2) ax2 = subplot(2, 2, 2);
hold on; hold on;
plot(ht_2.t, 1e9*ht_2.Va); plot(ht_2.t, 1e9*ht_2.Va);
plot(ht_2.t, 1e9*ht_2.Vaf);
hold off; hold off;
set(gca, 'XTickLabel',[]); set(gca, 'XTickLabel',[]);
set(gca, 'YTickLabel',[]); set(gca, 'YTickLabel',[]);
title('OL + CU'); title('OL + CU');
ax3 = subaxis(2, 2, 3) ax3 = subplot(2, 2, 3);
hold on; hold on;
plot(ht_3.t, 1e9*ht_3.Va); plot(ht_3.t, 1e9*ht_3.Va);
plot(ht_3.t, 1e9*ht_3.Vaf);
hold off; hold off;
xlabel('Time [s]'); xlabel('Time [s]');
ylabel('Displacement [nm]'); ylabel('Displacement [nm]');
title('CL + CU'); title('CL + CU');
ax4 = subaxis(2, 2, 4) ax4 = subplot(2, 2, 4);
hold on; hold on;
plot(ht_4.t, 1e9*ht_4.Va); plot(ht_4.t, 1e9*ht_4.Va);
plot(ht_4.t, 1e9*ht_4.Vaf);
hold off; hold off;
xlabel('Time [s]'); xlabel('Time [s]');
set(gca, 'YTickLabel',[]); set(gca, 'YTickLabel',[]);
@@ -88,7 +107,7 @@ linkaxes([ax1 ax2 ax3 ax4], 'xy');
figure; figure;
ax1 = subaxis(2, 2, 1) ax1 = subplot(2, 2, 1)
hold on; hold on;
plot(ht_1.t, ht_1.Vph); plot(ht_1.t, ht_1.Vph);
plot(ht_1.t, ht_1.Vpv); plot(ht_1.t, ht_1.Vpv);
@@ -97,7 +116,7 @@ ylabel('Voltage [V]');
set(gca, 'XTickLabel',[]); set(gca, 'XTickLabel',[]);
title('OL'); title('OL');
ax2 = subaxis(2, 2, 2) ax2 = subplot(2, 2, 2)
hold on; hold on;
plot(ht_2.t, ht_2.Vph); plot(ht_2.t, ht_2.Vph);
plot(ht_2.t, ht_2.Vpv); plot(ht_2.t, ht_2.Vpv);
@@ -106,7 +125,7 @@ set(gca, 'XTickLabel',[]);
set(gca, 'YTickLabel',[]); set(gca, 'YTickLabel',[]);
title('OL + CU'); title('OL + CU');
ax3 = subaxis(2, 2, 3) ax3 = subplot(2, 2, 3)
hold on; hold on;
plot(ht_3.t, ht_3.Vph); plot(ht_3.t, ht_3.Vph);
plot(ht_3.t, ht_3.Vpv); plot(ht_3.t, ht_3.Vpv);
@@ -115,7 +134,7 @@ xlabel('Time [s]');
ylabel('Voltage [V]'); ylabel('Voltage [V]');
title('CL + CU'); title('CL + CU');
ax4 = subaxis(2, 2, 4) ax4 = subplot(2, 2, 4)
hold on; hold on;
plot(ht_4.t, ht_4.Vph); plot(ht_4.t, ht_4.Vph);
plot(ht_4.t, ht_4.Vpv); plot(ht_4.t, ht_4.Vpv);

View File

@@ -4,6 +4,8 @@ clear; close all; clc;
%% Intialize Laplace variable %% Intialize Laplace variable
s = zpk('s'); s = zpk('s');
addpath('./mat/');
fs = 1e4; fs = 1e4;
Ts = 1/fs; Ts = 1/fs;
freqs = logspace(1, 3, 1000); freqs = logspace(1, 3, 1000);
@@ -123,6 +125,8 @@ legend();
% #+name: tab:gain_4qd % #+name: tab:gain_4qd
% #+attr_latex: :environment tabularx :width 0.5\linewidth :align lX
% #+attr_latex: :center t :booktabs t :float t
% #+caption: Identified Gain of the 4 quadrant diode % #+caption: Identified Gain of the 4 quadrant diode
% #+RESULTS: % #+RESULTS:
% | Horizontal [V/rad] | Vertical [V/rad] | % | Horizontal [V/rad] | Vertical [V/rad] |