From 6ce027cf8a348774fa487cbe98cd5fa2bbce8f3f Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Wed, 1 Sep 2021 10:16:26 +0200 Subject: [PATCH] Reworked tikz figures --- tikz/dehaeze21_desig_compl_filte_tikz.html | 932 ++++++++++++++++++ ...g => dehaeze21_desig_compl_filte_tikz.org} | 217 ++-- tikz/index.html | 716 -------------- 3 files changed, 1078 insertions(+), 787 deletions(-) create mode 100644 tikz/dehaeze21_desig_compl_filte_tikz.html rename tikz/{index.org => dehaeze21_desig_compl_filte_tikz.org} (82%) delete mode 100644 tikz/index.html diff --git a/tikz/dehaeze21_desig_compl_filte_tikz.html b/tikz/dehaeze21_desig_compl_filte_tikz.html new file mode 100644 index 0000000..d8782ed --- /dev/null +++ b/tikz/dehaeze21_desig_compl_filte_tikz.html @@ -0,0 +1,932 @@ + + + + + + +A new method of designing complementary filters for sensor fusion using the $\mathcal{H}_\infty$ synthesis - Tikz Figures + + + + + + + + +
+ UP + | + HOME +
+

A new method of designing complementary filters for sensor fusion using the \(\mathcal{H}_\infty\) synthesis - Tikz Figures

+ +

+Configuration file is accessible here. +

+ +
+

1. Sensor Fusion - Overview

+
+
+
\definecolor{myblue}{rgb}{0, 0.447, 0.741}
+\definecolor{myred}{rgb}{0.8500, 0.325, 0.098}
+
+\begin{tikzpicture}
+  \node[branch] (x) at (0, 0);
+  \node[block, above right=0.3 and 0.5 of x](sensor1){Sensor 1};
+  \node[block, below right=0.3 and 0.5 of x](sensor2){Sensor 2};
+
+  \node[block, right=1.1 of sensor1](H1){$H_1(s)$};
+  \node[block, right=1.1 of sensor2](H2){$H_2(s)$};
+
+  \node[addb, right=5.0 of x](add){};
+
+  \draw[] ($(x)+(-0.7, 0)$) node[above right]{$x$} -- (x.center);
+  \draw[->] (x.center) |- (sensor1.west);
+  \draw[->] (x.center) |- (sensor2.west);
+  \draw[->] (sensor1.east) -- node[midway, above]{$\hat{x}_1$} (H1.west);
+  \draw[->] (sensor2.east) -- node[midway, above]{$\hat{x}_2$} (H2.west);
+  \draw[->] (H1) -| (add.north);
+  \draw[->] (H2) -| (add.south);
+  \draw[->] (add.east) -- ++(0.9, 0) node[above left]{$\hat{x}$};
+
+  \begin{scope}[on background layer]
+    \node[fit={($(H2.south-|x) + (0, -0.2)$) ($(H1.north-|add.east) + (0.2, 0.6)$)}, fill=black!10!white, draw, inner sep=6pt] (supersensor) {};
+    \node[below] at (supersensor.north) {Super Sensor};
+
+    \node[fit={(sensor2.south west) (sensor1.north east)}, fill=black!20!white, draw, inner sep=6pt] (sensors) {};
+    \node[align=center] at (sensors.center) {{\tiny Normalized}\\[-0.5em]{\tiny Sensors}};
+
+    \node[fit={(H2.south west) (H1.north-|add.east)}, fill=black!20!white, draw, inner sep=6pt] (filters) {};
+    \node[align=center] at ($(filters.center) + (-0.3, 0)$) {{\tiny Complementary}\\[-0.5em]{\tiny Filters}};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

sensor_fusion_overview.png +

+

Figure 1: Schematic of a sensor fusion architecture using complementary filters

+
+
+
+ +
+

2. Sensor Model

+
+
+
\begin{tikzpicture}
+  \node[addb](add1){};
+  \node[block, right=0.8 of add1](G1){$G_i(s)$};
+
+  \draw[->] ($(add1.west)+(-0.7, 0)$) node[above right]{$x$} -- (add1.west);
+  \draw[<-] (add1.north) -- ++(0, 0.7)node[below right](n1){$n_i$};
+  \draw[->] (add1.east) -- (G1.west);
+  \draw[->] (G1.east) -- ++(0.7, 0) node[above left]{$\tilde{x}_i$};
+
+  \begin{scope}[on background layer]
+    \node[fit={(add1.west |- G1.south) (n1.north -| G1.east)}, fill=black!20!white, draw, inner sep=3pt] (sensor1) {};
+    \node[below left] at (sensor1.north east) {Sensor};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

sensor_model.png +

+

Figure 2: Basic sensor model consisting of a noise input \(n_i\) and a linear time invariant transfer function \(G_i(s)\)

+
+
+
+ +
+

3. Sensor Model with calibration

+
+
+
\begin{tikzpicture}
+  \node[addb](add1){};
+  \node[block, right=0.8 of add1](G1){$G_i(s)$};
+  \node[block, right=0.8 of G1](G1inv){$\hat{G}_i^{-1}(s)$};
+
+  \draw[->] ($(add1.west)+(-0.7, 0)$) node[above right]{$x$} -- (add1.west);
+  \draw[<-] (add1.north) -- ++(0, 0.7)node[below right](n1){$n_i$};
+  \draw[->] (add1.east) -- (G1.west);
+  \draw[->] (G1.east) -- (G1inv.west) node[above left]{$\tilde{x}_i$};
+  \draw[->] (G1inv.east) -- ++(0.8, 0) node[above left]{$\hat{x}_i$};
+
+  \begin{scope}[on background layer]
+    \node[fit={(add1.west |- G1inv.south) (n1.north -| G1inv.east)}, fill=black!10!white, draw, inner sep=6pt] (sensor1cal) {};
+    \node[below left, align=right] at (sensor1cal.north east) {{\tiny Normalized}\\[-0.5em]{\tiny sensor}};
+
+    \node[fit={(add1.west |- G1.south) (n1.north -| G1.east)}, fill=black!20!white, draw, inner sep=3pt] (sensor1) {};
+    \node[below left] at (sensor1.north east) {Sensor};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

sensor_model_calibrated.png +

+

Figure 3: Normalized sensors using the inverse of an estimate \(\hat{G}_i(s)\) of the sensor dynamics

+
+
+
+ +
+

4. Sensor Fusion Architecture

+
+
+
\definecolor{myblue}{rgb}{0, 0.447, 0.741}
+\definecolor{myred}{rgb}{0.8500, 0.325, 0.098}
+
+\begin{tikzpicture}
+  \node[branch] (x) at (0, 0);
+  \node[addb, above right=0.8 and 0.5 of x](add1){};
+  \node[addb, below right=0.8 and 0.5 of x](add2){};
+  \node[block, right=0.8 of add1](G1){$G_1(s)$};
+  \node[block, right=0.8 of add2](G2){$G_2(s)$};
+  \node[block, right=0.8 of G1](G1inv){$\hat{G}_1^{-1}(s)$};
+  \node[block, right=0.8 of G2](G2inv){$\hat{G}_2^{-2}(s)$};
+  \node[block, right=0.8 of G1inv](H1){$H_1(s)$};
+  \node[block, right=0.8 of G2inv](H2){$H_2(s)$};
+  \node[addb, right=7 of x](add){};
+
+  \draw[] ($(x)+(-0.7, 0)$) node[above right]{$x$} -- (x.center);
+  \draw[->] (x.center) |- (add1.west);
+  \draw[->] (x.center) |- (add2.west);
+  \draw[<-] (add1.north) -- ++(0, 0.7)node[below right](n1){$n_1$};
+  \draw[->] (add1.east) -- (G1.west);
+  \draw[->] (G1.east) -- (G1inv.west) node[above left]{$\tilde{x}_1$};
+  \draw[->] (G1inv.east) -- (H1.west) node[above left]{$\hat{x}_1$};
+  \draw[<-] (add2.north) -- ++(0, 0.7)node[below right](n2){$n_2$};
+  \draw[->] (add2.east) -- (G2.west);
+  \draw[->] (G2.east) -- (G2inv.west) node[above left]{$\tilde{x}_2$};
+  \draw[->] (G2inv.east) -- (H2.west) node[above left]{$\hat{x}_2$};
+  \draw[->] (H1) -| (add.north);
+  \draw[->] (H2) -| (add.south);
+  \draw[->] (add.east) -- ++(0.7, 0) node[above left]{$\hat{x}$};
+
+  \begin{scope}[on background layer]
+    \node[fit={(G2.south-|x) (n1.north-|add.east)}, fill=black!10!white, draw, inner sep=9pt] (supersensor) {};
+    \node[below left] at (supersensor.north east) {Super Sensor};
+
+    \node[fit={(add1.west |- G1inv.south) (n1.north -| G1inv.east)}, fill=myblue!20!white, draw, inner sep=6pt] (sensor1cal) {};
+    \node[below left, align=right] at (sensor1cal.north east) {{\tiny Normalized}\\[-0.5em]{\tiny sensor}};
+    \node[fit={(add1.west |- G1.south) (n1.north -| G1.east)}, fill=myblue!30!white, draw, inner sep=3pt] (sensor1) {};
+    \node[below left] at (sensor1.north east) {Sensor 1};
+
+    \node[fit={(add2.west |- G2inv.south) (n2.north -| G2inv.east)}, fill=myred!20!white, draw, inner sep=6pt] (sensor2cal) {};
+    \node[below left, align=right] at (sensor2cal.north east) {{\tiny Normalized}\\[-0.5em]{\tiny sensor}};
+    \node[fit={(add2.west |- G2.south) (n2.north -| G2.east)}, fill=myred!30!white, draw, inner sep=3pt] (sensor2) {};
+    \node[below left] at (sensor2.north east) {Sensor 2};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

fusion_super_sensor.png +

+

Figure 4: Sensor fusion architecture with two normalized sensors

+
+
+
+ +
+

5. Sensor Model with Uncertainty

+
+
+
\begin{tikzpicture}
+  \node[branch] (input) at (0,0) {};
+  \node[block, above right= 0.4 and 0.4 of input](W1){$w_1(s)$};
+  \node[block, right=0.4 of W1](delta1){$\Delta_1(s)$};
+  \node[addb] (addu) at ($(delta1.east|-input) + (0.4, 0)$) {};
+  \node[addb, right=0.4 of addu] (addn) {};
+  \node[block, right=0.4 of addn] (G1) {$\hat{G}_1(s)$};
+  \node[block, right=0.8 of G1](G1inv){$\hat{G}_1^{-1}(s)$};
+
+  \draw[->] ($(input)+(-0.7, 0)$) node[above right]{$x$} -- (addu);
+  \draw[->] (input.center) |- (W1.west);
+  \draw[->] (W1.east) -- (delta1.west);
+  \draw[->] (delta1.east) -| (addu.north);
+  \draw[->] (addu.east) -- (addn.west);
+  \draw[->] (addn.east) -- (G1.west);
+  \draw[<-] (addn.north) -- ++(0, 0.7)node[below right](n1){$n_1$};
+  \draw[->] (G1.east) -- (G1inv.west) node[above left]{$\tilde{x}_1$};
+  \draw[->] (G1inv.east) -- ++(0.8, 0) node[above left]{$\hat{x}_1$};
+
+  \begin{scope}[on background layer]
+    \node[fit={(input.west |- G1inv.south) (delta1.north -| G1inv.east)}, fill=black!10!white, draw, inner sep=6pt] (sensor1cal) {};
+    \node[below left, align=right] at (sensor1cal.north east) {{\tiny Normalized}\\[-0.5em]{\tiny sensor}};
+
+    \node[fit={(input.west |- G1.south) (delta1.north -| G1.east)}, fill=black!20!white, draw, inner sep=3pt] (sensor1) {};
+    \node[below left] at (sensor1.north east) {Sensor};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

sensor_model_uncertainty.png +

+

Figure 5: Sensor with multiplicative input uncertainty

+
+
+
+ +
+

6. Sensor Model with Uncertainty - Simplified

+
+
+
\begin{tikzpicture}
+  \node[branch] (input) at (0,0) {};
+  \node[block, above right= 0.4 and 0.4 of input](W1){$w_1(s)$};
+  \node[block, right=0.4 of W1](delta1){$\Delta_1(s)$};
+  \node[addb] (addu) at ($(delta1.east|-input) + (0.4, 0)$) {};
+  \node[addb, right=0.4 of addu] (addn) {};
+
+  \draw[->] ($(input)+(-0.8, 0)$) node[above right]{$x$} -- (addu);
+  \draw[->] (input.center) |- (W1.west);
+  \draw[->] (W1.east) -- (delta1.west);
+  \draw[->] (delta1.east) -| (addu.north);
+  \draw[->] (addu.east) -- (addn.west);
+  \draw[<-] (addn.north) -- ++(0, 0.6)node[below right](n1){$n_1$};
+  \draw[->] (addn.east) -- ++(0.9, 0) node[above left]{$\hat{x}_1$};
+
+  \begin{scope}[on background layer]
+    \node[fit={(input.west |- addu.south) ($(delta1.north -| addn.east) + (0.1, 0)$)}, fill=black!10!white, draw, inner sep=6pt] (sensor1cal) {};
+    \node[below left, align=right] at (sensor1cal.north east) {{\tiny Normalized}\\[-0.5em]{\tiny sensor}};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

sensor_model_uncertainty_simplified.png +

+

Figure 6: Simplified sensor model

+
+
+
+ +
+

7. Sensor fusion architecture with sensor dynamics uncertainty

+
+
+
\definecolor{myblue}{rgb}{0, 0.447, 0.741}
+\definecolor{myred}{rgb}{0.8500, 0.325, 0.098}
+
+\begin{tikzpicture}
+  \node[branch] (x) at (0, 0);
+
+  \node[branch, above right=1.0 and 0.3 of x] (input1) {};
+  \node[branch, below right=1.0 and 0.3 of x] (input2) {};
+  \node[block, above right= 0.4 and 0.3 of input1](W1){$w_1(s)$};
+  \node[block, above right= 0.4 and 0.3 of input2](W2){$w_2(s)$};
+  \node[block, right=0.4 of W1](delta1){$\Delta_1(s)$};
+  \node[block, right=0.4 of W2](delta2){$\Delta_2(s)$};
+  \node[addb] (addu1) at ($(delta1.east|-input1) + (0.4, 0)$) {};
+  \node[addb] (addu2) at ($(delta2.east|-input2) + (0.4, 0)$) {};
+  \node[addb, right=0.4 of addu1] (addn1) {};
+  \node[addb, right=0.4 of addu2] (addn2) {};
+  \node[block, right=0.9 of addn1](H1){$H_1(s)$};
+  \node[block, right=0.9 of addn2](H2){$H_2(s)$};
+
+  \node[addb, right=7 of x](add){};
+
+
+  \draw[] ($(x)+(-0.7, 0)$) node[above right]{$x$} -- (x.center);
+  \draw[->] (x.center) |- (addu1.west);
+  \draw[->] (x.center) |- (addu2.west);
+  \draw[->] (input1.center) |- (W1.west);
+  \draw[->] (W1.east) -- (delta1.west);
+  \draw[->] (delta1.east) -| (addu1.north);
+  \draw[->] (addu1.east) -- (addn1.west);
+  \draw[<-] (addn1.north) -- ++(0, 0.6)node[below right](n1){$n_1$};
+  \draw[->] (input2.center) |- (W2.west);
+  \draw[->] (W2.east) -- (delta2.west);
+  \draw[->] (delta2.east) -| (addu2.north);
+  \draw[->] (addu2.east) -- (addn2.west);
+  \draw[<-] (addn2.north) -- ++(0, 0.6)node[below right](n2){$n_2$};
+
+  \draw[->] (addn1.east) -- (H1.west) node[above left]{$\hat{x}_1$};
+  \draw[->] (addn2.east) -- (H2.west) node[above left]{$\hat{x}_2$};
+  \draw[->] (H1) -| (add.north);
+  \draw[->] (H2) -| (add.south);
+  \draw[->] (add.east) -- ++(0.7, 0) node[above left]{$\hat{x}$};
+
+  \begin{scope}[on background layer]
+    \node[fit={(addn2.south-|x) (delta1.north-|add.east)}, fill=black!10!white, draw, inner sep=9pt] (supersensor) {};
+    \node[below left] at (supersensor.north east) {Super Sensor};
+
+    \node[fit={(input1.west |- addu1.south) ($(delta1.north -| addn1.east) + (0.1, 0.0)$)}, fill=myblue!20!white, draw, inner sep=6pt] (sensor1cal) {};
+    \node[below left, align=right] at (sensor1cal.north east) {{\tiny Normalized}\\[-0.5em]{\tiny sensor 1}};
+
+    \node[fit={(input2.west |- addu2.south) ($(delta2.north -| addn1.east) + (0.1, 0.0)$)}, fill=myred!20!white, draw, inner sep=6pt] (sensor2cal) {};
+    \node[below left, align=right] at (sensor2cal.north east) {{\tiny Normalized}\\[-0.5em]{\tiny sensor 2}};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

sensor_fusion_dynamic_uncertainty.png +

+

Figure 7: Sensor fusion architecture with sensor dynamics uncertainty

+
+
+
+ +
+

8. Uncertainty set of the super sensor dynamics

+
+
+
\definecolor{myblue}{rgb}{0, 0.447, 0.741}
+\definecolor{myred}{rgb}{0.8500, 0.325, 0.098}
+
+\begin{tikzpicture}
+  \begin{scope}[shift={(4, 0)}]
+
+    % Uncertainty Circle
+    \node[draw, circle, fill=black!20!white, minimum size=3.6cm] (c) at (0, 0) {};
+    \path[draw, fill=myblue!20!white] (0, 0) circle [radius=1.0];
+    \path[draw, fill=myred!20!white] (135:1.0) circle [radius=0.8];
+    \path[draw, dashed] (0, 0) circle [radius=1.0];
+
+    % Center of Circle
+    \node[below] at (0, 0){$1$};
+
+    \draw[<->] (0, 0)   node[branch]{} -- coordinate[midway](r1) ++(45:1.0);
+    \draw[<->] (135:1.0)node[branch]{} -- coordinate[midway](r2) ++(135:0.8);
+
+    \node[] (l1) at (2, 1.5) {$|w_1 H_1|$};
+    \draw[->, out=-90, in=0] (l1.south) to (r1);
+
+    \node[] (l2) at (-3.2, 1.2) {$|w_2 H_2|$};
+    \draw[->, out=0, in=-180] (l2.east) to (r2);
+
+    \draw[<->] (0, 0) -- coordinate[near end](r3) ++(200:1.8);
+    \node[] (l3) at (-2.5, -1.5) {$|w_1 H_1| + |w_2 H_2|$};
+    \draw[->, out=90, in=-90] (l3.north) to (r3);
+  \end{scope}
+
+  % Real and Imaginary Axis
+  \draw[->] (-0.5, 0) -- (7.0, 0) node[below left]{Re};
+  \draw[->] (0, -1.7) -- (0, 1.7) node[below left]{Im};
+
+  \draw[dashed] (0, 0) -- (tangent cs:node=c,point={(0, 0)},solution=2);
+  \draw[dashed] (1, 0) arc (0:28:1) node[midway, right]{$\Delta \phi_\text{max}$};
+\end{tikzpicture}
+
+
+ + +
+

uncertainty_set_super_sensor.png +

+

Figure 8: Uncertainty region of the super sensor dynamics in the complex plane (grey circle). The contribution of both sensors 1 and 2 to the total uncertainty are represented respectively by a blue circle and a red circle. The frequency dependency \(\omega\) is here omitted.

+
+
+
+ +
+

9. Generalized plant used for \(\mathcal{H}_\infty\) synthesis of complementary filters

+
+
+
\begin{tikzpicture}
+  \node[block={4.0cm}{3.0cm}, fill=black!10!white] (P) {};
+  \node[above] at (P.north) {$P(s)$};
+
+  \node[block, below=0.2 of P, opacity=0] (H2) {$H_2(s)$};
+
+  \coordinate[] (inputw)  at ($(P.south west)!0.75!(P.north west) + (-0.7, 0)$);
+  \coordinate[] (inputu)  at ($(P.south west)!0.35!(P.north west) + (-0.7, 0)$);
+
+  \coordinate[] (output1) at ($(P.south east)!0.75!(P.north east) + ( 0.7, 0)$);
+  \coordinate[] (output2) at ($(P.south east)!0.35!(P.north east) + ( 0.7, 0)$);
+  \coordinate[] (outputv) at ($(P.south east)!0.1!(P.north east) + ( 0.7, 0)$);
+
+  \node[block, left=1.4 of output1] (W1){$W_1(s)$};
+  \node[block, left=1.4 of output2] (W2){$W_2(s)$};
+  \node[addb={+}{}{}{}{-}, left=of W1] (sub) {};
+
+  \draw[->] (inputw) node[above right]{$w$} -- (sub.west);
+  \draw[->] (inputu) node[above right]{$u$} -- (W2.west);
+  \draw[->] (inputu-|sub) node[branch]{} -- (sub.south);
+  \draw[->] (sub.east) -- (W1.west);
+  \draw[->] ($(sub.west)+(-0.6, 0)$) node[branch]{} |- (outputv) node[above left]{$v$};
+  \draw[->] (W1.east) -- (output1)node[above left]{$z_1$};
+  \draw[->] (W2.east) -- (output2)node[above left]{$z_2$};
+\end{tikzpicture}
+
+
+ + +
+

h_infinity_robust_fusion_plant.png +

+

Figure 9: Generalized plant used for \(\mathcal{H}_\infty\) synthesis of complementary filters

+
+
+
+ +
+

10. Architecture used for \(\mathcal{H}_\infty\) synthesis of complementary filters

+
+
+
\begin{tikzpicture}
+  \node[block={4.0cm}{3.0cm}, fill=black!10!white] (P) {};
+  \node[above] at (P.north) {$P(s)$};
+
+  \node[block, below=0.2 of P] (H2) {$H_2(s)$};
+
+  \coordinate[] (inputw)  at ($(P.south west)!0.75!(P.north west) + (-0.7, 0)$);
+  \coordinate[] (inputu)  at ($(P.south west)!0.35!(P.north west) + (-0.4, 0)$);
+
+  \coordinate[] (output1) at ($(P.south east)!0.75!(P.north east) + ( 0.7, 0)$);
+  \coordinate[] (output2) at ($(P.south east)!0.35!(P.north east) + ( 0.7, 0)$);
+  \coordinate[] (outputv) at ($(P.south east)!0.1!(P.north east) + ( 0.4, 0)$);
+
+  \node[block, left=1.4 of output1] (W1){$W_1(s)$};
+  \node[block, left=1.4 of output2] (W2){$W_2(s)$};
+  \node[addb={+}{}{}{}{-}, left=of W1] (sub) {};
+
+  \draw[->] (inputw) node[above right]{$w$} -- (sub.west);
+  \draw[->] (inputu-|sub) node[branch]{} -- (sub.south);
+  \draw[->] (sub.east) -- (W1.west);
+  \draw[->] ($(sub.west)+(-0.6, 0)$) node[branch]{} |- (outputv) |- (H2.east);
+  \draw[->] (H2.west) -| (inputu) -- (W2.west);
+  \draw[->] (W1.east) -- (output1)node[above left]{$z_1$};
+  \draw[->] (W2.east) -- (output2)node[above left]{$z_2$};
+\end{tikzpicture}
+
+
+ + +
+

h_infinity_robust_fusion_fb.png +

+

Figure 10: Generalized plant with the synthesized filter

+
+
+
+ +
+

11. LIGO Sensor Fusion Architecture

+
+
+
\definecolor{myblue}{rgb}{0, 0.447, 0.741}
+\definecolor{myred}{rgb}{0.8500, 0.325, 0.098}
+
+\begin{tikzpicture}
+  \node[block, align=center] (position)    at (0, 2.2) {Position\\Sensor};
+  \node[block, align=center] (seismometer) at (0, 1.0) {Seismometer};
+  \node[block, align=center] (geophone)    at (0,-0.6) {Geophone};
+
+  \node[branch, left=0.4 of seismometer] (x);
+
+  \node[block, right=1.1 of seismometer](H1){$L_2(s)$};
+  \node[block](H2) at (H1|-geophone)        {$H_2(s)$};
+
+  \node[addb] (add) at (4, 0){};
+  \node[block, right=1.1 of add](H2p)   {$H_1(s)$};
+  \node[block] (H1p) at (H2p|-position) {$L_1(s)$};
+
+  \node[addb] (addp) at (7, 1.0){};
+
+  \draw[->] ($(x)+(-1.0, 0)$)  -- (seismometer.west);
+  \draw[->] (x.center)         |- (position.west);
+  \draw[->] (x.center)         |- (geophone.west);
+  \draw[->] (position.east)    -- (H1p.west);
+  \draw[->] (seismometer.east) -- (H1.west);
+  \draw[->] (geophone.east)    -- (H2.west);
+  \draw[->] (H1) -| (add.north);
+  \draw[->] (H2) -| (add.south);
+  \draw[->] (add.east) -- (H2p.west);
+  \draw[->] (H1p) -| (addp.north);
+  \draw[->] (H2p) -| (addp.south);
+  \draw[->] (addp.east) -- ++(1.0, 0);
+
+  \begin{scope}[on background layer]
+    \node[fit={(x.west|-geophone.south) (position.north-|addp.east)}, fill=black!10!white, draw, inner sep=6pt] (supersensor) {};
+    \node[below] at (supersensor.north) {Super Sensor};
+
+    \node[fit={(x.west|-seismometer.north) (add.east|-geophone.south)}, fill=black!20!white, draw, inner sep=3pt] (superinertialsensor) {};
+    \node[] at (superinertialsensor.center) {"Inertial" Super Sensor};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

ligo_super_sensor_architecture.png +

+

Figure 11: Simplified block diagram of the sensor blending strategy for the first stage at the LIGO

+
+
+
+ +
+

12. Closed-Loop Complementary Filters

+
+
+
\begin{tikzpicture}
+  \node[addb={+}{}{}{}{-}] (addfb) at (0, 0){};
+  \node[block, right=1 of addfb] (L){$L(s)$};
+  \node[addb={+}{}{}{}{}, right=1 of L] (adddy){};
+
+  \draw[<-] (addfb.west) -- ++(-1, 0) node[above right]{$\hat{x}_2$};
+  \draw[->] (addfb.east) -- (L.west);
+  \draw[->] (L.east) -- (adddy.west);
+  \draw[->] (adddy.east) -- ++(1.4, 0) node[above left]{$\hat{x}$};
+  \draw[->] ($(adddy.east) + (0.5, 0)$) node[branch]{} -- ++(0, -0.8) coordinate(botc) -| (addfb.south);
+  \draw[<-] (adddy.north) -- ++(0, 1) node[below right]{$\hat{x}_1$};
+
+  \begin{scope}[on background layer]
+    \node[fit={(L.north-|addfb.west) (botc)}, fill=black!10!white, draw, inner sep=6pt] (supersensor) {};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

feedback_sensor_fusion.png +

+

Figure 12: “Closed-Loop” complementary filters

+
+
+
+ +
+

13. Closed-Loop Fusion Architecture

+
+
+
\begin{tikzpicture}
+  \node[addb={+}{}{}{}{-}] (addfb) at (0, 0){};
+  \node[block, right=1 of addfb] (L){$L(s)$};
+  \node[addb={+}{}{}{}{}, right=1 of L] (adddy){};
+
+  \node[block, left=1.2 of addfb]    (sensor2){Sensor 2};
+  \node[block, above=0.4 of sensor2] (sensor1){Sensor 1};
+  \node[branch, left=0.6 of sensor2] (x){};
+
+  \draw[->] (addfb.east) -- (L.west);
+  \draw[->] (L.east) -- (adddy.west);
+  \draw[->] (adddy.east) -- ++(1.4, 0) node[above left]{$\hat{x}$};
+  \draw[->] ($(adddy.east) + (0.5, 0)$) node[branch]{} -- ++(0, -0.8) coordinate(botc) -| (addfb.south);
+  \draw[->] (x.center) |- (sensor1.west);
+  \draw[->] ($(x)-(0.8,0)$) node[above right]{$x$} -- (sensor2.west);
+  \draw[->] (sensor2.east)node[above right=0 and 0.25]{$\hat{x}_2$} -- (addfb.west);
+  \draw[->] (sensor1.east)node[above right=0 and 0.25]{$\hat{x}_1$} -| (adddy.north);
+
+  \begin{scope}[on background layer]
+    \node[fit={(x|-sensor1.north) (botc)}, fill=black!10!white, draw, inner sep=9pt] (supersensor) {};
+    \node[fit={(sensor1.north-|addfb.west) (botc)}, fill=black!20!white, draw, inner sep=6pt] (feedbackfilter) {};
+    \node[fit={(sensor2.west|-botc) (sensor1.north east)}, fill=black!20!white, draw, inner sep=6pt] (sensors) {};
+    \node[above, align=center] at (sensors.south) {{\tiny Normalized}\\[-0.5em]{\tiny sensors}};
+    \node[below, align=center] at (feedbackfilter.north) {{\tiny "Closed-Loop"}\\[-0.5em]{\tiny complementary filters}};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

feedback_sensor_fusion_arch.png +

+

Figure 13: Classical feedback architecture used for sensor fusion

+
+
+
+ +
+

14. Feedback Loop Sensor Fusion Architecture

+
+
+
\begin{tikzpicture}
+  \node[block] (W2) at (0,0) {$W_2(s)$};
+  \node[addb={+}{}{}{}{-}, right=0.8 of W2] (addfb){};
+  \node[addb={+}{}{}{}{}, right=4.5 of W2] (adddy){};
+  \node[block, above=0.8 of adddy] (W1){$W_1(s)$};
+
+  \draw[<-] (W2.west) -- ++(-0.8, 0) node[above right]{$w_2$};
+  \draw[->] (W2.east) -- (addfb.west) node[above left]{$\tilde{w}_2$};
+  \draw[->] (addfb.east) -- ++(1, 0) node[above left]{$v$};
+  \draw[<-] (adddy.west) -- ++(-1, 0) node[above right]{$u$};
+  \draw[->] (adddy.east) -- ++(1.4, 0) node[above left]{$z$};
+  \draw[->] (W1.south) -- (adddy.north) node[above right]{$\tilde{w}_1$};
+  \draw[<-] (W1.north) -- ++(0, 0.8) node[below right]{$w_1$};
+  \draw[->] ($(adddy.east) + (0.5, 0)$) node[branch]{} -- ++(0, -0.8) -| (addfb.south);
+\end{tikzpicture}
+
+
+ + +
+

feedback_synthesis_architecture.png +

+

Figure 14: Feedback architecture with included weights

+
+
+
+ +
+

15. Feedback Sensor Fusion - Generalized Plant

+
+
+
\begin{tikzpicture}
+  \node[block={4.5cm}{3.0cm}, fill=black!10!white] (P) {};
+  \node[above] at (P.north) {$P_L(s)$};
+
+  \coordinate[] (inputw1) at ($(P.south west)!0.75!(P.north west) + (-0.7, 0)$);
+  \coordinate[] (inputw2) at ($(P.south west)!0.40!(P.north west) + (-0.7, 0)$);
+  \coordinate[] (inputu)  at ($(P.south west)!0.15!(P.north west) + (-0.7, 0)$);
+
+  \coordinate[] (outputz) at ($(P.south east)!0.75!(P.north east) + ( 0.7, 0)$);
+  \coordinate[] (outputv) at ($(P.south east)!0.40!(P.north east) + ( 0.7, 0)$);
+
+  \node[block, right=1.2 of inputw2] (W2){$W_2(s)$};
+  \node[block, right=1.2 of inputw1] (W1){$W_1(s)$};
+  \node[addb={+}{}{}{}{}, right=0.8 of W1] (add) {};
+  \node[addb={+}{}{-}{}{},  right=1.8 of W2] (sub) {};
+
+  \draw[->] (inputw2) node[above right]{$w_2$} -- (W2.west);
+  \draw[->] (inputw1) node[above right]{$w_1$} -- (W1.west);
+  \draw[->] (inputu)  node[above right]{$u$}   -| (add.south);
+  \draw[->] (W2.east) -- (sub.west);
+  \draw[->] (W1.east) -- (add.west);
+  \draw[->] (add.east) -- (outputz)node[above left]{$z$};
+  \draw[->] (sub.east) -- (outputv)node[above left]{$v$};
+  \draw[->] (add-|sub) node[branch]{} -- (sub.north);
+\end{tikzpicture}
+
+
+ + +
+

feedback_synthesis_architecture_generalized_plant.png +

+

Figure 15: Generalized plant used for the \(\mathcal{H}_\infty\) synthesis of “closed-loop” complementary filters

+
+
+
+ +
+

16. Sensor Fusion - Sequential

+
+
+
\begin{tikzpicture}
+  \node[branch] (x) at (0, 0);
+
+  \node[block, right=0.4 of x] (sensor2) {Sensor 2};
+  \node[block, above=0.4 of sensor2] (sensor1) {Sensor 1};
+  \node[block, below=0.4 of sensor2] (sensor3) {Sensor 3};
+
+  \node[block, right=1.1 of sensor1](H1){$H_1(s)$};
+  \node[block, right=1.1 of sensor2](H2){$H_2(s)$};
+  \node[addb] (add) at ($0.5*(H1.east)+0.5*(H2.east)+(0.6, 0)$){};
+
+  \node[block, right=0.8 of add](H1p)  {$H_1^\prime(s)$};
+  \node[block] (H2p) at (H1p|-sensor3) {$H_2^\prime(s)$};
+
+  \node[addb] (addp) at ($0.5*(H1p.east)+0.5*(H2p.east)+(0.6, 0)$){};
+
+  \draw[->] ($(x)+(-0.8, 0)$) node[above right]{$x$} -- (sensor2.west);
+  \draw[->] (x.center)     |- (sensor1.west);
+  \draw[->] (x.center)     |- (sensor3.west);
+  \draw[->] (sensor1.east) -- (H1.west)  node[above left]{$\hat{x}_1$};
+  \draw[->] (sensor2.east) -- (H2.west)  node[above left]{$\hat{x}_2$};
+  \draw[->] (sensor3.east) -- (H2p.west) node[above left]{$\hat{x}_3$};
+  \draw[->] (H1)           -| (add.north);
+  \draw[->] (H2)           -| (add.south);
+  \draw[->] (add.east)     -- (H1p.west) node[above left]{$\hat{x}_{12}$};
+  \draw[->] (H1p)          -| (addp.north);
+  \draw[->] (H2p)          -| (addp.south);
+  \draw[->] (addp.east)    -- ++(0.8, 0) node[above left]{$\hat{x}$};
+
+  \begin{scope}[on background layer]
+    \node[fit={(x.west|-sensor3.south) (sensor1.north-|addp.east)}, fill=black!10!white, draw, inner sep=6pt] (supersensor) {};
+
+    \node[fit={(x.west|-sensor1.north) (add.east|-sensor2.south)}, fill=black!20!white, draw, inner sep=3pt] (superinertialsensor) {};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

sensor_fusion_three_sequential.png +

+

Figure 16: Sequential fusion

+
+
+
+ +
+

17. Sensor Fusion - Parallel

+
+
+
\begin{tikzpicture}
+  \node[branch] (x) at (0, 0);
+  \node[block, right=0.4 of x] (sensor2) {Sensor 2};
+  \node[block, above=0.3 of sensor2] (sensor1) {Sensor 1};
+  \node[block, below=0.3 of sensor2] (sensor3) {Sensor 3};
+
+  \node[block, right=1.1 of sensor1](H1){$H_1(s)$};
+  \node[block, right=1.1 of sensor2](H2){$H_2(s)$};
+  \node[block, right=1.1 of sensor3](H3){$H_3(s)$};
+
+  \node[addb, right=0.6 of H2](add){};
+
+  \draw[->] (x.center)                             |- (sensor1.west);
+  \draw[] ($(x)+(-0.8, 0)$) node[above right]{$x$} -- (sensor2.west);
+  \draw[->] (x.center)                             |- (sensor3.west);
+
+  \draw[->] (sensor1.east) -- (H1.west) node[above left]{$\hat{x}_1$};
+  \draw[->] (sensor2.east) -- (H2.west) node[above left]{$\hat{x}_2$};
+  \draw[->] (sensor3.east) -- (H3.west) node[above left]{$\hat{x}_3$};
+
+  \draw[->] (H1) -| (add.north);
+  \draw[->] (H2) -- (add.west);
+  \draw[->] (H3) -| (add.south);
+
+  \draw[->] (add.east) -- ++(0.8, 0) node[above left]{$\hat{x}$};
+
+  \begin{scope}[on background layer]
+    \node[fit={(H3.south-|x) (H1.north-|add.east)}, fill=black!10!white, draw, inner sep=6pt] (supersensor) {};
+  \end{scope}
+\end{tikzpicture}
+
+
+ + +
+

sensor_fusion_three_parallel.png +

+

Figure 17: Parallel fusion

+
+
+
+ +
+

18. Architecture for \(\mathcal{H}_\infty\) synthesis of three complementary filters

+
+
+
  \begin{tikzpicture}
+     \node[block={5.0cm}{4.5cm}, fill=black!10!white] (P) {};
+     \node[above] at (P.north) {$P_3(s)$};
+
+     \coordinate[] (inputw)  at ($(P.south west)!0.8!(P.north west) + (-0.7, 0)$);
+     \coordinate[] (inputu)  at ($(P.south west)!0.4!(P.north west) + (-0.7, 0)$);
+
+     \coordinate[] (output1) at ($(P.south east)!0.8!(P.north east)  + (0.7, 0)$);
+     \coordinate[] (output2) at ($(P.south east)!0.55!(P.north east) + (0.7, 0)$);
+     \coordinate[] (output3) at ($(P.south east)!0.3!(P.north east)  + (0.7, 0)$);
+     \coordinate[] (outputv) at ($(P.south east)!0.1!(P.north east)  + (0.7, 0)$);
+
+     \node[block, left=1.4 of output1] (W1){$W_1(s)$};
+     \node[block, left=1.4 of output2] (W2){$W_2(s)$};
+     \node[block, left=1.4 of output3] (W3){$W_3(s)$};
+     \node[addb={+}{}{}{}{-}, left=of W1] (sub1) {};
+     \node[addb={+}{}{}{}{-}, left=of sub1] (sub2) {};
+
+     \node[block, below=0.3 of P, opacity=0] (H) {$\begin{bmatrix}H_2(s) \\ H_3(s)\end{bmatrix}$};
+
+     \draw[->] (inputw) node[above right](w){$w$} -- (sub2.west);
+     \draw[->] (W3-|sub1)node[branch]{} -- (sub1.south);
+     \draw[->] (W2-|sub2)node[branch]{} -- (sub2.south);
+     \draw[->] ($(sub2.west)+(-0.5, 0)$) node[branch]{} |- (outputv);
+     \draw[->] (inputu|-W2) -- (W2.west);
+     \draw[->] (inputu|-W3) -- (W3.west);
+
+     \draw[->] (sub2.east) -- (sub1.west);
+     \draw[->] (sub1.east) -- (W1.west);
+     \draw[->] (W1.east) -- (output1)node[above left](z){$z_1$};
+     \draw[->] (W2.east) -- (output2)node[above left]{$z_2$};
+     \draw[->] (W3.east) -- (output3)node[above left]{$z_3$};
+     \node[above] at (W2-|w){$u_1$};
+     \node[above] at (W3-|w){$u_2$};
+     \node[above] at (outputv-|z){$v$};
+  \end{tikzpicture}
+
+
+ + +
+

comp_filter_three_hinf_gen_plant.png +

+

Figure 18: Generalized plant for the \(\mathcal{H}_\infty\) synthesis of three complementary filters

+
+
+
+
+

19. Architecture for \(\mathcal{H}_\infty\) synthesis of three complementary filters

+
+
+
  \begin{tikzpicture}
+     \node[block={5.0cm}{4.5cm}, fill=black!10!white] (P) {};
+     \node[above] at (P.north) {$P_3(s)$};
+
+     \coordinate[] (inputw)  at ($(P.south west)!0.8!(P.north west) + (-0.7, 0)$);
+     \coordinate[] (inputu)  at ($(P.south west)!0.4!(P.north west) + (-0.7, 0)$);
+
+     \coordinate[] (output1) at ($(P.south east)!0.8!(P.north east)  + (0.7, 0)$);
+     \coordinate[] (output2) at ($(P.south east)!0.55!(P.north east) + (0.7, 0)$);
+     \coordinate[] (output3) at ($(P.south east)!0.3!(P.north east)  + (0.7, 0)$);
+     \coordinate[] (outputv) at ($(P.south east)!0.1!(P.north east)  + (0.7, 0)$);
+
+     \node[block, left=1.4 of output1] (W1){$W_1(s)$};
+     \node[block, left=1.4 of output2] (W2){$W_2(s)$};
+     \node[block, left=1.4 of output3] (W3){$W_3(s)$};
+     \node[addb={+}{}{}{}{-}, left=of W1] (sub1) {};
+     \node[addb={+}{}{}{}{-}, left=of sub1] (sub2) {};
+
+     \node[block, below=0.3 of P] (H) {$\begin{bmatrix}H_2(s) \\ H_3(s)\end{bmatrix}$};
+
+     \draw[->] (inputw) node[above right](w){$w$} -- (sub2.west);
+     \draw[->] (W3-|sub1)node[branch]{} -- (sub1.south);
+     \draw[->] (W2-|sub2)node[branch]{} -- (sub2.south);
+     \draw[->] ($(sub2.west)+(-0.5, 0)$) node[branch]{} |- (outputv) |- (H.east);
+     \draw[->] ($(H.south west)!0.7!(H.north west)$) -| (inputu|-W2) -- (W2.west);
+     \draw[->] ($(H.south west)!0.3!(H.north west)$) -| ($(inputu|-W3)+(0.4, 0)$) -- (W3.west);
+
+     \draw[->] (sub2.east) -- (sub1.west);
+     \draw[->] (sub1.east) -- (W1.west);
+     \draw[->] (W1.east) -- (output1)node[above left](z){$z_1$};
+     \draw[->] (W2.east) -- (output2)node[above left]{$z_2$};
+     \draw[->] (W3.east) -- (output3)node[above left]{$z_3$};
+     \node[above] at (W2-|w){$u_1$};
+     \node[above] at (W3-|w){$u_2$};
+     \node[above] at (outputv-|z){$v$};
+  \end{tikzpicture}
+
+
+ + +
+

comp_filter_three_hinf_fb.png +

+

Figure 19: Generalized plant with the synthesized filter for the \(\mathcal{H}_\infty\) synthesis of three complementary filters

+
+
+
+
+
+

Author: Thomas Dehaeze

+

Created: 2021-09-01 mer. 10:15

+
+ + diff --git a/tikz/index.org b/tikz/dehaeze21_desig_compl_filte_tikz.org similarity index 82% rename from tikz/index.org rename to tikz/dehaeze21_desig_compl_filte_tikz.org index 29e59ec..a106904 100644 --- a/tikz/index.org +++ b/tikz/dehaeze21_desig_compl_filte_tikz.org @@ -1,4 +1,4 @@ -#+TITLE: Complementary Filters Shaping Using $\mathcal{H}_\infty$ Synthesis - Tikz Figures +#+TITLE: A new method of designing complementary filters for sensor fusion using the $\mathcal{H}_\infty$ synthesis - Tikz Figures :DRAWER: #+HTML_LINK_HOME: ../index.html #+HTML_LINK_UP: ../index.html @@ -59,7 +59,7 @@ Configuration file is accessible [[file:config.org][here]]. #+end_src #+name: fig:sensor_fusion_overview -#+caption: Sensor Fusion Architecture - Overview +#+caption: Schematic of a sensor fusion architecture using complementary filters #+RESULTS: [[file:figs/sensor_fusion_overview.png]] @@ -82,7 +82,7 @@ Configuration file is accessible [[file:config.org][here]]. #+end_src #+name: fig:sensor_model -#+caption: Basic Sensor Model +#+caption: Basic sensor model consisting of a noise input $n_i$ and a linear time invariant transfer function $G_i(s)$ #+RESULTS: [[file:figs/sensor_model.png]] @@ -110,7 +110,7 @@ Configuration file is accessible [[file:config.org][here]]. #+end_src #+name: fig:sensor_model_calibrated -#+caption: Calibrated Sensor +#+caption: Normalized sensors using the inverse of an estimate $\hat{G}_i(s)$ of the sensor dynamics #+RESULTS: [[file:figs/sensor_model_calibrated.png]] @@ -164,7 +164,7 @@ Configuration file is accessible [[file:config.org][here]]. #+end_src #+name: fig:fusion_super_sensor -#+caption: Sensor Fusion Architecture ([[./figs/fusion_super_sensor.png][png]], [[./figs/fusion_super_sensor.pdf][pdf]], [[./figs/fusion_super_sensor.tex][tex]]). +#+caption: Sensor fusion architecture with two normalized sensors #+RESULTS: [[file:figs/fusion_super_sensor.png]] @@ -200,7 +200,7 @@ Configuration file is accessible [[file:config.org][here]]. #+end_src #+name: fig:sensor_model_uncertainty -#+caption: Input Uncertainty +#+caption: Sensor with multiplicative input uncertainty #+RESULTS: [[file:figs/sensor_model_uncertainty.png]] @@ -229,7 +229,7 @@ Configuration file is accessible [[file:config.org][here]]. #+end_src #+name: fig:sensor_model_uncertainty_simplified -#+caption: Input Uncertainty +#+caption: Simplified sensor model #+RESULTS: [[file:figs/sensor_model_uncertainty_simplified.png]] @@ -291,7 +291,7 @@ Configuration file is accessible [[file:config.org][here]]. #+end_src #+name: fig:sensor_fusion_dynamic_uncertainty -#+caption: Sensor fusion architecture with sensor dynamics uncertainty ([[./figs/sensor_fusion_dynamic_uncertainty.png][png]], [[./figs/sensor_fusion_dynamic_uncertainty.pdf][pdf]], [[./figs/sensor_fusion_dynamic_uncertainty.tex][tex]]). +#+caption: Sensor fusion architecture with sensor dynamics uncertainty #+RESULTS: [[file:figs/sensor_fusion_dynamic_uncertainty.png]] @@ -331,21 +331,23 @@ Configuration file is accessible [[file:config.org][here]]. \draw[->] (0, -1.7) -- (0, 1.7) node[below left]{Im}; \draw[dashed] (0, 0) -- (tangent cs:node=c,point={(0, 0)},solution=2); - \draw[dashed] (1, 0) arc (0:28:1) node[midway, right]{$\Delta \phi$}; + \draw[dashed] (1, 0) arc (0:28:1) node[midway, right]{$\Delta \phi_\text{max}$}; \end{tikzpicture} #+end_src #+name: fig:uncertainty_set_super_sensor -#+caption: Uncertainty region of the super sensor dynamics in the complex plane (solid circle), of the sensor 1 (dotted circle) and of the sensor 2 (dashed circle) ([[./figs/uncertainty_set_super_sensor.png][png]], [[./figs/uncertainty_set_super_sensor.pdf][pdf]], [[./figs/uncertainty_set_super_sensor.tex][tex]]). +#+caption: Uncertainty region of the super sensor dynamics in the complex plane (grey circle). The contribution of both sensors 1 and 2 to the total uncertainty are represented respectively by a blue circle and a red circle. The frequency dependency $\omega$ is here omitted. #+RESULTS: [[file:figs/uncertainty_set_super_sensor.png]] -* Architecture used for $\mathcal{H}_\infty$ synthesis of complementary filters -#+begin_src latex :file h_infinity_robust_fusion.pdf :tangle figs/h_infinity_robust_fusion.tex :exports both +* Generalized plant used for $\mathcal{H}_\infty$ synthesis of complementary filters +#+begin_src latex :file h_infinity_robust_fusion_plant.pdf :tangle figs/h_infinity_robust_fusion_plant.tex :exports both \begin{tikzpicture} \node[block={4.0cm}{3.0cm}, fill=black!10!white] (P) {}; \node[above] at (P.north) {$P(s)$}; + \node[block, below=0.2 of P, opacity=0] (H2) {$H_2(s)$}; + \coordinate[] (inputw) at ($(P.south west)!0.75!(P.north west) + (-0.7, 0)$); \coordinate[] (inputu) at ($(P.south west)!0.35!(P.north west) + (-0.7, 0)$); @@ -357,8 +359,6 @@ Configuration file is accessible [[file:config.org][here]]. \node[block, left=1.4 of output2] (W2){$W_2(s)$}; \node[addb={+}{}{}{}{-}, left=of W1] (sub) {}; - % \node[block, below=0.3 of P] (H2) {$H_2(s)$}; - \draw[->] (inputw) node[above right]{$w$} -- (sub.west); \draw[->] (inputu) node[above right]{$u$} -- (W2.west); \draw[->] (inputu-|sub) node[branch]{} -- (sub.south); @@ -369,10 +369,44 @@ Configuration file is accessible [[file:config.org][here]]. \end{tikzpicture} #+end_src -#+name: fig:h_infinity_robust_fusion -#+caption: Architecture used for $\mathcal{H}_\infty$ synthesis of complementary filters ([[./figs/h_infinity_robust_fusion.png][png]], [[./figs/h_infinity_robust_fusion.pdf][pdf]], [[./figs/h_infinity_robust_fusion.tex][tex]]). +#+name: fig:h_infinity_robust_fusion_plant +#+caption: Generalized plant used for $\mathcal{H}_\infty$ synthesis of complementary filters #+RESULTS: -[[file:figs/h_infinity_robust_fusion.png]] +[[file:figs/h_infinity_robust_fusion_plant.png]] + +* Architecture used for $\mathcal{H}_\infty$ synthesis of complementary filters +#+begin_src latex :file h_infinity_robust_fusion_fb.pdf :tangle figs/h_infinity_robust_fusion_fb.tex :exports both +\begin{tikzpicture} + \node[block={4.0cm}{3.0cm}, fill=black!10!white] (P) {}; + \node[above] at (P.north) {$P(s)$}; + + \node[block, below=0.2 of P] (H2) {$H_2(s)$}; + + \coordinate[] (inputw) at ($(P.south west)!0.75!(P.north west) + (-0.7, 0)$); + \coordinate[] (inputu) at ($(P.south west)!0.35!(P.north west) + (-0.4, 0)$); + + \coordinate[] (output1) at ($(P.south east)!0.75!(P.north east) + ( 0.7, 0)$); + \coordinate[] (output2) at ($(P.south east)!0.35!(P.north east) + ( 0.7, 0)$); + \coordinate[] (outputv) at ($(P.south east)!0.1!(P.north east) + ( 0.4, 0)$); + + \node[block, left=1.4 of output1] (W1){$W_1(s)$}; + \node[block, left=1.4 of output2] (W2){$W_2(s)$}; + \node[addb={+}{}{}{}{-}, left=of W1] (sub) {}; + + \draw[->] (inputw) node[above right]{$w$} -- (sub.west); + \draw[->] (inputu-|sub) node[branch]{} -- (sub.south); + \draw[->] (sub.east) -- (W1.west); + \draw[->] ($(sub.west)+(-0.6, 0)$) node[branch]{} |- (outputv) |- (H2.east); + \draw[->] (H2.west) -| (inputu) -- (W2.west); + \draw[->] (W1.east) -- (output1)node[above left]{$z_1$}; + \draw[->] (W2.east) -- (output2)node[above left]{$z_2$}; +\end{tikzpicture} +#+end_src + +#+name: fig:h_infinity_robust_fusion_fb +#+caption: Generalized plant with the synthesized filter +#+RESULTS: +[[file:figs/h_infinity_robust_fusion_fb.png]] * LIGO Sensor Fusion Architecture #+begin_src latex :file ligo_super_sensor_architecture.pdf :tangle figs/ligo_super_sensor_architecture.tex :exports both @@ -419,7 +453,7 @@ Configuration file is accessible [[file:config.org][here]]. #+end_src #+name: fig:ligo_super_sensor_architecture -#+caption: ([[./figs/ligo_super_sensor_architecture.png][png]], [[./figs/ligo_super_sensor_architecture.pdf][pdf]], [[./figs/ligo_super_sensor_architecture.tex][tex]]). +#+caption: Simplified block diagram of the sensor blending strategy for the first stage at the LIGO #+RESULTS: [[file:figs/ligo_super_sensor_architecture.png]] @@ -439,13 +473,12 @@ Configuration file is accessible [[file:config.org][here]]. \begin{scope}[on background layer] \node[fit={(L.north-|addfb.west) (botc)}, fill=black!10!white, draw, inner sep=6pt] (supersensor) {}; - % \node[below] at (supersensor.north) {Super Sensor}; \end{scope} \end{tikzpicture} #+end_src #+name: fig:feedback_sensor_fusion -#+caption: "Closed-Loop" complementary filters ([[./figs/feedback_sensor_fusion.png][png]], [[./figs/feedback_sensor_fusion.pdf][pdf]], [[./figs/feedback_sensor_fusion.tex][tex]]). +#+caption: "Closed-Loop" complementary filters #+RESULTS: [[file:figs/feedback_sensor_fusion.png]] @@ -475,37 +508,36 @@ Configuration file is accessible [[file:config.org][here]]. \node[fit={(sensor2.west|-botc) (sensor1.north east)}, fill=black!20!white, draw, inner sep=6pt] (sensors) {}; \node[above, align=center] at (sensors.south) {{\tiny Normalized}\\[-0.5em]{\tiny sensors}}; \node[below, align=center] at (feedbackfilter.north) {{\tiny "Closed-Loop"}\\[-0.5em]{\tiny complementary filters}}; - % \node[above, align=center] at (supersensor.north) {Super Sensor}; \end{scope} \end{tikzpicture} #+end_src #+name: fig:feedback_sensor_fusion_arch -#+caption: ([[./figs/feedback_sensor_fusion_arch.png][png]], [[./figs/feedback_sensor_fusion_arch.pdf][pdf]], [[./figs/feedback_sensor_fusion_arch.tex][tex]]). +#+caption: Classical feedback architecture used for sensor fusion #+RESULTS: [[file:figs/feedback_sensor_fusion_arch.png]] -* TODO Feedback Loop Sensor Fusion Architecture +* Feedback Loop Sensor Fusion Architecture #+begin_src latex :file feedback_synthesis_architecture.pdf :tangle figs/feedback_synthesis_architecture.tex \begin{tikzpicture} - \node[block] (W2) at (0,0) {$W_2$}; - \node[addb={+}{}{}{}{-}, right=1 of W2] (addfb){}; + \node[block] (W2) at (0,0) {$W_2(s)$}; + \node[addb={+}{}{}{}{-}, right=0.8 of W2] (addfb){}; \node[addb={+}{}{}{}{}, right=4.5 of W2] (adddy){}; - \node[block, above=0.8 of adddy] (W1){$W_1$}; + \node[block, above=0.8 of adddy] (W1){$W_1(s)$}; - \draw[<-] (W2.west) -- ++(-1, 0) node[above right]{$w_2$}; + \draw[<-] (W2.west) -- ++(-0.8, 0) node[above right]{$w_2$}; \draw[->] (W2.east) -- (addfb.west) node[above left]{$\tilde{w}_2$}; \draw[->] (addfb.east) -- ++(1, 0) node[above left]{$v$}; \draw[<-] (adddy.west) -- ++(-1, 0) node[above right]{$u$}; \draw[->] (adddy.east) -- ++(1.4, 0) node[above left]{$z$}; \draw[->] (W1.south) -- (adddy.north) node[above right]{$\tilde{w}_1$}; - \draw[<-] (W1.north) -- ++(0, 1) node[below right]{$w_1$}; + \draw[<-] (W1.north) -- ++(0, 0.8) node[below right]{$w_1$}; \draw[->] ($(adddy.east) + (0.5, 0)$) node[branch]{} -- ++(0, -0.8) -| (addfb.south); \end{tikzpicture} #+end_src #+name: fig:feedback_synthesis_architecture -#+caption: ([[./figs/feedback_synthesis_architecture.png][png]], [[./figs/feedback_synthesis_architecture.pdf][pdf]], [[./figs/feedback_synthesis_architecture.tex][tex]]). +#+caption: Feedback architecture with included weights #+RESULTS: [[file:figs/feedback_synthesis_architecture.png]] @@ -539,10 +571,54 @@ Configuration file is accessible [[file:config.org][here]]. #+end_src #+name: fig:feedback_synthesis_architecture_generalized_plant -#+caption: ([[./figs/feedback_synthesis_architecture_generalized_plant.png][png]], [[./figs/feedback_synthesis_architecture_generalized_plant.pdf][pdf]], [[./figs/feedback_synthesis_architecture_generalized_plant.tex][tex]]). +#+caption: Generalized plant used for the $\mathcal{H}_\infty$ synthesis of "closed-loop" complementary filters #+RESULTS: [[file:figs/feedback_synthesis_architecture_generalized_plant.png]] +* Sensor Fusion - Sequential +#+begin_src latex :file sensor_fusion_three_sequential.pdf +\begin{tikzpicture} + \node[branch] (x) at (0, 0); + + \node[block, right=0.4 of x] (sensor2) {Sensor 2}; + \node[block, above=0.4 of sensor2] (sensor1) {Sensor 1}; + \node[block, below=0.4 of sensor2] (sensor3) {Sensor 3}; + + \node[block, right=1.1 of sensor1](H1){$H_1(s)$}; + \node[block, right=1.1 of sensor2](H2){$H_2(s)$}; + \node[addb] (add) at ($0.5*(H1.east)+0.5*(H2.east)+(0.6, 0)$){}; + + \node[block, right=0.8 of add](H1p) {$H_1^\prime(s)$}; + \node[block] (H2p) at (H1p|-sensor3) {$H_2^\prime(s)$}; + + \node[addb] (addp) at ($0.5*(H1p.east)+0.5*(H2p.east)+(0.6, 0)$){}; + + \draw[->] ($(x)+(-0.8, 0)$) node[above right]{$x$} -- (sensor2.west); + \draw[->] (x.center) |- (sensor1.west); + \draw[->] (x.center) |- (sensor3.west); + \draw[->] (sensor1.east) -- (H1.west) node[above left]{$\hat{x}_1$}; + \draw[->] (sensor2.east) -- (H2.west) node[above left]{$\hat{x}_2$}; + \draw[->] (sensor3.east) -- (H2p.west) node[above left]{$\hat{x}_3$}; + \draw[->] (H1) -| (add.north); + \draw[->] (H2) -| (add.south); + \draw[->] (add.east) -- (H1p.west) node[above left]{$\hat{x}_{12}$}; + \draw[->] (H1p) -| (addp.north); + \draw[->] (H2p) -| (addp.south); + \draw[->] (addp.east) -- ++(0.8, 0) node[above left]{$\hat{x}$}; + + \begin{scope}[on background layer] + \node[fit={(x.west|-sensor3.south) (sensor1.north-|addp.east)}, fill=black!10!white, draw, inner sep=6pt] (supersensor) {}; + + \node[fit={(x.west|-sensor1.north) (add.east|-sensor2.south)}, fill=black!20!white, draw, inner sep=3pt] (superinertialsensor) {}; + \end{scope} +\end{tikzpicture} +#+end_src + +#+name: fig:sensor_fusion_three_sequential +#+caption: Sequential fusion +#+RESULTS: +[[file:figs/sensor_fusion_three_sequential.png]] + * Sensor Fusion - Parallel #+begin_src latex :file sensor_fusion_three_parallel.pdf \begin{tikzpicture} @@ -578,57 +654,56 @@ Configuration file is accessible [[file:config.org][here]]. #+end_src #+name: fig:sensor_fusion_three_parallel -#+caption: Sensor Fusion Architecture - Overview +#+caption: Parallel fusion #+RESULTS: [[file:figs/sensor_fusion_three_parallel.png]] -* Sensor Fusion - Sequential -#+begin_src latex :file sensor_fusion_three_sequential.pdf -\begin{tikzpicture} - \node[branch] (x) at (0, 0); +* Architecture for $\mathcal{H}_\infty$ synthesis of three complementary filters +#+begin_src latex :file comp_filter_three_hinf_gen_plant.pdf :tangle figs/comp_filter_three_hinf_gen_plant.tex + \begin{tikzpicture} + \node[block={5.0cm}{4.5cm}, fill=black!10!white] (P) {}; + \node[above] at (P.north) {$P_3(s)$}; - \node[block, right=0.4 of x] (sensor2) {Sensor 2}; - \node[block, above=0.4 of sensor2] (sensor1) {Sensor 1}; - \node[block, below=0.4 of sensor2] (sensor3) {Sensor 3}; + \coordinate[] (inputw) at ($(P.south west)!0.8!(P.north west) + (-0.7, 0)$); + \coordinate[] (inputu) at ($(P.south west)!0.4!(P.north west) + (-0.7, 0)$); - \node[block, right=1.1 of sensor1](H1){$H_1(s)$}; - \node[block, right=1.1 of sensor2](H2){$H_2(s)$}; - \node[addb] (add) at ($0.5*(H1.east)+0.5*(H2.east)+(0.6, 0)$){}; + \coordinate[] (output1) at ($(P.south east)!0.8!(P.north east) + (0.7, 0)$); + \coordinate[] (output2) at ($(P.south east)!0.55!(P.north east) + (0.7, 0)$); + \coordinate[] (output3) at ($(P.south east)!0.3!(P.north east) + (0.7, 0)$); + \coordinate[] (outputv) at ($(P.south east)!0.1!(P.north east) + (0.7, 0)$); - \node[block, right=0.8 of add](H1p) {$H_1^\prime(s)$}; - \node[block] (H2p) at (H1p|-sensor3) {$H_2^\prime(s)$}; + \node[block, left=1.4 of output1] (W1){$W_1(s)$}; + \node[block, left=1.4 of output2] (W2){$W_2(s)$}; + \node[block, left=1.4 of output3] (W3){$W_3(s)$}; + \node[addb={+}{}{}{}{-}, left=of W1] (sub1) {}; + \node[addb={+}{}{}{}{-}, left=of sub1] (sub2) {}; - \node[addb] (addp) at ($0.5*(H1p.east)+0.5*(H2p.east)+(0.6, 0)$){}; + \node[block, below=0.3 of P, opacity=0] (H) {$\begin{bmatrix}H_2(s) \\ H_3(s)\end{bmatrix}$}; - \draw[->] ($(x)+(-0.8, 0)$) node[above right]{$x$} -- (sensor2.west); - \draw[->] (x.center) |- (sensor1.west); - \draw[->] (x.center) |- (sensor3.west); - \draw[->] (sensor1.east) -- (H1.west) node[above left]{$\hat{x}_1$}; - \draw[->] (sensor2.east) -- (H2.west) node[above left]{$\hat{x}_2$}; - \draw[->] (sensor3.east) -- (H2p.west) node[above left]{$\hat{x}_3$}; - \draw[->] (H1) -| (add.north); - \draw[->] (H2) -| (add.south); - \draw[->] (add.east) -- (H1p.west) node[above left]{$\hat{x}_{12}$}; - \draw[->] (H1p) -| (addp.north); - \draw[->] (H2p) -| (addp.south); - \draw[->] (addp.east) -- ++(0.8, 0) node[above left]{$\hat{x}$}; + \draw[->] (inputw) node[above right](w){$w$} -- (sub2.west); + \draw[->] (W3-|sub1)node[branch]{} -- (sub1.south); + \draw[->] (W2-|sub2)node[branch]{} -- (sub2.south); + \draw[->] ($(sub2.west)+(-0.5, 0)$) node[branch]{} |- (outputv); + \draw[->] (inputu|-W2) -- (W2.west); + \draw[->] (inputu|-W3) -- (W3.west); - \begin{scope}[on background layer] - \node[fit={(x.west|-sensor3.south) (sensor1.north-|addp.east)}, fill=black!10!white, draw, inner sep=6pt] (supersensor) {}; - % \node[below] at (supersensor.north) {Super Sensor}; - - \node[fit={(x.west|-sensor1.north) (add.east|-sensor2.south)}, fill=black!20!white, draw, inner sep=3pt] (superinertialsensor) {}; - % \node[] at (superinertialsensor.center) {"Inertial" Super Sensor}; - \end{scope} -\end{tikzpicture} + \draw[->] (sub2.east) -- (sub1.west); + \draw[->] (sub1.east) -- (W1.west); + \draw[->] (W1.east) -- (output1)node[above left](z){$z_1$}; + \draw[->] (W2.east) -- (output2)node[above left]{$z_2$}; + \draw[->] (W3.east) -- (output3)node[above left]{$z_3$}; + \node[above] at (W2-|w){$u_1$}; + \node[above] at (W3-|w){$u_2$}; + \node[above] at (outputv-|z){$v$}; + \end{tikzpicture} #+end_src -#+name: fig:sensor_fusion_three_sequential -#+caption: Sensor Fusion Architecture - Overview +#+name: fig:comp_filter_three_hinf_gen_plant +#+caption: Generalized plant for the $\mathcal{H}_\infty$ synthesis of three complementary filters #+RESULTS: -[[file:figs/sensor_fusion_three_sequential.png]] +[[file:figs/comp_filter_three_hinf_gen_plant.png]] * Architecture for $\mathcal{H}_\infty$ synthesis of three complementary filters -#+begin_src latex :file comp_filter_three_hinf.pdf :tangle figs/comp_filter_three_hinf.tex +#+begin_src latex :file comp_filter_three_hinf_fb.pdf :tangle figs/comp_filter_three_hinf_fb.tex \begin{tikzpicture} \node[block={5.0cm}{4.5cm}, fill=black!10!white] (P) {}; \node[above] at (P.north) {$P_3(s)$}; @@ -667,7 +742,7 @@ Configuration file is accessible [[file:config.org][here]]. \end{tikzpicture} #+end_src -#+name: fig:comp_filter_three_hinf -#+caption: Architecture for $\mathcal{H}_\infty$ synthesis of three complementary filters ([[./figs/comp_filter_three_hinf.png][png]], [[./figs/comp_filter_three_hinf.pdf][pdf]], [[./figs/comp_filter_three_hinf.tex][tex]]). +#+name: fig:comp_filter_three_hinf_fb +#+caption: Generalized plant with the synthesized filter for the $\mathcal{H}_\infty$ synthesis of three complementary filters #+RESULTS: -[[file:figs/comp_filter_three_hinf.png]] +[[file:figs/comp_filter_three_hinf_fb.png]] diff --git a/tikz/index.html b/tikz/index.html deleted file mode 100644 index bf68436..0000000 --- a/tikz/index.html +++ /dev/null @@ -1,716 +0,0 @@ - - - - - - -Complementary Filters Shaping Using \(\mathcal{H}_\infty\) Synthesis - Tikz Figures - - - - - - - - -
- UP - | - HOME -
-

Complementary Filters Shaping Using \(\mathcal{H}_\infty\) Synthesis - Tikz Figures

- -

-Configuration file is accessible here. -

- -
-

1 Fig 1: Sensor Fusion Architecture

-
-
-
\begin{tikzpicture}
-  \node[branch] (x) at (0, 0);
-  \node[block, above right=0.5 and 0.5 of x](G1){$G_1(s)$};
-  \node[block, below right=0.5 and 0.5 of x](G2){$G_2(s)$};
-  \node[addb, right=0.8 of G1](add1){};
-  \node[addb, right=0.8 of G2](add2){};
-  \node[block, right=0.8 of add1](H1){$H_1(s)$};
-  \node[block, right=0.8 of add2](H2){$H_2(s)$};
-  \node[addb, right=5 of x](add){};
-
-  \draw[] ($(x)+(-0.7, 0)$) node[above right]{$x$} -- (x.center);
-  \draw[->] (x.center) |- (G1.west);
-  \draw[->] (x.center) |- (G2.west);
-  \draw[->] (G1.east) -- (add1.west);
-  \draw[->] (G2.east) -- (add2.west);
-  \draw[<-] (add1.north) -- ++(0, 0.8)node[below right](n1){$n_1$};
-  \draw[<-] (add2.north) -- ++(0, 0.8)node[below right](n2){$n_2$};
-  \draw[->] (add1.east) -- (H1.west);
-  \draw[->] (add2.east) -- (H2.west);
-  \draw[->] (H1) -| (add.north);
-  \draw[->] (H2) -| (add.south);
-  \draw[->] (add.east) -- ++(0.7, 0) node[above left]{$\hat{x}$};
-
-  \begin{scope}[on background layer]
-    \node[fit={($(G2.south-|x)+(-0.2, -0.3)$) ($(n1.north east-|add.east)+(0.2, 0.3)$)}, fill=black!10!white, draw, dashed, inner sep=0pt] (supersensor) {};
-    \node[below left] at (supersensor.north east) {Super Sensor};
-
-    \node[fit={($(G1.south west)+(-0.3, -0.1)$) ($(n1.north east)+(0.0, 0.1)$)}, fill=black!20!white, draw, dashed, inner sep=0pt] (sensor1) {};
-    \node[below right] at (sensor1.north west) {Sensor 1};
-    \node[fit={($(G2.south west)+(-0.3, -0.1)$) ($(n2.north east)+(0.0, 0.1)$)}, fill=black!20!white, draw, dashed, inner sep=0pt] (sensor2) {};
-    \node[below right] at (sensor2.north west) {Sensor 2};
-  \end{scope}
-\end{tikzpicture}
-
-
- - -
-

fusion_super_sensor.png -

-

Figure 1: Sensor Fusion Architecture (png, pdf, tex).

-
-
-
- -
-

2 Fig 2: Sensor fusion architecture with sensor dynamics uncertainty

-
-
-
\begin{tikzpicture}
-  \node[branch] (x) at (0, 0);
-  \node[addb, above right=0.8 and 4 of x](add1){};
-  \node[addb, below right=0.8 and 4 of x](add2){};
-  \node[block, above left=0.2 and 0.1 of add1](delta1){$\Delta_1(s)$};
-  \node[block, above left=0.2 and 0.1 of add2](delta2){$\Delta_2(s)$};
-  \node[block, left=0.5 of delta1](W1){$w_1(s)$};
-  \node[block, left=0.5 of delta2](W2){$w_2(s)$};
-  \node[block, right=0.5 of add1](H1){$H_1(s)$};
-  \node[block, right=0.5 of add2](H2){$H_2(s)$};
-  \node[addb, right=6 of x](add){};
-
-  \draw[] ($(x)+(-0.7, 0)$) node[above right]{$x$} -- (x.center);
-  \draw[->] (x.center) |- (add1.west);
-  \draw[->] (x.center) |- (add2.west);
-  \draw[->] ($(add1-|W1.west)+(-0.5, 0)$)node[branch](S1){} |- (W1.west);
-  \draw[->] ($(add2-|W2.west)+(-0.5, 0)$)node[branch](S1){} |- (W2.west);
-  \draw[->] (W1.east) -- (delta1.west);
-  \draw[->] (W2.east) -- (delta2.west);
-  \draw[->] (delta1.east) -| (add1.north);
-  \draw[->] (delta2.east) -| (add2.north);
-  \draw[->] (add1.east) -- (H1.west);
-  \draw[->] (add2.east) -- (H2.west);
-  \draw[->] (H1.east) -| (add.north);
-  \draw[->] (H2.east) -| (add.south);
-  \draw[->] (add.east) -- ++(0.7, 0) node[above left]{$\hat{x}$};
-
-  \begin{scope}[on background layer]
-    \node[block, fit={($(W1.north-|S1)+(-0.2, 0.2)$) ($(add1.south east)+(0.2, -0.3)$)}, fill=black!20!white, dashed, inner sep=0pt] (sensor1) {};
-    \node[above right] at (sensor1.south west) {Sensor 1};
-    \node[block, fit={($(W2.north-|S1)+(-0.2, 0.2)$) ($(add2.south east)+(0.2, -0.3)$)}, fill=black!20!white, dashed, inner sep=0pt] (sensor2) {};
-    \node[above right] at (sensor2.south west) {Sensor 2};
-  \end{scope}
-\end{tikzpicture}
-
-
- - -
-

sensor_fusion_dynamic_uncertainty.png -

-

Figure 2: Sensor fusion architecture with sensor dynamics uncertainty (png, pdf, tex).

-
-
-
- -
-

3 Fig 3: Uncertainty set of the super sensor dynamics

-
-
-
\begin{tikzpicture}
-  \begin{scope}[shift={(4, 0)}]
-
-    % Uncertainty Circle
-    \node[draw, circle, fill=black!20!white, minimum size=3.6cm] (c) at (0, 0) {};
-    \path[draw, dotted] (0, 0) circle [radius=1.0];
-    \path[draw, dashed] (135:1.0) circle [radius=0.8];
-
-    % Center of Circle
-    \node[below] at (0, 0){$1$};
-
-    \draw[<->, dashed] (0, 0)   node[branch]{} -- coordinate[midway](r1) ++(45:1.0);
-    \draw[<->, dashed] (135:1.0)node[branch]{} -- coordinate[midway](r2) ++(90:0.8);
-
-    \node[] (l1) at (2, 1.5) {$|w_1 H_1|$};
-    \draw[->, dashed, out=-90, in=0] (l1.south) to (r1);
-
-    \node[] (l2) at (-2.5, 1.5) {$|w_2 H_2|$};
-    \draw[->, dashed, out=0, in=-180] (l2.east) to (r2);
-
-    \draw[<->, dashed] (0, 0) -- coordinate[near end](r3) ++(200:1.8);
-    \node[] (l3) at (-2.5, -1.5) {$|w_1 H_1| + |w_2 H_2|$};
-    \draw[->, dashed, out=90, in=-90] (l3.north) to (r3);
-  \end{scope}
-
-  % Real and Imaginary Axis
-  \draw[->] (-0.5, 0) -- (7.0, 0) node[below left]{Re};
-  \draw[->] (0, -1.7) -- (0, 1.7) node[below left]{Im};
-
-  \draw[dashed] (0, 0) -- (tangent cs:node=c,point={(0, 0)},solution=2);
-  \draw[dashed] (1, 0) arc (0:28:1) node[midway, right]{$\Delta \phi$};
-\end{tikzpicture}
-
-
- - -
-

uncertainty_set_super_sensor.png -

-

Figure 3: Uncertainty region of the super sensor dynamics in the complex plane (solid circle), of the sensor 1 (dotted circle) and of the sensor 2 (dashed circle) (png, pdf, tex).

-
-
-
- -
-

4 Fig 4: Architecture used for \(\mathcal{H}_\infty\) synthesis of complementary filters

-
-
-
\begin{tikzpicture}
-   \node[block={4.0cm}{2.5cm}, fill=black!20!white, dashed] (P) {};
-   \node[above] at (P.north) {$P(s)$};
-
-   \coordinate[] (inputw)  at ($(P.south west)!0.75!(P.north west) + (-0.7, 0)$);
-   \coordinate[] (inputu)  at ($(P.south west)!0.35!(P.north west) + (-0.7, 0)$);
-
-   \coordinate[] (output1) at ($(P.south east)!0.75!(P.north east) + ( 0.7, 0)$);
-   \coordinate[] (output2) at ($(P.south east)!0.35!(P.north east) + ( 0.7, 0)$);
-   \coordinate[] (outputv) at ($(P.south east)!0.1!(P.north east) + ( 0.7, 0)$);
-
-   \node[block, left=1.4 of output1] (W1){$W_1(s)$};
-   \node[block, left=1.4 of output2] (W2){$W_2(s)$};
-   \node[addb={+}{}{}{}{-}, left=of W1] (sub) {};
-
-   \node[block, below=0.3 of P] (H2) {$H_2(s)$};
-
-   \draw[->] (inputw) node[above right]{$w$} -- (sub.west);
-   \draw[->] (H2.west) -| ($(inputu)+(0.35, 0)$) node[above]{$u$} -- (W2.west);
-   \draw[->] (inputu-|sub) node[branch]{} -- (sub.south);
-   \draw[->] (sub.east) -- (W1.west);
-   \draw[->] ($(sub.west)+(-0.6, 0)$) node[branch]{} |- ($(outputv)+(-0.35, 0)$) node[above]{$v$} |- (H2.east);
-   \draw[->] (W1.east) -- (output1)node[above left]{$z_1$};
-   \draw[->] (W2.east) -- (output2)node[above left]{$z_2$};
-\end{tikzpicture}
-
-
- - -
-

h_infinity_robust_fusion.png -

-

Figure 4: Architecture used for \(\mathcal{H}_\infty\) synthesis of complementary filters (png, pdf, tex).

-
-
-
- -
-

5 Fig 5: Magnitude of a weighting function generated using the proposed formula

-
-
-
\setlength\fwidth{6.5cm}
-\setlength\fheight{3.5cm}
-
-\begin{tikzpicture}
-  \begin{axis}[%
-    width=1.0\fwidth,
-    height=1.0\fheight,
-    at={(0.0\fwidth, 0.0\fheight)},
-    scale only axis,
-    xmode=log,
-    xmin=0.1,
-    xmax=100,
-    xtick={0.1,1,10, 100},
-    xminorticks=true,
-    ymode=log,
-    ymin=0.0005,
-    ymax=20,
-    ytick={0.001, 0.01, 0.1, 1, 10},
-    yminorticks=true,
-    ylabel={Magnitude},
-    xlabel={Frequency [Hz]},
-    xminorgrids,
-    yminorgrids,
-    ]
-
-    \addplot [color=black, line width=1.5pt, forget plot]
-    table [x=freqs, y=ampl, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matweight_formula.csv};
-
-    \addplot [color=black, dashed, line width=1.5pt]
-    table[row sep=crcr]{%
-      1     10\\
-      100   10\\
-    };
-    \addplot [color=black, dashed, line width=1.5pt]
-    table[row sep=crcr]{%
-      0.1  0.001\\
-      3    0.001\\
-    };
-
-    \addplot [color=black, line width=1.5pt]
-    table[row sep=crcr]{%
-      0.1  1\\
-      100  1\\
-    };
-
-    \addplot [color=black, dashed, line width=1.5pt]
-    table[row sep=crcr]{%
-      10  2\\
-      10  1\\
-    };
-
-    \node[below] at (2, 10) {$G_\infty$};
-    \node[above] at (2, 0.001) {$G_0$};
-
-    \node[branch] at (10, 2){};
-    \draw[dashed, line cap=round] (7, 2) -- (20, 2) node[right]{$G_c$};
-    \draw[dashed, line cap=round] (10, 2) -- (10, 1) node[below]{$\omega_c$};
-
-    \node[right] at (3, 0.1) {$+n$};
-
-  \end{axis}
-\end{tikzpicture}
-
-
- - -
-

weight_formula.png -

-

Figure 5: Magnitude of a weighting function generated using the proposed formula (png, pdf, tex).

-
-
-
- -
-

6 Fig 6: Frequency response of the weighting functions and complementary filters obtained using \(\mathcal{H}_\infty\) synthesis

-
-
-
\setlength\fwidth{6.5cm}
-\setlength\fheight{6cm}
-
-\begin{tikzpicture}
-  \begin{axis}[%
-    width=1.0\fwidth,
-    height=0.5\fheight,
-    at={(0.0\fwidth, 0.47\fheight)},
-    scale only axis,
-    xmode=log,
-    xmin=0.1,
-    xmax=1000,
-    xtick={0.1, 1, 10, 100, 1000},
-    xticklabels={{}},
-    xminorticks=true,
-    ymode=log,
-    ymin=0.0005,
-    ymax=20,
-    ytick={0.001, 0.01, 0.1, 1, 10},
-    yminorticks=true,
-    ylabel={Magnitude},
-    xminorgrids,
-    yminorgrids,
-    ]
-    \addplot [color=mycolor1, line width=1.5pt, forget plot]
-    table [x=freqs, y=H1, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_filters_results.csv};
-
-    \addplot [color=mycolor2, line width=1.5pt, forget plot]
-    table [x=freqs, y=H2, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_filters_results.csv};
-
-    \addplot [color=mycolor1, dashed, line width=1.5pt, forget plot]
-    table [x=freqs, y=W1, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_weights.csv};
-
-    \addplot [color=mycolor2, dashed, line width=1.5pt, forget plot]
-    table [x=freqs, y=W2, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_weights.csv};
-  \end{axis}
-
-  \begin{axis}[%
-    width=1.0\fwidth,
-    height=0.45\fheight,
-    at={(0.0\fwidth, 0.0\fheight)},
-    scale only axis,
-    xmode=log,
-    xmin=0.1,
-    xmax=1000,
-    xtick={0.1, 1, 10, 100, 1000},
-    xminorticks=true,
-    xlabel={Frequency [Hz]},
-    ymin=-200,
-    ymax=200,
-    ytick={-180,  -90,    0,   90,  180},
-    ylabel={Phase [deg]},
-    xminorgrids,
-    legend style={at={(1,1.1)}, outer sep=2pt , anchor=north east, legend cell align=left, align=left, draw=black, nodes={scale=0.7, transform shape}},
-    ]
-    \addlegendimage{color=mycolor1, dashed, line width=1.5pt}
-    \addlegendentry{$W_1^{-1}$};
-    \addlegendimage{color=mycolor2, dashed, line width=1.5pt}
-    \addlegendentry{$W_2^{-1}$};
-    \addplot [color=mycolor1, line width=1.5pt]
-    table [x=freqs, y=H1p, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_filters_results.csv};
-    \addlegendentry{$H_1$};
-    \addplot [color=mycolor2, line width=1.5pt]
-    table [x=freqs, y=H2p, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_filters_results.csv};
-    \addlegendentry{$H_2$};
-  \end{axis}
-\end{tikzpicture}
-
-
- - -
-

hinf_synthesis_results.png -

-

Figure 6: Frequency response of the weighting functions and complementary filters obtained using \(\mathcal{H}_\infty\) synthesis (png, pdf, tex).

-
-
-
- -
-

7 Fig 7: Architecture for \(\mathcal{H}_\infty\) synthesis of three complementary filters

-
-
-
\begin{tikzpicture}
-   \node[block={5.0cm}{3.5cm}, fill=black!20!white, dashed] (P) {};
-   \node[above] at (P.north) {$P(s)$};
-
-   \coordinate[] (inputw)  at ($(P.south west)!0.8!(P.north west) + (-0.7, 0)$);
-   \coordinate[] (inputu)  at ($(P.south west)!0.4!(P.north west) + (-0.7, 0)$);
-
-   \coordinate[] (output1) at ($(P.south east)!0.8!(P.north east)  + (0.7, 0)$);
-   \coordinate[] (output2) at ($(P.south east)!0.55!(P.north east) + (0.7, 0)$);
-   \coordinate[] (output3) at ($(P.south east)!0.3!(P.north east)  + (0.7, 0)$);
-   \coordinate[] (outputv) at ($(P.south east)!0.1!(P.north east)  + (0.7, 0)$);
-
-   \node[block, left=1.4 of output1] (W1){$W_1(s)$};
-   \node[block, left=1.4 of output2] (W2){$W_2(s)$};
-   \node[block, left=1.4 of output3] (W3){$W_3(s)$};
-   \node[addb={+}{}{}{}{-}, left=of W1] (sub1) {};
-   \node[addb={+}{}{}{}{-}, left=of sub1] (sub2) {};
-
-   \node[block, below=0.3 of P] (H) {$\begin{bmatrix}H_2(s) \\ H_3(s)\end{bmatrix}$};
-
-   \draw[->] (inputw) node[above right](w){$w$} -- (sub2.west);
-   \draw[->] (W3-|sub1)node[branch]{} -- (sub1.south);
-   \draw[->] (W2-|sub2)node[branch]{} -- (sub2.south);
-   \draw[->] ($(sub2.west)+(-0.5, 0)$) node[branch]{} |- (outputv) |- (H.east);
-   \draw[->] ($(H.south west)!0.7!(H.north west)$) -| (inputu|-W2) -- (W2.west);
-   \draw[->] ($(H.south west)!0.3!(H.north west)$) -| ($(inputu|-W3)+(0.4, 0)$) -- (W3.west);
-
-   \draw[->] (sub2.east) -- (sub1.west);
-   \draw[->] (sub1.east) -- (W1.west);
-   \draw[->] (W1.east) -- (output1)node[above left](z){$z_1$};
-   \draw[->] (W2.east) -- (output2)node[above left]{$z_2$};
-   \draw[->] (W3.east) -- (output3)node[above left]{$z_3$};
-   \node[above] at (W2-|w){$u_1$};
-   \node[above] at (W3-|w){$u_2$};
-   \node[above] at (outputv-|z){$v$};
-\end{tikzpicture}
-
-
- - -
-

comp_filter_three_hinf.png -

-

Figure 7: Architecture for \(\mathcal{H}_\infty\) synthesis of three complementary filters (png, pdf, tex).

-
-
-
- -
-

8 Fig 8: Frequency response of the weighting functions and three complementary filters obtained using \(\mathcal{H}_\infty\) synthesis

-
-
-
\setlength\fwidth{6.5cm}
-\setlength\fheight{6cm}
-
-\begin{tikzpicture}
-  \begin{axis}[%
-    width=1.0\fwidth,
-    height=0.55\fheight,
-    at={(0.0\fwidth, 0.42\fheight)},
-    scale only axis,
-    xmode=log,
-    xmin=0.1,
-    xmax=100,
-    xticklabels={{}},
-    xminorticks=true,
-    ymode=log,
-    ymin=0.0005,
-    ymax=20,
-    ytick={0.001, 0.01, 0.1, 1, 10},
-    yminorticks=true,
-    ylabel={Magnitude},
-    xminorgrids,
-    yminorgrids,
-    legend columns=2,
-    legend style={
-      /tikz/column 2/.style={
-        column sep=5pt,
-      },
-      at={(1,0)}, outer sep=2pt , anchor=south east, legend cell align=left, align=left, draw=black, nodes={scale=0.7, transform shape}
-    },
-    ]
-    \addplot [color=mycolor1, dashed, line width=1.5pt]
-    table [x=freqs, y=W1, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_three_weights.csv};
-    \addlegendentry{${W_1}^{-1}$};
-    \addplot [color=mycolor1, line width=1.5pt]
-    table [x=freqs, y=H1, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_three_results.csv};
-    \addlegendentry{$H_1$};
-
-
-    \addplot [color=mycolor2, dashed, line width=1.5pt]
-    table [x=freqs, y=W2, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_three_weights.csv};
-    \addlegendentry{${W_2}^{-1}$};
-    \addplot [color=mycolor2, line width=1.5pt]
-    table [x=freqs, y=H2, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_three_results.csv};
-    \addlegendentry{$H_2$};
-
-    \addplot [color=mycolor3, dashed, line width=1.5pt]
-    table [x=freqs, y=W3, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_three_weights.csv};
-    \addlegendentry{${W_3}^{-1}$};
-    \addplot [color=mycolor3, line width=1.5pt]
-    table [x=freqs, y=H3, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_three_results.csv};
-    \addlegendentry{$H_3$};
-  \end{axis}
-
-  \begin{axis}[%
-    width=1.0\fwidth,
-    height=0.4\fheight,
-    at={(0.0\fwidth, 0.0\fheight)},
-    scale only axis,
-    xmode=log,
-    xmin=0.1,
-    xmax=100,
-    xminorticks=true,
-    xlabel={Frequency [Hz]},
-    ymin=-240,
-    ymax=240,
-    ytick={-180,  -90,    0,   90,  180},
-    ylabel={Phase [deg]},
-    xminorgrids,
-    ]
-
-    \addplot [color=mycolor1, line width=1.5pt]
-    table [x=freqs, y=H1p, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_three_results.csv};
-
-    \addplot [color=mycolor2, line width=1.5pt]
-    table [x=freqs, y=H2p, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_three_results.csv};
-
-    \addplot [color=mycolor3, line width=1.5pt]
-    table [x=freqs, y=H3p, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/mathinf_three_results.csv};
-  \end{axis}
-\end{tikzpicture}
-
-
- - -
-

hinf_three_synthesis_results.png -

-

Figure 8: Frequency response of the weighting functions and three complementary filters obtained using \(\mathcal{H}_\infty\) synthesis (png, pdf, tex).

-
-
-
- -
-

9 Fig 9: Specifications and weighting functions magnitude used for \(\mathcal{H}_\infty\) synthesis

-
-
-
\setlength\fwidth{6.5cm}
-\setlength\fheight{3.2cm}
-
-\begin{tikzpicture}
-  \begin{axis}[%
-    width=1.0\fwidth,
-    height=1.0\fheight,
-    at={(0.0\fwidth, 0.0\fheight)},
-    scale only axis,
-    separate axis lines,
-    every outer x axis line/.append style={black},
-    every x tick label/.append style={font=\color{black}},
-    every x tick/.append style={black},
-    xmode=log,
-    xmin=0.001,
-    xmax=1,
-    xminorticks=true,
-    xlabel={Frequency [Hz]},
-    every outer y axis line/.append style={black},
-    every y tick label/.append style={font=\color{black}},
-    every y tick/.append style={black},
-    ymode=log,
-    ymin=0.005,
-    ymax=20,
-    yminorticks=true,
-    ylabel={Magnitude},
-    axis background/.style={fill=white},
-    xmajorgrids,
-    xminorgrids,
-    ymajorgrids,
-    yminorgrids,
-    legend style={at={(0,1)}, outer sep=2pt, anchor=north west, legend cell align=left, align=left, draw=black, nodes={scale=0.7, transform shape}}
-    ]
-
-    \addplot [color=mycolor1, line width=1.5pt]
-      table [x=freqs, y=wHm, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matligo_weights.csv};
-    \addlegendentry{$|w_H|^{-1}$}
-
-    \addplot [color=mycolor2, line width=1.5pt]
-      table [x=freqs, y=wLm, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matligo_weights.csv};
-    \addlegendentry{$|w_L|^{-1}$}
-
-    \addplot [color=black, dotted, line width=1.5pt]
-    table[row sep=crcr]{%
-      0.0005    0.008\\
-      0.008   0.008\\
-    };
-    \addlegendentry{Specifications}
-
-    \addplot [color=black, dotted, line width=1.5pt, forget plot]
-    table[row sep=crcr]{%
-      0.008 0.008\\
-      0.04  1\\
-    };
-    \addplot [color=black, dotted, line width=1.5pt, forget plot]
-    table[row sep=crcr]{%
-      0.04  3\\
-      0.1   3\\
-    };
-    \addplot [color=black, dotted, line width=1.5pt]
-    table[row sep=crcr]{%
-      0.1   0.045\\
-      2   0.045\\
-    };
-  \end{axis}
-\end{tikzpicture}
-
-
- - -
-

ligo_weights.png -

-

Figure 9: Specifications and weighting functions magnitude used for \(\mathcal{H}_\infty\) synthesis (png, pdf, tex).

-
-
-
- -
-

10 Fig 10: Comparison of the FIR filters (solid) with the filters obtained with \(\mathcal{H}_\infty\) synthesis (dashed)

-
-
-
\setlength\fwidth{6.5cm}
-\setlength\fheight{6.8cm}
-
-\begin{tikzpicture}
-  \begin{axis}[%
-    width=1.0\fwidth,
-    height=0.60\fheight,
-    at={(0.0\fwidth, 0.32\fheight)},
-    scale only axis,
-    xmode=log,
-    xmin=0.001,
-    xmax=1,
-    xtick={0.001,0.01,0.1,1},
-    xticklabels={{}},
-    xminorticks=true,
-    ymode=log,
-    ymin=0.002,
-    ymax=5,
-    ytick={0.001, 0.01, 0.1, 1, 10},
-    yminorticks=true,
-    ylabel={Magnitude},
-    xminorgrids,
-    yminorgrids,
-    legend style={at={(1,0)}, outer sep=2pt, anchor=south east, legend cell align=left, align=left, draw=black, nodes={scale=0.7, transform shape}}
-    ]
-    \addplot [color=mycolor1, line width=1.5pt]
-      table [x=freqs, y=Hhm, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matcomp_ligo_hinf.csv};
-    \addlegendentry{$H_H(s)$ - $\mathcal{H}_\infty$}
-    \addplot [color=mycolor1, dashed, line width=1.5pt]
-      table [x=freqs, y=Hhm, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matcomp_ligo_fir.csv};
-    \addlegendentry{$H_H(s)$ - FIR}
-    \addplot [color=mycolor2, line width=1.5pt]
-      table [x=freqs, y=Hlm, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matcomp_ligo_hinf.csv};
-    \addlegendentry{$H_L(s)$ - $\mathcal{H}_\infty$}
-    \addplot [color=mycolor2, dashed, line width=1.5pt]
-      table [x=freqs, y=Hlm, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matcomp_ligo_fir.csv};
-    \addlegendentry{$H_L(s)$ - FIR}
-  \end{axis}
-
-  \begin{axis}[%
-    width=1.0\fwidth,
-    height=0.3\fheight,
-    at={(0.0\fwidth, 0.0\fheight)},
-    scale only axis,
-    xmode=log,
-    xmin=0.001,
-    xmax=1,
-    xtick={0.001,  0.01,   0.1,     1},
-    xminorticks=true,
-    xlabel={Frequency [Hz]},
-    ymin=-180,
-    ymax=180,
-    ytick={-180,  -90,    0,   90,  180},
-    ylabel={Phase [deg]},
-    xminorgrids,
-    ]
-    \addplot [color=mycolor1, line width=1.5pt, forget plot]
-      table [x=freqs, y=Hhp, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matcomp_ligo_hinf.csv};
-    \addplot [color=mycolor1, dashed, line width=1.5pt, forget plot]
-      table [x=freqs, y=Hhp, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matcomp_ligo_fir.csv};
-    \addplot [color=mycolor2, line width=1.5pt, forget plot]
-      table [x=freqs, y=Hlp, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matcomp_ligo_hinf.csv};
-    \addplot [color=mycolor2, dashed, line width=1.5pt, forget plot]
-      table [x=freqs, y=Hlp, col sep=comma] {/home/thomas/Cloud/thesis/papers/dehaeze19_desig_compl_filte/matlab/matcomp_ligo_fir.csv};
-  \end{axis}
-\end{tikzpicture}
-
-
- - -
-

comp_fir_ligo_hinf.png -

-

Figure 10: Comparison of the FIR filters (solid) with the filters obtained with \(\mathcal{H}_\infty\) synthesis (dashed) (png, pdf, tex).

-
-
-
-
-
-

Author: Thomas Dehaeze

-

Created: 2020-11-12 jeu. 10:44

-
- -