Compare commits

...

13 Commits

Author SHA1 Message Date
d3f8f1cc4e Add license file 2021-09-10 11:07:58 +02:00
86a72b9ee7 Rework authors 2021-09-10 11:07:46 +02:00
3e39eadc12 Rework main page 2021-09-10 11:07:38 +02:00
2fc62f5deb Rename Matlab files 2021-09-10 11:06:25 +02:00
7f03d4c2ac Rename tikz file 2021-09-10 11:05:43 +02:00
8457e33e26 Rename paper files 2021-09-10 11:05:29 +02:00
ebdde7b4b7 Simlink readme.org 2021-04-28 18:01:04 +02:00
44d82fb66a Remove margin of main page 2020-12-07 11:50:14 +01:00
54ab59a00c Use online CSS and JS 2020-11-12 10:42:27 +01:00
ef78808a52 Add Mohit as author 2020-10-26 21:36:20 +01:00
92f78dda18 Update paper with new figures 2020-10-25 10:05:56 +01:00
6923496e4f Update figure using tiledlayout and nexttile 2020-10-25 10:01:53 +01:00
a0394c8136 Update index page 2020-10-05 18:15:52 +02:00
112 changed files with 674 additions and 8883 deletions

21
LICENSE.txt Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Dehaeze Thomas
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,184 +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; }
pre {background-color:#FFFFFF;}
pre span.org-builtin {color:#006FE0;font-weight:bold;}
pre span.org-string {color:#008000;}
pre span.org-doc {color:#008000;}
pre span.org-keyword {color:#0000FF;}
pre span.org-variable-name {color:#BA36A5;}
pre span.org-function-name {color:#006699;}
pre span.org-type {color:#6434A3;}
pre span.org-preprocessor {color:#808080;font-weight:bold;}
pre span.org-constant {color:#D0372D;}
pre span.org-comment-delimiter {color:#8D8D84;}
pre span.org-comment {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-1 {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-2 {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-3 {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-4 {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-5 {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-6 {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-7 {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-8 {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-9 {color:#8D8D84;font-style:italic}
pre span.org-rainbow-delimiters-depth-1 {color:#707183;}
pre span.org-rainbow-delimiters-depth-2 {color:#7388d6;}
pre span.org-rainbow-delimiters-depth-3 {color:#909183;}
pre span.org-rainbow-delimiters-depth-4 {color:#709870;}
pre span.org-rainbow-delimiters-depth-5 {color:#907373;}
pre span.org-rainbow-delimiters-depth-6 {color:#6276ba;}
pre span.org-rainbow-delimiters-depth-7 {color:#858580;}
pre span.org-rainbow-delimiters-depth-8 {color:#80a880;}
pre span.org-rainbow-delimiters-depth-9 {color:#887070;}
pre span.org-sh-quoted-exec {color:#FF1493;}
pre span.org-diff-added {color:#008000;}
pre span.org-diff-changed {color:#0000FF;}
pre span.org-diff-header {color:#800000;}
pre span.org-diff-hunk-header {color:#990099;}
pre span.org-diff-none {color:#545454;}
pre span.org-diff-removed {color:#A60000;}

File diff suppressed because it is too large Load Diff

View File

@@ -3,55 +3,77 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-10-03 sam. 19:04 -->
<!-- 2021-09-10 ven. 11:07 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Robust and Optimal Sensor Fusion</title>
<meta name="generator" content="Org mode" />
<title>Robust and Optimal Sensor Fusion using Complementary Filters</title>
<meta name="author" content="Thomas Dehaeze" />
<link rel="stylesheet" type="text/css" href="css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="css/readtheorg.css"/>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/jquery.stickytableheaders.min.js"></script>
<script src="js/readtheorg.js"></script>
<meta name="generator" content="Org Mode" />
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
<style> #content {margin: auto;} </style>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="../index.html"> UP </a>
|
<a accesskey="H" href="../index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Robust and Optimal Sensor Fusion
</div><div id="content" class="content">
<h1 class="title">Robust and Optimal Sensor Fusion using Complementary Filters
<br />
<span class="subtitle">Dehaeze Thomas and Collette Christophe</span>
</h1>
<div id="outline-container-org0ec4732" class="outline-2">
<h2 id="org0ec4732">Paper</h2>
<div class="outline-text-2" id="text-org0ec4732">
<blockquote>
<p>
The PDF version of the paper is accessible <a href="paper/paper.pdf">here</a>.
<b>Abstract</b>:
</p>
</blockquote>
<div id="outline-container-orga601f2f" class="outline-2">
<h2 id="orga601f2f">Paper (<a href="paper/dehaeze22_optim_robus_compl_filte.pdf">link</a>)</h2>
<div class="outline-text-2" id="text-orga601f2f">
<p>
The paper has been created <a href="https://orgmode.org/">Org Mode</a> (generating <a href="https://www.latex-project.org/">LaTeX</a> code) under <a href="https://www.gnu.org/software/emacs/">Emacs</a>.
</p>
</div>
</div>
<div id="outline-container-orge418504" class="outline-2">
<h2 id="orge418504">Matlab Scripts</h2>
<div class="outline-text-2" id="text-orge418504">
<div id="outline-container-orgd50e329" class="outline-2">
<h2 id="orgd50e329">Matlab Scripts (<a href="matlab/dehaeze22_optim_robus_compl_filte_matlab.html">link</a>)</h2>
<div class="outline-text-2" id="text-orgd50e329">
<p>
The Matlab scripts that permits to obtain all the results presented in the paper are accessible <a href="matlab/index.html">here</a>.
All the <a href="https://fr.mathworks.com/">Matlab</a> code that was used for the paper are accessible so that all the results are reproducible.
</p>
</div>
</div>
<div id="outline-container-org99adac0" class="outline-2">
<h2 id="org99adac0">Tikz Figures</h2>
<div class="outline-text-2" id="text-org99adac0">
<div id="outline-container-org3b999bd" class="outline-2">
<h2 id="org3b999bd">Tikz Figures (<a href="tikz/dehaeze22_optim_robus_compl_filte_tikz.html">link</a>)</h2>
<div class="outline-text-2" id="text-org3b999bd">
<p>
All the figures in the paper are generated using <a href="https://sourceforge.net/projects/pgf/">TikZ</a>. The code snippets that was used to generate the figures are accessible <a href="tikz/index.html">here</a>.
All the figures for the paper have been generated using <a href="https://sourceforge.net/projects/pgf/">TikZ</a>.
</p>
</div>
</div>
<div id="outline-container-org870b921" class="outline-2">
<h2 id="org870b921">Cite this paper</h2>
<div class="outline-text-2" id="text-org870b921">
<p>
To cite this paper use the following bibtex code.
</p>
<div class="org-src-container">
<pre class="src src-bibtex">
</pre>
</div>
<p>
You can also use the formatted citation below.
</p>
<blockquote>
nil</blockquote>
</div>
</div>
</div>
</body>
</html>

View File

@@ -1,35 +1,50 @@
#+TITLE: Robust and Optimal Sensor Fusion
#+TITLE: Robust and Optimal Sensor Fusion using Complementary Filters
:DRAWER:
#+SUBTITLE: Dehaeze Thomas and Collette Christophe
#+HTML_LINK_HOME: ../index.html
#+HTML_LINK_UP: ../index.html
#+HTML_LINK_UP: ../index.html
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
#+HTML_HEAD: <style> #content {margin: auto;} </style>
#+OPTIONS: toc:nil
#+OPTIONS: html-postamble:nil
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/readtheorg.css"/>
#+HTML_HEAD: <script src="js/jquery.min.js"></script>
#+HTML_HEAD: <script src="js/bootstrap.min.js"></script>
#+HTML_HEAD: <script src="js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script src="js/readtheorg.js"></script>
:END:
* Paper
#+begin_quote
*Abstract*:
#+end_quote
* Paper ([[file:paper/dehaeze22_optim_robus_compl_filte.pdf][link]])
:PROPERTIES:
:UNNUMBERED: t
:END:
The PDF version of the paper is accessible [[file:paper/paper.pdf][here]].
The paper has been created [[https://orgmode.org/][Org Mode]] (generating [[https://www.latex-project.org/][LaTeX]] code) under [[https://www.gnu.org/software/emacs/][Emacs]].
* Matlab Scripts
* Matlab Scripts ([[file:matlab/dehaeze22_optim_robus_compl_filte_matlab.org][link]])
:PROPERTIES:
:UNNUMBERED: t
:END:
The Matlab scripts that permits to obtain all the results presented in the paper are accessible [[file:matlab/index.org][here]].
All the [[https://fr.mathworks.com/][Matlab]] code that was used for the paper are accessible so that all the results are reproducible.
* Tikz Figures
* Tikz Figures ([[file:tikz/dehaeze22_optim_robus_compl_filte_tikz.org][link]])
:PROPERTIES:
:UNNUMBERED: t
:END:
All the figures in the paper are generated using [[https://sourceforge.net/projects/pgf/][TikZ]]. The code snippets that was used to generate the figures are accessible [[file:tikz/index.org][here]].
All the figures for the paper have been generated using [[https://sourceforge.net/projects/pgf/][TikZ]].
* Cite this paper
:PROPERTIES:
:UNNUMBERED: t
:END:
To cite this paper use the following bibtex code.
#+begin_src bibtex
#+end_src
You can also use the formatted citation below.
#+begin_quote
#+end_quote

98
journal/.latexmkrc Normal file
View File

@@ -0,0 +1,98 @@
#!/bin/env perl
# Shebang is only to get syntax highlighting right across GitLab, GitHub and IDEs.
# This file is not meant to be run, but read by `latexmk`.
# ======================================================================================
# Perl `latexmk` configuration file
# ======================================================================================
# ======================================================================================
# PDF Generation/Building/Compilation
# ======================================================================================
@default_files=('dehaeze22_optim_robus_compl_filte.tex');
# PDF-generating modes are:
# 1: pdflatex, as specified by $pdflatex variable (still largely in use)
# 2: postscript conversion, as specified by the $ps2pdf variable (useless)
# 3: dvi conversion, as specified by the $dvipdf variable (useless)
# 4: lualatex, as specified by the $lualatex variable (best)
# 5: xelatex, as specified by the $xelatex variable (second best)
$pdf_mode = 1;
# Treat undefined references and citations as well as multiply defined references as
# ERRORS instead of WARNINGS.
# This is only checked in the *last* run, since naturally, there are undefined references
# in initial runs.
# This setting is potentially annoying when debugging/editing, but highly desirable
# in the CI pipeline, where such a warning should result in a failed pipeline, since the
# final document is incomplete/corrupted.
#
# However, I could not eradicate all warnings, so that `latexmk` currently fails with
# this option enabled.
# Specifically, `microtype` fails together with `fontawesome`/`fontawesome5`, see:
# https://tex.stackexchange.com/a/547514/120853
# The fix in that answer did not help.
# Setting `verbose=silent` to mute `microtype` warnings did not work.
# Switching between `fontawesome` and `fontawesome5` did not help.
$warnings_as_errors = 0;
# Show used CPU time. Looks like: https://tex.stackexchange.com/a/312224/120853
$show_time = 1;
# Default is 5; we seem to need more owed to the complexity of the document.
# Actual documents probably don't need this many since they won't use all features,
# plus won't be compiling from cold each time.
$max_repeat=7;
# --shell-escape option (execution of code outside of latex) is required for the
#'svg' package.
# It converts raw SVG files to the PDF+PDF_TEX combo using InkScape.
#
# SyncTeX allows to jump between source (code) and output (PDF) in IDEs with support
# (many have it). A value of `1` is enabled (gzipped), `-1` is enabled but uncompressed,
# `0` is off.
# Testing in VSCode w/ LaTeX Workshop only worked for the compressed version.
# Adjust this as needed. Of course, only relevant for local use, no effect on a remote
# CI pipeline (except for slower compilation, probably).
#
# %O and %S will forward Options and the Source file, respectively, given to latexmk.
#
# `set_tex_cmds` applies to all *latex commands (latex, xelatex, lualatex, ...), so
# no need to specify these each. This allows to simply change `$pdf_mode` to get a
# different engine. Check if this works with `latexmk --commands`.
set_tex_cmds("--shell-escape -interaction=nonstopmode --synctex=1 %O %S");
# Use default pdf viewer
$pdf_previewer = 'zathura';
# option 2 is same as 1 (run biber when necessary), but also deletes the
# regeneratable bbl-file in a clenaup (`latexmk -c`). Do not use if original
# bib file is not available!
$bibtex_use = 1; # default: 1
# Change default `biber` call, help catch errors faster/clearer. See
# https://web.archive.org/web/20200526101657/https://www.semipol.de/2018/06/12/latex-best-practices.html#database-entries
$bibtex = "bibtex %S";
# ======================================================================================
# Auxiliary Files
# ======================================================================================
# Let latexmk know about generated files, so they can be used to detect if a
# rerun is required, or be deleted in a cleanup.
# loe: List of Examples (KOMAScript)
# lol: List of Listings (`listings` and `minted` packages)
# run.xml: biber runs
# glg: glossaries log
# glstex: generated from glossaries-extra
push @generated_exts, 'loe', 'lol', 'run.xml', 'glg', 'glstex';
# Also delete the *.glstex files from package glossaries-extra. Problem is,
# that that package generates files of the form "basename-digit.glstex" if
# multiple glossaries are present. Latexmk looks for "basename.glstex" and so
# does not find those. For that purpose, use wildcard.
# Also delete files generated by gnuplot/pgfplots contour plots
# (.dat, .script, .table).
$clean_ext = "%R-*.glstex %R_contourtmp*.*";

View File

@@ -1,25 +1,15 @@
#+TITLE: Optimal and Robust Sensor Fusion
#+TITLE: Optimal and Robust Sensor Fusion using Complementary Filters
:DRAWER:
#+LATEX_CLASS: IEEEtran
#+LATEX_CLASS_OPTIONS: [conference]
#+LATEX_CLASS_OPTIONS: [10pt,final,journal,a4paper]
#+OPTIONS: toc:nil todo:nil
#+STARTUP: overview
#+DATE: {{{time(%Y-%m-%d)}}}
#+AUTHOR: @@latex:\IEEEauthorblockN{Dehaeze Thomas}@@
#+AUTHOR: @@latex:\IEEEauthorblockA{\textit{European Synchrotron Radiation Facility} \\@@
#+AUTHOR: @@latex:Grenoble, France\\@@
#+AUTHOR: @@latex:\textit{Precision Mechatronics Laboratory} \\@@
#+AUTHOR: @@latex:\textit{University of Liege}, Belgium \\@@
#+AUTHOR: @@latex:thomas.dehaeze@esrf.fr@@
#+AUTHOR: @@latex:}\and@@
#+AUTHOR: @@latex:\IEEEauthorblockN{Collette Christophe}@@
#+AUTHOR: @@latex:\IEEEauthorblockA{\textit{BEAMS Department}\\@@
#+AUTHOR: @@latex:\textit{Free University of Brussels}, Belgium\\@@
#+AUTHOR: @@latex:\textit{Precision Mechatronics Laboratory} \\@@
#+AUTHOR: @@latex:\textit{University of Liege}, Belgium \\@@
#+AUTHOR: @@latex:ccollett@ulb.ac.be@@
#+AUTHOR: @@latex:\author{Thomas~Dehaeze, Mohit~Verma, and~Christophe~Collette@@
#+AUTHOR: @@latex:\thanks{The authors are with the Precision Mechatronics Laboratory at the University of Liege, Belgium.}@@
#+AUTHOR: @@latex:\thanks{Corresponding author: thomas.dehaeze@esrf.fr}@@
#+AUTHOR: @@latex:}@@
#+LATEX_HEADER: \IEEEoverridecommandlockouts
@@ -38,40 +28,44 @@
#+LATEX_HEADER_EXTRA: \usepackage{showframe}
#+LATEX_HEADER: \def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
\bibliographystyle{IEEEtran}
:END:
* LaTeX Config :noexport:
#+begin_src latex :tangle config.tex
#+end_src
* Build :noexport:
#+NAME: startblock
#+BEGIN_SRC emacs-lisp :results none
(add-to-list 'org-latex-classes
'("IEEEtran"
"\\documentclass{IEEEtran}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
)
(add-to-list 'org-latex-classes
'("IEEEtran"
"\\documentclass{IEEEtran}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
)
(defun delete-org-comments (backend)
(loop for comment in (reverse (org-element-map (org-element-parse-buffer)
'comment 'identity))
do
(setf (buffer-substring (org-element-property :begin comment)
(org-element-property :end comment))
"")))
;; Remove automatic org headings
(defun my-latex-filter-removeOrgAutoLabels (text backend info)
"Org-mode automatically generates labels for headings despite explicit use of `#+LABEL`. This filter forcibly removes all automatically generated org-labels in headings."
(when (org-export-derived-backend-p backend 'latex)
(replace-regexp-in-string "\\\\label{sec:org[a-f0-9]+}\n" "" text)))
;; add to export hook
(add-hook 'org-export-before-processing-hook 'delete-org-comments)
(add-to-list 'org-export-filter-headline-functions
'my-latex-filter-removeOrgAutoLabels)
;; Remove hypersetup
(setq org-latex-with-hyperref nil)
;; Automatic delete org org-comments
(defun delete-org-comments (backend)
(loop for comment in (reverse (org-element-map (org-element-parse-buffer)
'comment 'identity))
do
(setf (buffer-substring (org-element-property :begin comment)
(org-element-property :end comment))
"")))
;; add to export hook
(add-hook 'org-export-before-processing-hook 'delete-org-comments)
;; Remove hypersetup
(setq org-latex-with-hyperref nil)
#+END_SRC
* Abstract :ignore:
@@ -87,6 +81,8 @@
* Introduction
<<sec:introduction>>
cite:mahony08_nonlin_compl_filter_special_orthog_group
- Section ref:sec:optimal_fusion
- Section ref:sec:robust_fusion
- Section ref:sec:optimal_robust_fusion
@@ -468,7 +464,7 @@ The synthesis objective is to:
- Minimize the $\mathcal{H}_2$ norm from $w$ to $(z_{2,1}, z_{2,2})$
#+name: fig:mixed_h2_hinf_synthesis
#+caption: Generalized plant $P_{\mathcal{H}_2/\matlcal{H}_\infty}$ used for the mixed $\mathcal{H}_2/\mathcal{H}_\infty$ synthesis of complementary filters
#+caption: Generalized plant $P_{\mathcal{H}_2/\mathcal{H}_\infty}$ used for the mixed $\mathcal{H}_2/\mathcal{H}_\infty$ synthesis of complementary filters
#+attr_latex: :scale 1
[[file:figs/mixed_h2_hinf_synthesis.pdf]]
@@ -511,4 +507,10 @@ The synthesis objective is to:
* Acknowledgment
* Bibliography :ignore:
\bibliographystyle{IEEEtran}
\bibliography{ref}
* Local Variables :noexport:
# Local Variables:
# org-latex-packages-alist: nil
# End:

View File

@@ -1,6 +1,6 @@
% Created 2020-10-05 lun. 15:33
% Created 2021-09-10 ven. 11:01
% Intended LaTeX compiler: pdflatex
\documentclass[conference]{IEEEtran}
\documentclass[10pt,final,journal,a4paper]{IEEEtran}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
@@ -14,12 +14,6 @@
\usepackage{amssymb}
\usepackage{capt-of}
\usepackage{hyperref}
\usepackage[most]{tcolorbox}
\usepackage{bm}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{array}
\usepackage{siunitx}
\IEEEoverridecommandlockouts
\usepackage{cite}
\usepackage{amsmath,amssymb,amsfonts}
@@ -34,9 +28,9 @@
\renewcommand{\citedash}{--}
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
\usepackage{showframe}
\author{\IEEEauthorblockN{Dehaeze Thomas} \IEEEauthorblockA{\textit{European Synchrotron Radiation Facility} \\ Grenoble, France\\ \textit{Precision Mechatronics Laboratory} \\ \textit{University of Liege}, Belgium \\ thomas.dehaeze@esrf.fr }\and \IEEEauthorblockN{Collette Christophe} \IEEEauthorblockA{\textit{BEAMS Department}\\ \textit{Free University of Brussels}, Belgium\\ \textit{Precision Mechatronics Laboratory} \\ \textit{University of Liege}, Belgium \\ ccollett@ulb.ac.be }}
\date{2020-10-05}
\title{Optimal and Robust Sensor Fusion}
\author{\author{Thomas~Dehaeze, Mohit~Verma, and~Christophe~Collette \thanks{The authors are with the Precision Mechatronics Laboratory at the University of Liege, Belgium.} \thanks{Corresponding author: thomas.dehaeze@esrf.fr} }}
\date{2021-09-10}
\title{Optimal and Robust Sensor Fusion using Complementary Filters}
\begin{document}
\maketitle
@@ -50,9 +44,10 @@ Complementary Filters, Sensor Fusion, H-Infinity Synthesis
\end{IEEEkeywords}
\section{Introduction}
\label{sec:org26a7400}
\label{sec:introduction}
\cite{mahony08_nonlin_compl_filter_special_orthog_group}
\begin{itemize}
\item Section \ref{sec:optimal_fusion}
\item Section \ref{sec:robust_fusion}
@@ -61,11 +56,9 @@ Complementary Filters, Sensor Fusion, H-Infinity Synthesis
\end{itemize}
\section{Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis}
\label{sec:org49e80fd}
\label{sec:optimal_fusion}
\subsection{Sensor Model}
\label{sec:org9555932}
Let's consider a sensor measuring a physical quantity \(x\) (Figure \ref{fig:sensor_model_noise}).
The sensor has an internal dynamics which is here modelled with a Linear Time Invariant (LTI) system transfer function \(G_i(s)\).
@@ -96,19 +89,18 @@ In order to obtain an estimate \(\hat{x}_i\) of \(x\), a model \(\hat{G}_i\) of
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/sensor_model_noise.pdf}
\includegraphics[scale=1,scale=1]{figs/sensor_model_noise.pdf}
\caption{\label{fig:sensor_model_noise}Sensor Model}
\end{figure}
\subsection{Sensor Fusion Architecture}
\label{sec:orga12ae12}
Let's now consider two sensors measuring the same physical quantity \(x\) but with different dynamics \((G_1, G_2)\) and noise characteristics \((N_1, N_2)\) (Figure \ref{fig:sensor_fusion_noise_arch}).
The noise sources \(\tilde{n}_1\) and \(\tilde{n}_2\) are considered to be uncorrelated.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/sensor_fusion_noise_arch.pdf}
\includegraphics[scale=1,scale=1]{figs/sensor_fusion_noise_arch.pdf}
\caption{\label{fig:sensor_fusion_noise_arch}Sensor Fusion Architecture with sensor noise}
\end{figure}
@@ -138,7 +130,6 @@ In such case, the super sensor estimate \(\hat{x}\) is equal to \(x\) plus the n
\end{equation}
\subsection{Super Sensor Noise}
\label{sec:org924b750}
Let's note \(n\) the super sensor noise.
\begin{equation}
n = \left( H_1 N_1 \right) \tilde{n}_1 + \left( H_2 N_2 \right) \tilde{n}_2
@@ -152,7 +143,6 @@ As the noise of both sensors are considered to be uncorrelated, the PSD of the s
It is clear that the PSD of the super sensor depends on the norm of the complementary filters.
\subsection{\(\mathcal{H}_2\) Synthesis of Complementary Filters}
\label{sec:org042a601}
The goal is to design \(H_1(s)\) and \(H_2(s)\) such that the effect of the noise sources \(\tilde{n}_1\) and \(\tilde{n}_2\) has the smallest possible effect on the noise \(n\) of the estimation \(\hat{x}\).
And the goal is the minimize the Root Mean Square (RMS) value of \(n\):
@@ -191,67 +181,63 @@ We then have that the \(\mathcal{H}_2\) synthesis applied on \(P_{\mathcal{H}_2}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/h_two_optimal_fusion.pdf}
\includegraphics[scale=1,scale=1]{figs/h_two_optimal_fusion.pdf}
\caption{\label{fig:h_two_optimal_fusion}Generalized plant \(P_{\mathcal{H}_2}\) used for the \(\mathcal{H}_2\) synthesis of complementary filters}
\end{figure}
\subsection{Example}
\label{sec:org98c54c2}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/sensors_nominal_dynamics.pdf}
\includegraphics[scale=1,scale=1]{figs/sensors_nominal_dynamics.pdf}
\caption{\label{fig:sensors_nominal_dynamics}Sensor nominal dynamics from the velocity of the object to the output voltage}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/sensors_noise.pdf}
\includegraphics[scale=1,scale=1]{figs/sensors_noise.pdf}
\caption{\label{fig:sensors_noise}Amplitude spectral density of the sensors \(\sqrt{\Phi_{n_i}(\omega)} = |N_i(j\omega)|\)}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/htwo_comp_filters.pdf}
\includegraphics[scale=1,scale=1]{figs/htwo_comp_filters.pdf}
\caption{\label{fig:htwo_comp_filters}Obtained complementary filters using the \(\mathcal{H}_2\) Synthesis}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/psd_sensors_htwo_synthesis.pdf}
\includegraphics[scale=1,scale=1]{figs/psd_sensors_htwo_synthesis.pdf}
\caption{\label{fig:psd_sensors_htwo_synthesis}Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the optimally fused signal}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/super_sensor_time_domain_h2.pdf}
\includegraphics[scale=1,scale=1]{figs/super_sensor_time_domain_h2.pdf}
\caption{\label{fig:super_sensor_time_domain_h2}Noise of individual sensors and noise of the super sensor}
\end{figure}
\subsection{Robustness Problem}
\label{sec:org81a0772}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/sensors_nominal_dynamics_and_uncertainty.pdf}
\includegraphics[scale=1,scale=1]{figs/sensors_nominal_dynamics_and_uncertainty.pdf}
\caption{\label{fig:sensors_nominal_dynamics_and_uncertainty}Nominal Sensor Dynamics \(\hat{G}_i\) (solid lines) as well as the spread of the dynamical uncertainty (background color)}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/super_sensor_dynamical_uncertainty_H2.pdf}
\includegraphics[scale=1,scale=1]{figs/super_sensor_dynamical_uncertainty_H2.pdf}
\caption{\label{fig:super_sensor_dynamical_uncertainty_H2}Super sensor dynamical uncertainty when using the \(\mathcal{H}_2\) Synthesis}
\end{figure}
\section{Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis}
\label{sec:org78ced60}
\label{sec:robust_fusion}
\subsection{Representation of Sensor Dynamical Uncertainty}
\label{sec:org9df3b01}
In Section \ref{sec:optimal_fusion}, the model \(\hat{G}_i(s)\) of the sensor was considered to be perfect.
In reality, there are always uncertainty (neglected dynamics) associated with the estimation of the sensor dynamics.
@@ -266,12 +252,11 @@ The sensor can then be represented as shown in Figure \ref{fig:sensor_model_unce
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/sensor_model_uncertainty.pdf}
\includegraphics[scale=1,scale=1]{figs/sensor_model_uncertainty.pdf}
\caption{\label{fig:sensor_model_uncertainty}Sensor Model including Dynamical Uncertainty}
\end{figure}
\subsection{Sensor Fusion Architecture}
\label{sec:orgf4531ff}
Let's consider the sensor fusion architecture shown in Figure \ref{fig:sensor_fusion_arch_uncertainty} where the dynamical uncertainties of both sensors are included.
The super sensor estimate is then:
@@ -291,12 +276,11 @@ As \(H_1\) and \(H_2\) are complementary filters, we finally have:
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/sensor_fusion_arch_uncertainty.pdf}
\includegraphics[scale=1,scale=1]{figs/sensor_fusion_arch_uncertainty.pdf}
\caption{\label{fig:sensor_fusion_arch_uncertainty}Sensor Fusion Architecture with sensor model uncertainty}
\end{figure}
\subsection{Super Sensor Dynamical Uncertainty}
\label{sec:orgf5bb33e}
The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at frequency \(\omega\) is bounded in the complex plane by a circle centered on 1 and with a radius equal to \(|W_1(j\omega) H_1(j\omega)| + |W_2(j\omega) H_2(j\omega)|\) as shown in Figure \ref{fig:uncertainty_set_super_sensor}.
@@ -304,14 +288,13 @@ And we can see that the dynamical uncertainty of the super sensor is equal to th
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/uncertainty_set_super_sensor.pdf}
\includegraphics[scale=1,scale=1]{figs/uncertainty_set_super_sensor.pdf}
\caption{\label{fig:uncertainty_set_super_sensor}Super Sensor model uncertainty displayed in the complex plane}
\end{figure}
At frequencies where \(\left|W_i(j\omega)\right| > 1\) the uncertainty exceeds \(100\%\) and sensor fusion is impossible.
\subsection{\(\mathcal{H_\infty}\) Synthesis of Complementary Filters}
\label{sec:orgf07efa7}
In order for the fusion to be ``robust'', meaning no phase drop will be induced in the super sensor dynamics,
The goal is to design two complementary filters \(H_1(s)\) and \(H_2(s)\) such that the super sensor noise uncertainty is kept reasonably small.
@@ -352,51 +335,48 @@ The \(\mathcal{H}_\infty\) norm of Eq. \eqref{eq:Hinf_norm} is equals to \(\sigm
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/h_infinity_robust_fusion.pdf}
\includegraphics[scale=1,scale=1]{figs/h_infinity_robust_fusion.pdf}
\caption{\label{fig:h_infinity_robust_fusion}Generalized plant \(P_{\mathcal{H}_\infty}\) used for the \(\mathcal{H}_\infty\) synthesis of complementary filters}
\end{figure}
\subsection{Example}
\label{sec:org0ca6ef9}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/sensors_uncertainty_weights.pdf}
\includegraphics[scale=1,scale=1]{figs/sensors_uncertainty_weights.pdf}
\caption{\label{fig:sensors_uncertainty_weights}Magnitude of the multiplicative uncertainty weights \(|W_i(j\omega)|\)}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/weight_uncertainty_bounds_Wu.pdf}
\includegraphics[scale=1,scale=1]{figs/weight_uncertainty_bounds_Wu.pdf}
\caption{\label{fig:weight_uncertainty_bounds_Wu}Uncertainty region of the two sensors as well as the wanted maximum uncertainty of the super sensor (dashed lines)}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/hinf_comp_filters.pdf}
\includegraphics[scale=1,scale=1]{figs/hinf_comp_filters.pdf}
\caption{\label{fig:hinf_comp_filters}Obtained complementary filters using the \(\mathcal{H}_\infty\) Synthesis}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/super_sensor_dynamical_uncertainty_Hinf.pdf}
\includegraphics[scale=1,scale=1]{figs/super_sensor_dynamical_uncertainty_Hinf.pdf}
\caption{\label{fig:super_sensor_dynamical_uncertainty_Hinf}Super sensor dynamical uncertainty (solid curve) when using the \(\mathcal{H}_\infty\) Synthesis}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/psd_sensors_hinf_synthesis.pdf}
\includegraphics[scale=1,scale=1]{figs/psd_sensors_hinf_synthesis.pdf}
\caption{\label{fig:psd_sensors_hinf_synthesis}Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the \(\mathcal{H}_\infty\) synthesis}
\end{figure}
\section{Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis}
\label{sec:orgf642e73}
\label{sec:optimal_robust_fusion}
\subsection{Sensor with noise and model uncertainty}
\label{sec:org8949812}
We wish now to combine the two previous synthesis, that is to say
The sensors are now modelled by a white noise with unitary PSD \(\tilde{n}_i\) shaped by a LTI transfer function \(N_i(s)\).
@@ -412,12 +392,11 @@ Multiplying by the inverse of the nominal model of the sensor dynamics gives an
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/sensor_model_noise_uncertainty.pdf}
\includegraphics[scale=1,scale=1]{figs/sensor_model_noise_uncertainty.pdf}
\caption{\label{fig:sensor_model_noise_uncertainty}Sensor Model including Noise and Dynamical Uncertainty}
\end{figure}
\subsection{Sensor Fusion Architecture}
\label{sec:orgcbc3d54}
For reason of space, the blocks \(\hat{G}_i\) and \(\hat{G}_i^{-1}\) are omitted.
@@ -439,12 +418,11 @@ The estimate \(\hat{x}\) of \(x\)
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/sensor_fusion_arch_full.pdf}
\includegraphics[scale=1,scale=1]{figs/sensor_fusion_arch_full.pdf}
\caption{\label{fig:sensor_fusion_arch_full}Super Sensor Fusion with both sensor noise and sensor model uncertainty}
\end{figure}
\subsection{Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis}
\label{sec:org9d3f160}
The synthesis objective is to generate two complementary filters \(H_1(s)\) and \(H_2(s)\) such that the uncertainty associated with the super sensor is kept reasonably small and such that the RMS value of super sensors noise is minimized.
@@ -474,59 +452,52 @@ The synthesis objective is to:
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/mixed_h2_hinf_synthesis.pdf}
\caption{\label{fig:mixed_h2_hinf_synthesis}Generalized plant \(P_{\mathcal{H}_2/\matlcal{H}_\infty}\) used for the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis of complementary filters}
\includegraphics[scale=1,scale=1]{figs/mixed_h2_hinf_synthesis.pdf}
\caption{\label{fig:mixed_h2_hinf_synthesis}Generalized plant \(P_{\mathcal{H}_2/\mathcal{H}_\infty}\) used for the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis of complementary filters}
\end{figure}
\subsection{Example}
\label{sec:org85f304b}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/htwo_hinf_comp_filters.pdf}
\includegraphics[scale=1,scale=1]{figs/htwo_hinf_comp_filters.pdf}
\caption{\label{fig:htwo_hinf_comp_filters}Obtained complementary filters after mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/psd_sensors_htwo_hinf_synthesis.pdf}
\includegraphics[scale=1,scale=1]{figs/psd_sensors_htwo_hinf_synthesis.pdf}
\caption{\label{fig:psd_sensors_htwo_hinf_synthesis}Power Spectral Density of the Super Sensor obtained with the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/super_sensor_time_domain_h2_hinf.pdf}
\includegraphics[scale=1,scale=1]{figs/super_sensor_time_domain_h2_hinf.pdf}
\caption{\label{fig:super_sensor_time_domain_h2_hinf}Noise of individual sensors and noise of the super sensor}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.pdf}
\includegraphics[scale=1,scale=1]{figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.pdf}
\caption{\label{fig:super_sensor_dynamical_uncertainty_Htwo_Hinf}Super sensor dynamical uncertainty (solid curve) when using the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis}
\end{figure}
\section{Experimental Validation}
\label{sec:org49bf34a}
\label{sec:experimental_validation}
\subsection{Experimental Setup}
\label{sec:orgdd8fce6}
\subsection{Sensor Noise and Dynamical Uncertainty}
\label{sec:org21add72}
\subsection{Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis}
\label{sec:org30521a3}
\subsection{Super Sensor Noise and Dynamical Uncertainty}
\label{sec:org86cde79}
\section{Conclusion}
\label{sec:org16245b7}
\label{sec:conclusion}
\section{Acknowledgment}
\label{sec:orgd992049}
\bibliographystyle{IEEEtran}
\bibliography{ref}
\end{document}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

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
};
}($));

File diff suppressed because one or more lines are too long

View File

@@ -1,19 +1,14 @@
#+TITLE: Robust and Optimal Sensor Fusion - Matlab Computation
:DRAWER:
#+HTML_LINK_HOME: ./index.html
#+HTML_LINK_UP: ./index.html
#+HTML_LINK_HOME: ../index.html
#+HTML_LINK_UP: ../index.html
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
#+BIND: org-latex-image-default-option "scale=1"
#+BIND: org-latex-image-default-width ""
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
#+HTML_HEAD: <script src="../js/jquery.min.js"></script>
#+HTML_HEAD: <script src="../js/bootstrap.min.js"></script>
#+HTML_HEAD: <script src="../js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script src="../js/readtheorg.js"></script>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/dreampulse/computer-modern-web-font/master/fonts.css">
#+STARTUP: overview
#+OPTIONS: toc:2
@@ -145,8 +140,10 @@ The true sensor dynamics has some uncertainty associated to it and described in
Both sensor dynamics in $[\frac{V}{m/s}]$ are shown in Figure [[fig:sensors_nominal_dynamics]].
#+begin_src matlab :exports none
figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
% Magnitude
ax1 = subplot(2,1,1);
ax1 = nexttile;
hold on;
plot(freqs, abs(squeeze(freqresp(G1, freqs, 'Hz'))), '-', 'DisplayName', '$G_1(j\omega)$');
plot(freqs, abs(squeeze(freqresp(G2, freqs, 'Hz'))), '-', 'DisplayName', '$G_2(j\omega)$');
@@ -156,7 +153,7 @@ Both sensor dynamics in $[\frac{V}{m/s}]$ are shown in Figure [[fig:sensors_nomi
hold off;
% Phase
ax2 = subplot(2,1,2);
ax2 = nexttile;
hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(G1, freqs, 'Hz'))), '-');
plot(freqs, 180/pi*angle(squeeze(freqresp(G2, freqs, 'Hz'))), '-');
@@ -165,6 +162,7 @@ Both sensor dynamics in $[\frac{V}{m/s}]$ are shown in Figure [[fig:sensors_nomi
ylim([-180 180]);
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
#+end_src
@@ -190,7 +188,7 @@ The true sensor dynamics $G_i(s)$ is then described by eqref:eq:sensor_dynamics_
The weights $W_i(s)$ representing the dynamical uncertainty are defined below and their magnitude is shown in Figure [[fig:sensors_uncertainty_weights]].
#+begin_src matlab
W1 = createWeight('n', 2, 'w0', 2*pi*3, 'G0', 2, 'G1', 0.1, 'Gc', 1) * ...
W1 = createWeight('n', 2, 'w0', 2*pi*3, 'G0', 2, 'G1', 0.1, 'Gc', 1) * ...
createWeight('n', 2, 'w0', 2*pi*1e3, 'G0', 1, 'G1', 4/0.1, 'Gc', 1/0.1);
W2 = createWeight('n', 2, 'w0', 2*pi*1e2, 'G0', 0.05, 'G1', 4, 'Gc', 1);
@@ -222,8 +220,10 @@ The bode plot of the sensors nominal dynamics as well as their defined dynamical
#+begin_src matlab :exports none
figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
% Magnitude
ax1 = subplot(2,1,1);
ax1 = nexttile;
hold on;
plotMagUncertainty(W1, freqs, 'G', G1, 'color_i', 1, 'DisplayName', '$G_1$');
plotMagUncertainty(W2, freqs, 'G', G2, 'color_i', 2, 'DisplayName', '$G_2$');
@@ -240,7 +240,7 @@ The bode plot of the sensors nominal dynamics as well as their defined dynamical
ylim([1e-2, 1e4])
% Phase
ax2 = subplot(2,1,2);
ax2 = nexttile;
hold on;
plotPhaseUncertainty(W1, freqs, 'G', G1, 'color_i', 1);
plotPhaseUncertainty(W2, freqs, 'G', G2, 'color_i', 2);
@@ -253,6 +253,7 @@ The bode plot of the sensors nominal dynamics as well as their defined dynamical
ylim([-180 180]);
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
#+end_src
@@ -473,9 +474,10 @@ Finally, $H_1(s)$ is defined as follows
The obtained complementary filters are shown in Figure [[fig:htwo_comp_filters]].
#+begin_src matlab :exports none
figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
% Magnitude
ax1 = subplot(2,1,1);
ax1 = nexttile;
hold on;
plot(freqs, abs(squeeze(freqresp(H1, freqs, 'Hz'))), 'DisplayName', '$H_1$');
plot(freqs, abs(squeeze(freqresp(H2, freqs, 'Hz'))), 'DisplayName', '$H_2$');
@@ -486,7 +488,7 @@ The obtained complementary filters are shown in Figure [[fig:htwo_comp_filters]]
legend('location', 'northeast', 'FontSize', 8);
% Phase
ax2 = subplot(2,1,2);
ax2 = nexttile;
hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(H1, freqs, 'Hz'))));
plot(freqs, 180/pi*angle(squeeze(freqresp(H2, freqs, 'Hz'))));
@@ -640,8 +642,10 @@ As a result the super sensor signal can not be used for feedback applications ab
Dphi_ss(abs(squeeze(freqresp(W2*H2, freqs, 'Hz'))) + abs(squeeze(freqresp(W1*H1, freqs, 'Hz'))) > 1) = 360;
figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
% Magnitude
ax1 = subplot(2,1,1);
ax1 = nexttile;
hold on;
plotMagUncertainty(W1, freqs, 'color_i', 1, 'DisplayName', '$1 + W_1 \Delta_1$');
plotMagUncertainty(W2, freqs, 'color_i', 2, 'DisplayName', '$1 + W_2 \Delta_2$');
@@ -657,7 +661,7 @@ As a result the super sensor signal can not be used for feedback applications ab
hold off;
% Phase
ax2 = subplot(2,1,2);
ax2 = nexttile;
hold on;
plotPhaseUncertainty(W1, freqs, 'color_i', 1);
plotPhaseUncertainty(W2, freqs, 'color_i', 2);
@@ -668,6 +672,7 @@ As a result the super sensor signal can not be used for feedback applications ab
ylim([-180 180]);
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
#+end_src
@@ -770,8 +775,10 @@ The uncertainty bounds of the two individual sensor as well as the wanted maximu
Dphi_Wu(abs(squeeze(freqresp(inv(Wu), freqs, 'Hz'))) > 1) = 360;
figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
% Magnitude
ax1 = subplot(2,1,1);
ax1 = nexttile;
hold on;
plotMagUncertainty(W1, freqs, 'color_i', 1, 'DisplayName', '$1 + W_1 \Delta_1$');
plotMagUncertainty(W2, freqs, 'color_i', 2, 'DisplayName', '$1 + W_2 \Delta_2$');
@@ -787,7 +794,7 @@ The uncertainty bounds of the two individual sensor as well as the wanted maximu
hold off;
% Phase
ax2 = subplot(2,1,2);
ax2 = nexttile;
hold on;
plotPhaseUncertainty(W1, freqs, 'color_i', 1);
plotPhaseUncertainty(W2, freqs, 'color_i', 2);
@@ -879,29 +886,31 @@ The obtained complementary filters as well as the wanted upper bounds are shown
#+begin_src matlab :exports none
figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = subplot(2,1,1);
% Magnitude
ax1 = nexttile;
hold on;
plot(freqs, 1./abs(squeeze(freqresp(Wu*W1, freqs, 'Hz'))), '--', 'DisplayName', '$1/|W_uW_1|$');
plot(freqs, 1./abs(squeeze(freqresp(Wu*W2, freqs, 'Hz'))), '--', 'DisplayName', '$1/|W_uW_2|$');
set(gca,'ColorOrderIndex',1)
plot(freqs, abs(squeeze(freqresp(H1, freqs, 'Hz'))), '-', 'DisplayName', '$|H_1|$');
plot(freqs, abs(squeeze(freqresp(H2, freqs, 'Hz'))), '-', 'DisplayName', '$|H_2|$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Magnitude');
set(gca, 'XTickLabel',[]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
ax2 = subplot(2,1,2);
% Phase
ax2 = nexttile;
hold on;
plot(freqs, 180/pi*phase(squeeze(freqresp(H1, freqs, 'Hz'))), '-');
plot(freqs, 180/pi*phase(squeeze(freqresp(H2, freqs, 'Hz'))), '-');
hold off;
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
set(gca, 'XScale', 'log');
yticks([-360:90:360]);
ylim([-90, 90]); yticks([-360:90:360]);
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
@@ -930,8 +939,10 @@ The $\mathcal{H}_\infty$ synthesis thus allows to design filters such that the s
Dphi_ss(abs(squeeze(freqresp(W2*H2, freqs, 'Hz'))) + abs(squeeze(freqresp(W1*H1, freqs, 'Hz'))) > 1) = 360;
figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
% Magnitude
ax1 = subplot(2,1,1);
ax1 = nexttile;
hold on;
plotMagUncertainty(W1, freqs, 'color_i', 1, 'DisplayName', '$1 + W_1 \Delta_1$');
plotMagUncertainty(W2, freqs, 'color_i', 2, 'DisplayName', '$1 + W_2 \Delta_2$');
@@ -951,7 +962,7 @@ The $\mathcal{H}_\infty$ synthesis thus allows to design filters such that the s
hold off;
% Phase
ax2 = subplot(2,1,2);
ax2 = nexttile;
hold on;
plotPhaseUncertainty(W1, freqs, 'color_i', 1);
plotPhaseUncertainty(W2, freqs, 'color_i', 2);
@@ -964,6 +975,7 @@ The $\mathcal{H}_\infty$ synthesis thus allows to design filters such that the s
ylim([-180 180]);
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
#+end_src
@@ -1126,31 +1138,31 @@ The obtained complementary filters are shown in Figure [[fig:htwo_hinf_comp_filt
#+begin_src matlab :exports none
figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = subplot(2,1,1);
% Magnitude
ax1 = nexttile;
hold on;
plot(freqs, 1./abs(squeeze(freqresp(Wu*W1, freqs, 'Hz'))), '--', 'DisplayName', '$1/|W_uW_1|$');
plot(freqs, 1./abs(squeeze(freqresp(Wu*W2, freqs, 'Hz'))), '--', 'DisplayName', '$1/|W_uW_2|$');
set(gca,'ColorOrderIndex',1)
plot(freqs, abs(squeeze(freqresp(H1, freqs, 'Hz'))), '-', 'DisplayName', '$H_1$');
plot(freqs, abs(squeeze(freqresp(H2, freqs, 'Hz'))), '-', 'DisplayName', '$H_2$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Magnitude');
set(gca, 'XTickLabel',[]);
ylabel('Magnitude'); set(gca, 'XTickLabel',[]);
ylim([1e-3, 2]);
legend('location', 'southeast', 'FontSize', 8);
ax2 = subplot(2,1,2);
% Phase
ax2 = nexttile;
hold on;
plot(freqs, 180/pi*phase(squeeze(freqresp(H1, freqs, 'Hz'))), '-');
plot(freqs, 180/pi*phase(squeeze(freqresp(H2, freqs, 'Hz'))), '-');
hold off;
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
set(gca, 'XScale', 'log');
yticks([-360:90:360]);
ylim([-90, 90]); yticks([-360:90:360]);
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
@@ -1283,8 +1295,10 @@ The uncertainty on the super sensor's dynamics is shown in Figure [[fig:super_se
Dphi_ss(abs(squeeze(freqresp(W2*H2, freqs, 'Hz'))) + abs(squeeze(freqresp(W1*H1, freqs, 'Hz'))) > 1) = 360;
figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
% Magnitude
ax1 = subplot(2,1,1);
ax1 = nexttile;
hold on;
plotMagUncertainty(W1, freqs, 'color_i', 1, 'DisplayName', '$1 + W_1 \Delta_1$');
plotMagUncertainty(W2, freqs, 'color_i', 2, 'DisplayName', '$1 + W_2 \Delta_2$');
@@ -1304,7 +1318,7 @@ The uncertainty on the super sensor's dynamics is shown in Figure [[fig:super_se
hold off;
% Phase
ax2 = subplot(2,1,2);
ax2 = nexttile;
hold on;
plotPhaseUncertainty(W1, freqs, 'color_i', 1);
plotPhaseUncertainty(W2, freqs, 'color_i', 2);
@@ -1313,10 +1327,10 @@ The uncertainty on the super sensor's dynamics is shown in Figure [[fig:super_se
plot(freqs, Dphi_Wu, 'k--');
plot(freqs, -Dphi_Wu, 'k--');
set(gca,'xscale','log');
yticks(-180:90:180);
ylim([-180 180]);
ylim([-180 180]); yticks(-180:90:180);
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
#+end_src

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 99 KiB

View File

@@ -3,18 +3,13 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-10-05 lun. 15:08 -->
<!-- 2020-11-12 jeu. 10:42 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Robust and Optimal Sensor Fusion - Matlab Computation</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Thomas Dehaeze" />
<link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
<script src="../js/jquery.min.js"></script>
<script src="../js/bootstrap.min.js"></script>
<script src="../js/jquery.stickytableheaders.min.js"></script>
<script src="../js/readtheorg.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/dreampulse/computer-modern-web-font/master/fonts.css">
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
<script>MathJax = {
tex: {
tags: 'ams',
@@ -26,59 +21,59 @@
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="./index.html"> UP </a>
<a accesskey="h" href="../index.html"> UP </a>
|
<a accesskey="H" href="./index.html"> HOME </a>
<a accesskey="H" href="../index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Robust and Optimal Sensor Fusion - Matlab Computation</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org0a492b7">1. Sensor Description</a>
<li><a href="#orgb558a2f">1. Sensor Description</a>
<ul>
<li><a href="#org9575585">1.1. Sensor Dynamics</a></li>
<li><a href="#orgec8c81d">1.2. Sensor Model Uncertainty</a></li>
<li><a href="#org81d9a34">1.3. Sensor Noise</a></li>
<li><a href="#org4e23f6c">1.4. Save Model</a></li>
<li><a href="#org2e756d8">1.1. Sensor Dynamics</a></li>
<li><a href="#orgf266a4b">1.2. Sensor Model Uncertainty</a></li>
<li><a href="#orgb768f02">1.3. Sensor Noise</a></li>
<li><a href="#org426c21e">1.4. Save Model</a></li>
</ul>
</li>
<li><a href="#org2cab1a2">2. Introduction to Sensor Fusion</a>
<li><a href="#orgce0ac83">2. Introduction to Sensor Fusion</a>
<ul>
<li><a href="#org0cbc92d">2.1. Sensor Fusion Architecture</a></li>
<li><a href="#orge9e0bd4">2.2. Super Sensor Noise</a></li>
<li><a href="#orgefb4347">2.3. Super Sensor Dynamical Uncertainty</a></li>
<li><a href="#orgbb36114">2.1. Sensor Fusion Architecture</a></li>
<li><a href="#org3a4f4b8">2.2. Super Sensor Noise</a></li>
<li><a href="#org3f0594e">2.3. Super Sensor Dynamical Uncertainty</a></li>
</ul>
</li>
<li><a href="#org5896b60">3. Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis</a>
<li><a href="#org096192f">3. Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis</a>
<ul>
<li><a href="#orgf5a8a84">3.1. \(\mathcal{H}_2\) Synthesis</a></li>
<li><a href="#org72159df">3.2. Super Sensor Noise</a></li>
<li><a href="#org8ffba19">3.3. Discrepancy between sensor dynamics and model</a></li>
<li><a href="#org9188eae">3.1. \(\mathcal{H}_2\) Synthesis</a></li>
<li><a href="#org6d6d909">3.2. Super Sensor Noise</a></li>
<li><a href="#org850d99e">3.3. Discrepancy between sensor dynamics and model</a></li>
</ul>
</li>
<li><a href="#org26ea7b1">4. Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis</a>
<li><a href="#org6d1270a">4. Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis</a>
<ul>
<li><a href="#org8dfd9d2">4.1. Weighting Function used to bound the super sensor uncertainty</a></li>
<li><a href="#org7422ade">4.2. \(\mathcal{H}_\infty\) Synthesis</a></li>
<li><a href="#orga0267c6">4.3. Super sensor uncertainty</a></li>
<li><a href="#org979fede">4.4. Super sensor noise</a></li>
<li><a href="#orgda33992">4.5. Conclusion</a></li>
<li><a href="#orgc5a0221">4.1. Weighting Function used to bound the super sensor uncertainty</a></li>
<li><a href="#org334f826">4.2. \(\mathcal{H}_\infty\) Synthesis</a></li>
<li><a href="#org211e432">4.3. Super sensor uncertainty</a></li>
<li><a href="#org7672e0e">4.4. Super sensor noise</a></li>
<li><a href="#orgdcb47cf">4.5. Conclusion</a></li>
</ul>
</li>
<li><a href="#org15afe90">5. Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</a>
<li><a href="#org49a7cc2">5. Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</a>
<ul>
<li><a href="#org0f81a91">5.1. Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis</a></li>
<li><a href="#org417aabd">5.2. Obtained Super Sensor&rsquo;s noise</a></li>
<li><a href="#org2dce888">5.3. Obtained Super Sensor&rsquo;s Uncertainty</a></li>
<li><a href="#org47da78c">5.4. Conclusion</a></li>
<li><a href="#org7ed8ed7">5.1. Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis</a></li>
<li><a href="#orgfb839cf">5.2. Obtained Super Sensor&rsquo;s noise</a></li>
<li><a href="#orgb8596ac">5.3. Obtained Super Sensor&rsquo;s Uncertainty</a></li>
<li><a href="#orgfcfa8a2">5.4. Conclusion</a></li>
</ul>
</li>
<li><a href="#org0afe5ef">6. Matlab Functions</a>
<li><a href="#orgf267700">6. Matlab Functions</a>
<ul>
<li><a href="#orge81e522">6.1. <code>createWeight</code></a></li>
<li><a href="#org37ec2b4">6.2. <code>plotMagUncertainty</code></a></li>
<li><a href="#org9f73572">6.3. <code>plotPhaseUncertainty</code></a></li>
<li><a href="#org005db82">6.1. <code>createWeight</code></a></li>
<li><a href="#org816b32a">6.2. <code>plotMagUncertainty</code></a></li>
<li><a href="#orgddb3773">6.3. <code>plotPhaseUncertainty</code></a></li>
</ul>
</li>
</ul>
@@ -89,27 +84,27 @@
This document is arranged as follows:
</p>
<ul class="org-ul">
<li>Section <a href="#orgee25d07">1</a>: the sensors are described (dynamics, uncertainty, noise)</li>
<li>Section <a href="#orga64daad">2</a>: the sensor fusion architecture is described and the super sensor noise and dynamical uncertainty are derived</li>
<li>Section <a href="#orgdd6b9ce">3</a>: the \(\mathcal{H}_2\) synthesis is used to design complementary filters such that the RMS value of the super sensor&rsquo;s noise is minimized</li>
<li>Section <a href="#org5d93f37">4</a>: the \(\mathcal{H}_\infty\) synthesis is used to design complementary filters such that the super sensor&rsquo;s uncertainty is bonded to acceptable values</li>
<li>Section <a href="#org9f98c16">5</a>: the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis is used to both limit the super sensor&rsquo;s uncertainty and to lower the RMS value of the super sensor&rsquo;s noise</li>
<li>Section <a href="#orgf41dc8d">6</a>: Matlab functions used for the analysis are described</li>
<li>Section <a href="#org3cd5225">1</a>: the sensors are described (dynamics, uncertainty, noise)</li>
<li>Section <a href="#orge87db28">2</a>: the sensor fusion architecture is described and the super sensor noise and dynamical uncertainty are derived</li>
<li>Section <a href="#orgbaf748a">3</a>: the \(\mathcal{H}_2\) synthesis is used to design complementary filters such that the RMS value of the super sensor&rsquo;s noise is minimized</li>
<li>Section <a href="#orgea66128">4</a>: the \(\mathcal{H}_\infty\) synthesis is used to design complementary filters such that the super sensor&rsquo;s uncertainty is bonded to acceptable values</li>
<li>Section <a href="#org2aeafb3">5</a>: the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis is used to both limit the super sensor&rsquo;s uncertainty and to lower the RMS value of the super sensor&rsquo;s noise</li>
<li>Section <a href="#org50a28ec">6</a>: Matlab functions used for the analysis are described</li>
</ul>
<div id="outline-container-org0a492b7" class="outline-2">
<h2 id="org0a492b7"><span class="section-number-2">1</span> Sensor Description</h2>
<div id="outline-container-orgb558a2f" class="outline-2">
<h2 id="orgb558a2f"><span class="section-number-2">1</span> Sensor Description</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="orgee25d07"></a>
<a id="org3cd5225"></a>
</p>
<p>
In Figure <a href="#org35e2340">1</a> is shown a schematic of a sensor model that is used in the following study.
In Figure <a href="#orgd79f98f">1</a> is shown a schematic of a sensor model that is used in the following study.
In this example, the measured quantity \(x\) is the velocity of an object.
</p>
<table id="org2fe6194" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Description of signals in Figure <a href="#org35e2340">1</a></caption>
<table id="org5aafbb9" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Description of signals in Figure <a href="#orgd79f98f">1</a></caption>
<colgroup>
<col class="org-left" />
@@ -176,8 +171,8 @@ In this example, the measured quantity \(x\) is the velocity of an object.
</tbody>
</table>
<table id="org281ecb3" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> Description of Systems in Figure <a href="#org35e2340">1</a></caption>
<table id="org3780b2b" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> Description of Systems in Figure <a href="#orgd79f98f">1</a></caption>
<colgroup>
<col class="org-left" />
@@ -221,18 +216,18 @@ In this example, the measured quantity \(x\) is the velocity of an object.
</table>
<div id="org35e2340" class="figure">
<div id="orgd79f98f" class="figure">
<p><img src="figs-paper/sensor_model_noise_uncertainty.png" alt="sensor_model_noise_uncertainty.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Sensor Model</p>
</div>
</div>
<div id="outline-container-org9575585" class="outline-3">
<h3 id="org9575585"><span class="section-number-3">1.1</span> Sensor Dynamics</h3>
<div id="outline-container-org2e756d8" class="outline-3">
<h3 id="org2e756d8"><span class="section-number-3">1.1</span> Sensor Dynamics</h3>
<div class="outline-text-3" id="text-1-1">
<p>
<a id="org52415aa"></a>
<a id="org01c4832"></a>
Let&rsquo;s consider two sensors measuring the velocity of an object.
</p>
@@ -263,14 +258,14 @@ G2 = g_pos<span class="org-type">/</span>s<span class="org-type">/</span>(1 <spa
<p>
These nominal dynamics are also taken as the model of the sensor dynamics.
The true sensor dynamics has some uncertainty associated to it and described in section <a href="#orgf04439d">1.2</a>.
The true sensor dynamics has some uncertainty associated to it and described in section <a href="#org3943238">1.2</a>.
</p>
<p>
Both sensor dynamics in \([\frac{V}{m/s}]\) are shown in Figure <a href="#org2d1ef0b">2</a>.
Both sensor dynamics in \([\frac{V}{m/s}]\) are shown in Figure <a href="#org355b3fc">2</a>.
</p>
<div id="org2d1ef0b" class="figure">
<div id="org355b3fc" class="figure">
<p><img src="figs/sensors_nominal_dynamics.png" alt="sensors_nominal_dynamics.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Sensor nominal dynamics from the velocity of the object to the output voltage</p>
@@ -278,12 +273,12 @@ Both sensor dynamics in \([\frac{V}{m/s}]\) are shown in Figure <a href="#org2d1
</div>
</div>
<div id="outline-container-orgec8c81d" class="outline-3">
<h3 id="orgec8c81d"><span class="section-number-3">1.2</span> Sensor Model Uncertainty</h3>
<div id="outline-container-orgf266a4b" class="outline-3">
<h3 id="orgf266a4b"><span class="section-number-3">1.2</span> Sensor Model Uncertainty</h3>
<div class="outline-text-3" id="text-1-2">
<p>
<a id="orgf04439d"></a>
The uncertainty on the sensor dynamics is described by multiplicative uncertainty (Figure <a href="#org35e2340">1</a>).
<a id="org3943238"></a>
The uncertainty on the sensor dynamics is described by multiplicative uncertainty (Figure <a href="#orgd79f98f">1</a>).
</p>
<p>
@@ -295,10 +290,10 @@ The true sensor dynamics \(G_i(s)\) is then described by \eqref{eq:sensor_dynami
\end{equation}
<p>
The weights \(W_i(s)\) representing the dynamical uncertainty are defined below and their magnitude is shown in Figure <a href="#org557e062">3</a>.
The weights \(W_i(s)\) representing the dynamical uncertainty are defined below and their magnitude is shown in Figure <a href="#org2530a6e">3</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">W1 = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-string">'w0'</span>, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>3, <span class="org-string">'G0'</span>, 2, <span class="org-string">'G1'</span>, 0.1, <span class="org-string">'Gc'</span>, 1) <span class="org-type">*</span> ...
<pre class="src src-matlab">W1 = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-string">'w0'</span>, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>3, <span class="org-string">'G0'</span>, 2, <span class="org-string">'G1'</span>, 0.1, <span class="org-string">'Gc'</span>, 1) <span class="org-type">*</span> ...
createWeight(<span class="org-string">'n'</span>, 2, <span class="org-string">'w0'</span>, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>1e3, <span class="org-string">'G0'</span>, 1, <span class="org-string">'G1'</span>, 4<span class="org-type">/</span>0.1, <span class="org-string">'Gc'</span>, 1<span class="org-type">/</span>0.1);
W2 = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-string">'w0'</span>, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>1e2, <span class="org-string">'G0'</span>, 0.05, <span class="org-string">'G1'</span>, 4, <span class="org-string">'Gc'</span>, 1);
@@ -306,18 +301,18 @@ W2 = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-strin
</div>
<p>
The bode plot of the sensors nominal dynamics as well as their defined dynamical spread are shown in Figure <a href="#orgc218675">4</a>.
The bode plot of the sensors nominal dynamics as well as their defined dynamical spread are shown in Figure <a href="#org415740c">4</a>.
</p>
<div id="org557e062" class="figure">
<div id="org2530a6e" class="figure">
<p><img src="figs/sensors_uncertainty_weights.png" alt="sensors_uncertainty_weights.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Magnitude of the multiplicative uncertainty weights \(|W_i(j\omega)|\)</p>
</div>
<div id="orgc218675" class="figure">
<div id="org415740c" class="figure">
<p><img src="figs/sensors_nominal_dynamics_and_uncertainty.png" alt="sensors_nominal_dynamics_and_uncertainty.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Nominal Sensor Dynamics \(\hat{G}_i\) (solid lines) as well as the spread of the dynamical uncertainty (background color)</p>
@@ -325,12 +320,12 @@ The bode plot of the sensors nominal dynamics as well as their defined dynamical
</div>
</div>
<div id="outline-container-org81d9a34" class="outline-3">
<h3 id="org81d9a34"><span class="section-number-3">1.3</span> Sensor Noise</h3>
<div id="outline-container-orgb768f02" class="outline-3">
<h3 id="orgb768f02"><span class="section-number-3">1.3</span> Sensor Noise</h3>
<div class="outline-text-3" id="text-1-3">
<p>
<a id="org71b587e"></a>
The noise of the sensors \(n_i\) are modelled by shaping a white noise with unitary PSD \(\tilde{n}_i\) \eqref{eq:unitary_noise_psd} with a LTI transfer function \(N_i(s)\) (Figure <a href="#org35e2340">1</a>).
<a id="orgfd557c8"></a>
The noise of the sensors \(n_i\) are modelled by shaping a white noise with unitary PSD \(\tilde{n}_i\) \eqref{eq:unitary_noise_psd} with a LTI transfer function \(N_i(s)\) (Figure <a href="#orgd79f98f">1</a>).
</p>
\begin{equation}
\Phi_{\tilde{n}_i}(\omega) = 1 \label{eq:unitary_noise_psd}
@@ -344,7 +339,7 @@ The Power Spectral Density of the sensor noise \(\Phi_{n_i}(\omega)\) is then co
\end{equation}
<p>
The weights \(N_1\) and \(N_2\) representing the amplitude spectral density of the sensor noises are defined below and shown in Figure <a href="#org51f9788">5</a>.
The weights \(N_1\) and \(N_2\) representing the amplitude spectral density of the sensor noises are defined below and shown in Figure <a href="#org5e2cd13">5</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">omegac = 0.15<span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span>; G0 = 1e<span class="org-type">-</span>1; Ginf = 1e<span class="org-type">-</span>6;
@@ -356,7 +351,7 @@ N2 = (Ginf<span class="org-type">*</span>s<span class="org-type">/</span>omegac
</div>
<div id="org51f9788" class="figure">
<div id="org5e2cd13" class="figure">
<p><img src="figs/sensors_noise.png" alt="sensors_noise.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Amplitude spectral density of the sensors \(\sqrt{\Phi_{n_i}(\omega)} = |N_i(j\omega)|\)</p>
@@ -364,8 +359,8 @@ N2 = (Ginf<span class="org-type">*</span>s<span class="org-type">/</span>omegac
</div>
</div>
<div id="outline-container-org4e23f6c" class="outline-3">
<h3 id="org4e23f6c"><span class="section-number-3">1.4</span> Save Model</h3>
<div id="outline-container-org426c21e" class="outline-3">
<h3 id="org426c21e"><span class="section-number-3">1.4</span> Save Model</h3>
<div class="outline-text-3" id="text-1-4">
<p>
All the dynamical systems representing the sensors are saved for further use.
@@ -379,27 +374,27 @@ All the dynamical systems representing the sensors are saved for further use.
</div>
</div>
<div id="outline-container-org2cab1a2" class="outline-2">
<h2 id="org2cab1a2"><span class="section-number-2">2</span> Introduction to Sensor Fusion</h2>
<div id="outline-container-orgce0ac83" class="outline-2">
<h2 id="orgce0ac83"><span class="section-number-2">2</span> Introduction to Sensor Fusion</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orga64daad"></a>
<a id="orge87db28"></a>
</p>
</div>
<div id="outline-container-org0cbc92d" class="outline-3">
<h3 id="org0cbc92d"><span class="section-number-3">2.1</span> Sensor Fusion Architecture</h3>
<div id="outline-container-orgbb36114" class="outline-3">
<h3 id="orgbb36114"><span class="section-number-3">2.1</span> Sensor Fusion Architecture</h3>
<div class="outline-text-3" id="text-2-1">
<p>
<a id="org31e00a0"></a>
<a id="org80d2a51"></a>
</p>
<p>
The two sensors presented in Section <a href="#orgee25d07">1</a> are now merged together using complementary filters \(H_1(s)\) and \(H_2(s)\) to form a super sensor (Figure <a href="#org48a16fd">6</a>).
The two sensors presented in Section <a href="#org3cd5225">1</a> are now merged together using complementary filters \(H_1(s)\) and \(H_2(s)\) to form a super sensor (Figure <a href="#orgffed4ec">6</a>).
</p>
<div id="org48a16fd" class="figure">
<div id="orgffed4ec" class="figure">
<p><img src="figs-paper/sensor_fusion_noise_arch.png" alt="sensor_fusion_noise_arch.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Sensor Fusion Architecture</p>
@@ -423,11 +418,11 @@ The super sensor estimate \(\hat{x}\) is given by \eqref{eq:super_sensor_estimat
</div>
</div>
<div id="outline-container-orge9e0bd4" class="outline-3">
<h3 id="orge9e0bd4"><span class="section-number-3">2.2</span> Super Sensor Noise</h3>
<div id="outline-container-org3a4f4b8" class="outline-3">
<h3 id="org3a4f4b8"><span class="section-number-3">2.2</span> Super Sensor Noise</h3>
<div class="outline-text-3" id="text-2-2">
<p>
<a id="orgff055a3"></a>
<a id="org3e73362"></a>
</p>
<p>
@@ -458,15 +453,15 @@ And the Root Mean Square (RMS) value of the super sensor noise \(\sigma_n\) is g
</div>
</div>
<div id="outline-container-orgefb4347" class="outline-3">
<h3 id="orgefb4347"><span class="section-number-3">2.3</span> Super Sensor Dynamical Uncertainty</h3>
<div id="outline-container-org3f0594e" class="outline-3">
<h3 id="org3f0594e"><span class="section-number-3">2.3</span> Super Sensor Dynamical Uncertainty</h3>
<div class="outline-text-3" id="text-2-3">
<p>
<a id="org859b213"></a>
<a id="orgd73f82f"></a>
</p>
<p>
If we consider some dynamical uncertainty (the true system dynamics \(G_i\) not being perfectly equal to our model \(\hat{G}_i\)) that we model by the use of multiplicative uncertainty (Figure <a href="#org54538d7">7</a>), the super sensor dynamics is then equals to:
If we consider some dynamical uncertainty (the true system dynamics \(G_i\) not being perfectly equal to our model \(\hat{G}_i\)) that we model by the use of multiplicative uncertainty (Figure <a href="#org05e7617">7</a>), the super sensor dynamics is then equals to:
</p>
\begin{equation}
@@ -478,18 +473,18 @@ If we consider some dynamical uncertainty (the true system dynamics \(G_i\) not
\end{equation}
<div id="org54538d7" class="figure">
<div id="org05e7617" class="figure">
<p><img src="figs-paper/sensor_model_uncertainty.png" alt="sensor_model_uncertainty.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Sensor Model including Dynamical Uncertainty</p>
</div>
<p>
The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at frequency \(\omega\) is bounded in the complex plane by a circle centered on 1 and with a radius equal to \(|W_1(j\omega) H_1(j\omega)| + |W_2(j\omega) H_2(j\omega)|\) as shown in Figure <a href="#orgb11ef23">8</a>.
The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at frequency \(\omega\) is bounded in the complex plane by a circle centered on 1 and with a radius equal to \(|W_1(j\omega) H_1(j\omega)| + |W_2(j\omega) H_2(j\omega)|\) as shown in Figure <a href="#org1ff6ff8">8</a>.
</p>
<div id="orgb11ef23" class="figure">
<div id="org1ff6ff8" class="figure">
<p><img src="figs-paper/uncertainty_set_super_sensor.png" alt="uncertainty_set_super_sensor.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Super Sensor model uncertainty displayed in the complex plane</p>
@@ -498,11 +493,11 @@ The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at freque
</div>
</div>
<div id="outline-container-org5896b60" class="outline-2">
<h2 id="org5896b60"><span class="section-number-2">3</span> Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis</h2>
<div id="outline-container-org096192f" class="outline-2">
<h2 id="org096192f"><span class="section-number-2">3</span> Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="orgdd6b9ce"></a>
<a id="orgbaf748a"></a>
</p>
<p>
In this section, the complementary filters \(H_1(s)\) and \(H_2(s)\) are designed in order to minimize the RMS value of super sensor noise \(\sigma_n\).
@@ -520,23 +515,23 @@ The RMS value of the super sensor noise is (neglecting the model uncertainty):
<p>
The goal is to design \(H_1(s)\) and \(H_2(s)\) such that \(H_1(s) + H_2(s) = 1\) (complementary property) and such that \(\left\| \begin{matrix} H_1 N_1 \\ H_2 N_2 \end{matrix} \right\|_2\) is minimized (minimized RMS value of the super sensor noise).
This is done using the \(\mathcal{H}_2\) synthesis in Section <a href="#org5bc9386">3.1</a>.
This is done using the \(\mathcal{H}_2\) synthesis in Section <a href="#orgf1e20ae">3.1</a>.
</p>
</div>
<div id="outline-container-orgf5a8a84" class="outline-3">
<h3 id="orgf5a8a84"><span class="section-number-3">3.1</span> \(\mathcal{H}_2\) Synthesis</h3>
<div id="outline-container-org9188eae" class="outline-3">
<h3 id="org9188eae"><span class="section-number-3">3.1</span> \(\mathcal{H}_2\) Synthesis</h3>
<div class="outline-text-3" id="text-3-1">
<p>
<a id="org5bc9386"></a>
<a id="orgf1e20ae"></a>
</p>
<p>
Consider the generalized plant \(P_{\mathcal{H}_2}\) shown in Figure <a href="#orgd218886">9</a> and described by Equation \eqref{eq:H2_generalized_plant}.
Consider the generalized plant \(P_{\mathcal{H}_2}\) shown in Figure <a href="#org95769ad">9</a> and described by Equation \eqref{eq:H2_generalized_plant}.
</p>
<div id="orgd218886" class="figure">
<div id="org95769ad" class="figure">
<p><img src="figs-paper/h_two_optimal_fusion.png" alt="h_two_optimal_fusion.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Architecture used for \(\mathcal{H}_\infty\) synthesis of complementary filters</p>
@@ -592,10 +587,10 @@ Finally, \(H_1(s)\) is defined as follows
</div>
<p>
The obtained complementary filters are shown in Figure <a href="#org8c7ba6b">10</a>.
The obtained complementary filters are shown in Figure <a href="#org02514a9">10</a>.
</p>
<div id="org8c7ba6b" class="figure">
<div id="org02514a9" class="figure">
<p><img src="figs/htwo_comp_filters.png" alt="htwo_comp_filters.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Obtained complementary filters using the \(\mathcal{H}_2\) Synthesis</p>
@@ -603,11 +598,11 @@ The obtained complementary filters are shown in Figure <a href="#org8c7ba6b">10<
</div>
</div>
<div id="outline-container-org72159df" class="outline-3">
<h3 id="org72159df"><span class="section-number-3">3.2</span> Super Sensor Noise</h3>
<div id="outline-container-org6d6d909" class="outline-3">
<h3 id="org6d6d909"><span class="section-number-3">3.2</span> Super Sensor Noise</h3>
<div class="outline-text-3" id="text-3-2">
<p>
<a id="orgc7cc0a8"></a>
<a id="org497847a"></a>
</p>
<p>
@@ -622,13 +617,13 @@ PSD_H2 = abs(squeeze(freqresp(N1<span class="org-type">*</span>H1, freqs, <span
</div>
<p>
The obtained ASD are shown in Figure <a href="#orge481bcd">11</a>.
The obtained ASD are shown in Figure <a href="#orgd3690df">11</a>.
</p>
<p>
The RMS value of the individual sensors and of the super sensor are listed in Table <a href="#org3918d27">3</a>.
The RMS value of the individual sensors and of the super sensor are listed in Table <a href="#org04c5321">3</a>.
</p>
<table id="org3918d27" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org04c5321" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 3:</span> RMS value of the individual sensor noise and of the super sensor using the \(\mathcal{H}_2\) Synthesis</caption>
<colgroup>
@@ -661,7 +656,7 @@ The RMS value of the individual sensors and of the super sensor are listed in Ta
</table>
<div id="orge481bcd" class="figure">
<div id="orgd3690df" class="figure">
<p><img src="figs/psd_sensors_htwo_synthesis.png" alt="psd_sensors_htwo_synthesis.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the optimally fused signal</p>
@@ -670,19 +665,19 @@ The RMS value of the individual sensors and of the super sensor are listed in Ta
<p>
A time domain simulation is now performed.
The measured velocity \(x\) is set to be a sweep sine with an amplitude of \(0.1\ [m/s]\).
The velocity estimates from the two sensors and from the super sensors are shown in Figure <a href="#org9c2a7e4">12</a>.
The resulting noises are displayed in Figure <a href="#org4cc42bf">13</a>.
The velocity estimates from the two sensors and from the super sensors are shown in Figure <a href="#orgf112864">12</a>.
The resulting noises are displayed in Figure <a href="#org1ab022b">13</a>.
</p>
<div id="org9c2a7e4" class="figure">
<div id="orgf112864" class="figure">
<p><img src="figs/super_sensor_time_domain_h2.png" alt="super_sensor_time_domain_h2.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Noise of individual sensors and noise of the super sensor</p>
</div>
<div id="org4cc42bf" class="figure">
<div id="org1ab022b" class="figure">
<p><img src="figs/sensor_noise_H2_time_domain.png" alt="sensor_noise_H2_time_domain.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Noise of the two sensors \(n_1, n_2\) and noise of the super sensor \(n\)</p>
@@ -690,15 +685,15 @@ The resulting noises are displayed in Figure <a href="#org4cc42bf">13</a>.
</div>
</div>
<div id="outline-container-org8ffba19" class="outline-3">
<h3 id="org8ffba19"><span class="section-number-3">3.3</span> Discrepancy between sensor dynamics and model</h3>
<div id="outline-container-org850d99e" class="outline-3">
<h3 id="org850d99e"><span class="section-number-3">3.3</span> Discrepancy between sensor dynamics and model</h3>
<div class="outline-text-3" id="text-3-3">
<p>
If we consider sensor dynamical uncertainty as explained in Section <a href="#orgf04439d">1.2</a>, we can compute what would be the super sensor dynamical uncertainty when using the complementary filters obtained using the \(\mathcal{H}_2\) Synthesis.
If we consider sensor dynamical uncertainty as explained in Section <a href="#org3943238">1.2</a>, we can compute what would be the super sensor dynamical uncertainty when using the complementary filters obtained using the \(\mathcal{H}_2\) Synthesis.
</p>
<p>
The super sensor dynamical uncertainty is shown in Figure <a href="#org865879b">14</a>.
The super sensor dynamical uncertainty is shown in Figure <a href="#org35f4dc2">14</a>.
</p>
<p>
@@ -706,7 +701,7 @@ It is shown that the phase uncertainty is not bounded between 100Hz and 200Hz.
As a result the super sensor signal can not be used for feedback applications about 100Hz.
</p>
<div id="org865879b" class="figure">
<div id="org35f4dc2" class="figure">
<p><img src="figs/super_sensor_dynamical_uncertainty_H2.png" alt="super_sensor_dynamical_uncertainty_H2.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Super sensor dynamical uncertainty when using the \(\mathcal{H}_2\) Synthesis</p>
@@ -715,11 +710,11 @@ As a result the super sensor signal can not be used for feedback applications ab
</div>
</div>
<div id="outline-container-org26ea7b1" class="outline-2">
<h2 id="org26ea7b1"><span class="section-number-2">4</span> Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis</h2>
<div id="outline-container-org6d1270a" class="outline-2">
<h2 id="org6d1270a"><span class="section-number-2">4</span> Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="org5d93f37"></a>
<a id="orgea66128"></a>
</p>
<p>
We initially considered perfectly known sensor dynamics so that it can be perfectly inverted.
@@ -727,18 +722,18 @@ We initially considered perfectly known sensor dynamics so that it can be perfec
<p>
We now take into account the fact that the sensor dynamics is only partially known.
To do so, we model the uncertainty that we have on the sensor dynamics by multiplicative input uncertainty as shown in Figure <a href="#org2b71ca6">15</a>.
To do so, we model the uncertainty that we have on the sensor dynamics by multiplicative input uncertainty as shown in Figure <a href="#org3a26ad3">15</a>.
</p>
<div id="org2b71ca6" class="figure">
<div id="org3a26ad3" class="figure">
<p><img src="figs-paper/sensor_fusion_arch_uncertainty.png" alt="sensor_fusion_arch_uncertainty.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Sensor fusion architecture with sensor dynamics uncertainty</p>
</div>
<p>
As explained in Section <a href="#orgf04439d">1.2</a>, at each frequency \(\omega\), the dynamical uncertainty of the super sensor can be represented in the complex plane by a circle with a radius equals to \(|H_1(j\omega) W_1(j\omega)| + |H_2(j\omega) W_2(j\omega)|\) and centered on 1.
As explained in Section <a href="#org3943238">1.2</a>, at each frequency \(\omega\), the dynamical uncertainty of the super sensor can be represented in the complex plane by a circle with a radius equals to \(|H_1(j\omega) W_1(j\omega)| + |H_2(j\omega) W_2(j\omega)|\) and centered on 1.
</p>
<p>
@@ -760,7 +755,7 @@ In order to specify a wanted upper bound on the dynamical uncertainty, a weight
\end{align}
<p>
The choice of \(W_u\) is presented in Section <a href="#orgefed264">4.1</a>.
The choice of \(W_u\) is presented in Section <a href="#org5b00e7a">4.1</a>.
</p>
@@ -778,15 +773,15 @@ The objective is to design \(H_1(s)\) and \(H_2(s)\) such that \(H_1(s) + H_2(s)
</p>
<p>
This is done using the \(\mathcal{H}_\infty\) synthesis in Section <a href="#org2c990ce">4.2</a>.
This is done using the \(\mathcal{H}_\infty\) synthesis in Section <a href="#org7bd80be">4.2</a>.
</p>
</div>
<div id="outline-container-org8dfd9d2" class="outline-3">
<h3 id="org8dfd9d2"><span class="section-number-3">4.1</span> Weighting Function used to bound the super sensor uncertainty</h3>
<div id="outline-container-orgc5a0221" class="outline-3">
<h3 id="orgc5a0221"><span class="section-number-3">4.1</span> Weighting Function used to bound the super sensor uncertainty</h3>
<div class="outline-text-3" id="text-4-1">
<p>
<a id="orgefed264"></a>
<a id="org5b00e7a"></a>
</p>
<p>
@@ -799,7 +794,7 @@ This is done using the \(\mathcal{H}_\infty\) synthesis in Section <a href="#org
\end{align}
<p>
The uncertainty bounds of the two individual sensor as well as the wanted maximum uncertainty bounds of the super sensor are shown in Figure <a href="#orgdffee80">16</a>.
The uncertainty bounds of the two individual sensor as well as the wanted maximum uncertainty bounds of the super sensor are shown in Figure <a href="#orge13d408">16</a>.
</p>
<div class="org-src-container">
@@ -810,7 +805,7 @@ Wu = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-strin
</div>
<div id="orgdffee80" class="figure">
<div id="orge13d408" class="figure">
<p><img src="figs/weight_uncertainty_bounds_Wu.png" alt="weight_uncertainty_bounds_Wu.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Uncertainty region of the two sensors as well as the wanted maximum uncertainty of the super sensor (dashed lines)</p>
@@ -818,19 +813,19 @@ Wu = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-strin
</div>
</div>
<div id="outline-container-org7422ade" class="outline-3">
<h3 id="org7422ade"><span class="section-number-3">4.2</span> \(\mathcal{H}_\infty\) Synthesis</h3>
<div id="outline-container-org334f826" class="outline-3">
<h3 id="org334f826"><span class="section-number-3">4.2</span> \(\mathcal{H}_\infty\) Synthesis</h3>
<div class="outline-text-3" id="text-4-2">
<p>
<a id="org2c990ce"></a>
<a id="org7bd80be"></a>
</p>
<p>
The generalized plant \(P_{\mathcal{H}_\infty}\) used for the \(\mathcal{H}_\infty\) Synthesis of the complementary filters is shown in Figure <a href="#org59777f5">17</a> and is described by Equation \eqref{eq:Hinf_generalized_plant}.
The generalized plant \(P_{\mathcal{H}_\infty}\) used for the \(\mathcal{H}_\infty\) Synthesis of the complementary filters is shown in Figure <a href="#org461ce6a">17</a> and is described by Equation \eqref{eq:Hinf_generalized_plant}.
</p>
<div id="org59777f5" class="figure">
<div id="org461ce6a" class="figure">
<p><img src="figs-paper/h_infinity_robust_fusion.png" alt="h_infinity_robust_fusion.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Architecture used for \(\mathcal{H}_\infty\) synthesis of complementary filters</p>
@@ -866,7 +861,7 @@ And the \(\mathcal{H}_\infty\) synthesis is performed using the <code>hinfsyn</c
</pre>
</div>
<pre class="example">
<pre class="example" id="orge32bb33">
Test bounds: 0.7071 &lt;= gamma &lt;= 1.291
gamma X&gt;=0 Y&gt;=0 rho(XY)&lt;1 p/f
@@ -897,11 +892,11 @@ The \(\mathcal{H}_\infty\) is successful as the \(\mathcal{H}_\infty\) norm of t
</div>
<p>
The obtained complementary filters as well as the wanted upper bounds are shown in Figure <a href="#orga1806e3">18</a>.
The obtained complementary filters as well as the wanted upper bounds are shown in Figure <a href="#org938a541">18</a>.
</p>
<div id="orga1806e3" class="figure">
<div id="org938a541" class="figure">
<p><img src="figs/hinf_comp_filters.png" alt="hinf_comp_filters.png" />
</p>
<p><span class="figure-number">Figure 18: </span>Obtained complementary filters using the \(\mathcal{H}_\infty\) Synthesis</p>
@@ -909,11 +904,11 @@ The obtained complementary filters as well as the wanted upper bounds are shown
</div>
</div>
<div id="outline-container-orga0267c6" class="outline-3">
<h3 id="orga0267c6"><span class="section-number-3">4.3</span> Super sensor uncertainty</h3>
<div id="outline-container-org211e432" class="outline-3">
<h3 id="org211e432"><span class="section-number-3">4.3</span> Super sensor uncertainty</h3>
<div class="outline-text-3" id="text-4-3">
<p>
The super sensor dynamical uncertainty is displayed in Figure <a href="#orge75f5ef">19</a>.
The super sensor dynamical uncertainty is displayed in Figure <a href="#org52cdb78">19</a>.
It is confirmed that the super sensor dynamical uncertainty is less than the maximum allowed uncertainty defined by the norm of \(W_u(s)\).
</p>
@@ -922,7 +917,7 @@ The \(\mathcal{H}_\infty\) synthesis thus allows to design filters such that the
</p>
<div id="orge75f5ef" class="figure">
<div id="org52cdb78" class="figure">
<p><img src="figs/super_sensor_dynamical_uncertainty_Hinf.png" alt="super_sensor_dynamical_uncertainty_Hinf.png" />
</p>
<p><span class="figure-number">Figure 19: </span>Super sensor dynamical uncertainty (solid curve) when using the \(\mathcal{H}_\infty\) Synthesis</p>
@@ -930,12 +925,12 @@ The \(\mathcal{H}_\infty\) synthesis thus allows to design filters such that the
</div>
</div>
<div id="outline-container-org979fede" class="outline-3">
<h3 id="org979fede"><span class="section-number-3">4.4</span> Super sensor noise</h3>
<div id="outline-container-org7672e0e" class="outline-3">
<h3 id="org7672e0e"><span class="section-number-3">4.4</span> Super sensor noise</h3>
<div class="outline-text-3" id="text-4-4">
<p>
We now compute the obtain Power Spectral Density of the super sensor&rsquo;s noise.
The Amplitude Spectral Densities are shown in Figure <a href="#org5aac73f">20</a>.
The Amplitude Spectral Densities are shown in Figure <a href="#org06b08df">20</a>.
</p>
<div class="org-src-container">
@@ -947,18 +942,18 @@ PSD_Hinf = abs(squeeze(freqresp(N1<span class="org-type">*</span>H1, freqs, <spa
</div>
<p>
The obtained RMS of the super sensor noise in the \(\mathcal{H}_2\) and \(\mathcal{H}_\infty\) case are shown in Table <a href="#org3e08452">4</a>.
The obtained RMS of the super sensor noise in the \(\mathcal{H}_2\) and \(\mathcal{H}_\infty\) case are shown in Table <a href="#org3cf92ce">4</a>.
As expected, the super sensor obtained from the \(\mathcal{H}_\infty\) synthesis is much noisier than the super sensor obtained from the \(\mathcal{H}_2\) synthesis.
</p>
<div id="org5aac73f" class="figure">
<div id="org06b08df" class="figure">
<p><img src="figs/psd_sensors_hinf_synthesis.png" alt="psd_sensors_hinf_synthesis.png" />
</p>
<p><span class="figure-number">Figure 20: </span>Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the</p>
<p><span class="figure-number">Figure 20: </span>Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the \(\mathcal{H}_\infty\) synthesis</p>
</div>
<table id="org3e08452" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org3cf92ce" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 4:</span> Comparison of the obtained RMS noise of the super sensor</caption>
<colgroup>
@@ -987,8 +982,8 @@ As expected, the super sensor obtained from the \(\mathcal{H}_\infty\) synthesis
</div>
</div>
<div id="outline-container-orgda33992" class="outline-3">
<h3 id="orgda33992"><span class="section-number-3">4.5</span> Conclusion</h3>
<div id="outline-container-orgdcb47cf" class="outline-3">
<h3 id="orgdcb47cf"><span class="section-number-3">4.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-5">
<p>
Using the \(\mathcal{H}_\infty\) synthesis, the dynamical uncertainty of the super sensor can be bounded to acceptable values.
@@ -1001,22 +996,22 @@ However, the RMS of the super sensor noise is not optimized as it was the case w
</div>
</div>
<div id="outline-container-org15afe90" class="outline-2">
<h2 id="org15afe90"><span class="section-number-2">5</span> Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</h2>
<div id="outline-container-org49a7cc2" class="outline-2">
<h2 id="org49a7cc2"><span class="section-number-2">5</span> Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</h2>
<div class="outline-text-2" id="text-5">
<p>
<a id="org9f98c16"></a>
<a id="org2aeafb3"></a>
</p>
<p>
The (optima) \(\mathcal{H}_2\) synthesis and the (robust) \(\mathcal{H}_\infty\) synthesis are now combined to form an Optimal and Robust synthesis of complementary filters for sensor fusion.
</p>
<p>
The sensor fusion architecture is shown in Figure <a href="#org3cc874e">21</a> (\(\hat{G}_i\) are omitted for space reasons).
The sensor fusion architecture is shown in Figure <a href="#orgd633d12">21</a> (\(\hat{G}_i\) are omitted for space reasons).
</p>
<div id="org3cc874e" class="figure">
<div id="orgd633d12" class="figure">
<p><img src="figs-paper/sensor_fusion_arch_full.png" alt="sensor_fusion_arch_full.png" />
</p>
<p><span class="figure-number">Figure 21: </span>Sensor fusion architecture with sensor dynamics uncertainty</p>
@@ -1031,18 +1026,18 @@ The goal is to design complementary filters such that:
</ul>
<p>
To do so, we can use the Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis presented in Section <a href="#orgbbc8594">5.1</a>.
To do so, we can use the Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis presented in Section <a href="#org669093b">5.1</a>.
</p>
</div>
<div id="outline-container-org0f81a91" class="outline-3">
<h3 id="org0f81a91"><span class="section-number-3">5.1</span> Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis</h3>
<div id="outline-container-org7ed8ed7" class="outline-3">
<h3 id="org7ed8ed7"><span class="section-number-3">5.1</span> Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis</h3>
<div class="outline-text-3" id="text-5-1">
<p>
<a id="orgbbc8594"></a>
<a id="org669093b"></a>
</p>
<p>
The synthesis architecture that is used here is shown in Figure <a href="#orga971cdb">22</a>.
The synthesis architecture that is used here is shown in Figure <a href="#orgc870005">22</a>.
</p>
<p>
@@ -1054,7 +1049,7 @@ The filter \(H_2(s)\) is synthesized such that it:
</ul>
<div id="orga971cdb" class="figure">
<div id="orgc870005" class="figure">
<p><img src="figs-paper/mixed_h2_hinf_synthesis.png" alt="mixed_h2_hinf_synthesis.png" />
</p>
<p><span class="figure-number">Figure 22: </span>Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</p>
@@ -1098,11 +1093,11 @@ And the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis is performed.
</div>
<p>
The obtained complementary filters are shown in Figure <a href="#org30e8a3f">23</a>.
The obtained complementary filters are shown in Figure <a href="#orgf37f308">23</a>.
</p>
<div id="org30e8a3f" class="figure">
<div id="orgf37f308" class="figure">
<p><img src="figs/htwo_hinf_comp_filters.png" alt="htwo_hinf_comp_filters.png" />
</p>
<p><span class="figure-number">Figure 23: </span>Obtained complementary filters after mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis</p>
@@ -1110,19 +1105,19 @@ The obtained complementary filters are shown in Figure <a href="#org30e8a3f">23<
</div>
</div>
<div id="outline-container-org417aabd" class="outline-3">
<h3 id="org417aabd"><span class="section-number-3">5.2</span> Obtained Super Sensor&rsquo;s noise</h3>
<div id="outline-container-orgfb839cf" class="outline-3">
<h3 id="orgfb839cf"><span class="section-number-3">5.2</span> Obtained Super Sensor&rsquo;s noise</h3>
<div class="outline-text-3" id="text-5-2">
<p>
The Amplitude Spectral Density of the super sensor&rsquo;s noise is shown in Figure <a href="#orgfdfbf76">24</a>.
The Amplitude Spectral Density of the super sensor&rsquo;s noise is shown in Figure <a href="#orgb3c92e4">24</a>.
</p>
<p>
A time domain simulation is shown in Figure <a href="#orgdf5905f">25</a>.
A time domain simulation is shown in Figure <a href="#org4a0db9b">25</a>.
</p>
<p>
The RMS values of the super sensor noise for the presented three synthesis are listed in Table <a href="#org3b7df55">5</a>.
The RMS values of the super sensor noise for the presented three synthesis are listed in Table <a href="#org3b10edf">5</a>.
</p>
<div class="org-src-container">
@@ -1134,20 +1129,20 @@ PSD_H2Hinf = abs(squeeze(freqresp(N1<span class="org-type">*</span>H1, freqs, <s
</div>
<div id="orgfdfbf76" class="figure">
<div id="orgb3c92e4" class="figure">
<p><img src="figs/psd_sensors_htwo_hinf_synthesis.png" alt="psd_sensors_htwo_hinf_synthesis.png" />
</p>
<p><span class="figure-number">Figure 24: </span>Power Spectral Density of the Super Sensor obtained with the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis</p>
</div>
<div id="orgdf5905f" class="figure">
<div id="org4a0db9b" class="figure">
<p><img src="figs/super_sensor_time_domain_h2_hinf.png" alt="super_sensor_time_domain_h2_hinf.png" />
</p>
<p><span class="figure-number">Figure 25: </span>Noise of individual sensors and noise of the super sensor</p>
</div>
<table id="org3b7df55" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org3b10edf" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 5:</span> Comparison of the obtained RMS noise of the super sensor</caption>
<colgroup>
@@ -1181,15 +1176,15 @@ PSD_H2Hinf = abs(squeeze(freqresp(N1<span class="org-type">*</span>H1, freqs, <s
</div>
</div>
<div id="outline-container-org2dce888" class="outline-3">
<h3 id="org2dce888"><span class="section-number-3">5.3</span> Obtained Super Sensor&rsquo;s Uncertainty</h3>
<div id="outline-container-orgb8596ac" class="outline-3">
<h3 id="orgb8596ac"><span class="section-number-3">5.3</span> Obtained Super Sensor&rsquo;s Uncertainty</h3>
<div class="outline-text-3" id="text-5-3">
<p>
The uncertainty on the super sensor&rsquo;s dynamics is shown in Figure <a href="#orgb2d28c5">26</a>.
The uncertainty on the super sensor&rsquo;s dynamics is shown in Figure <a href="#org11fe014">26</a>.
</p>
<div id="orgb2d28c5" class="figure">
<div id="org11fe014" class="figure">
<p><img src="figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.png" alt="super_sensor_dynamical_uncertainty_Htwo_Hinf.png" />
</p>
<p><span class="figure-number">Figure 26: </span>Super sensor dynamical uncertainty (solid curve) when using the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</p>
@@ -1197,8 +1192,8 @@ The uncertainty on the super sensor&rsquo;s dynamics is shown in Figure <a href=
</div>
</div>
<div id="outline-container-org47da78c" class="outline-3">
<h3 id="org47da78c"><span class="section-number-3">5.4</span> Conclusion</h3>
<div id="outline-container-orgfcfa8a2" class="outline-3">
<h3 id="orgfcfa8a2"><span class="section-number-3">5.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-5-4">
<p>
The mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis of the complementary filters allows to:
@@ -1211,18 +1206,18 @@ The mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis of the complementary fi
</div>
</div>
<div id="outline-container-org0afe5ef" class="outline-2">
<h2 id="org0afe5ef"><span class="section-number-2">6</span> Matlab Functions</h2>
<div id="outline-container-orgf267700" class="outline-2">
<h2 id="orgf267700"><span class="section-number-2">6</span> Matlab Functions</h2>
<div class="outline-text-2" id="text-6">
<p>
<a id="orgf41dc8d"></a>
<a id="org50a28ec"></a>
</p>
</div>
<div id="outline-container-orge81e522" class="outline-3">
<h3 id="orge81e522"><span class="section-number-3">6.1</span> <code>createWeight</code></h3>
<div id="outline-container-org005db82" class="outline-3">
<h3 id="org005db82"><span class="section-number-3">6.1</span> <code>createWeight</code></h3>
<div class="outline-text-3" id="text-6-1">
<p>
<a id="org89bad6d"></a>
<a id="orgb602691"></a>
</p>
<p>
@@ -1274,11 +1269,11 @@ This Matlab function is accessible <a href="src/createWeight.m">here</a>.
</div>
</div>
<div id="outline-container-org37ec2b4" class="outline-3">
<h3 id="org37ec2b4"><span class="section-number-3">6.2</span> <code>plotMagUncertainty</code></h3>
<div id="outline-container-org816b32a" class="outline-3">
<h3 id="org816b32a"><span class="section-number-3">6.2</span> <code>plotMagUncertainty</code></h3>
<div class="outline-text-3" id="text-6-2">
<p>
<a id="org8739875"></a>
<a id="org2963b0d"></a>
</p>
<p>
@@ -1329,11 +1324,11 @@ p.FaceAlpha = args.opacity;
</div>
</div>
<div id="outline-container-org9f73572" class="outline-3">
<h3 id="org9f73572"><span class="section-number-3">6.3</span> <code>plotPhaseUncertainty</code></h3>
<div id="outline-container-orgddb3773" class="outline-3">
<h3 id="orgddb3773"><span class="section-number-3">6.3</span> <code>plotPhaseUncertainty</code></h3>
<div class="outline-text-3" id="text-6-3">
<p>
<a id="org49e21eb"></a>
<a id="org8d340da"></a>
</p>
<p>
@@ -1397,7 +1392,7 @@ p.FaceAlpha = args.opacity;
</div>
<div id="postamble" class="status">
<p class="author">Author: Thomas Dehaeze</p>
<p class="date">Created: 2020-10-05 lun. 15:08</p>
<p class="date">Created: 2020-11-12 jeu. 10:42</p>
</div>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
matlab/matlab/mat/Wu.mat Normal file

Binary file not shown.

BIN
matlab/matlab/mat/model.mat Normal file

Binary file not shown.

View File

@@ -1,28 +0,0 @@
% H Infini
\newcommand{\hinf}{\mathcal{H}_\infty}
% H 2
\newcommand{\htwo}{\mathcal{H}_2}
% Omega
\newcommand{\w}{\omega}
% H-Infinity Norm
\newcommand{\hnorm}[1]{\left\|#1\right\|_{\infty}}
% H-2 Norm
\newcommand{\normtwo}[1]{\left\|#1\right\|_{2}}
% Norm
\newcommand{\norm}[1]{\left\|#1\right\|}
% Absolute value
\newcommand{\abs}[1]{\left\lvert #1 \right\lvert}
% Minimum Subscript
\newcommand{\smin}{_{\text{min}}}
% Maximum Subscript
\newcommand{\smax}{_{\text{max}}}
\newcommand*\colvec[1]{\begin{bmatrix}#1\end{bmatrix}}

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More