Last update before submission

This commit is contained in:
Thomas Dehaeze 2021-09-01 17:00:12 +02:00
parent 616652f67a
commit 4769d4b57f
5 changed files with 634 additions and 698 deletions

File diff suppressed because it is too large Load Diff

View File

@ -113,12 +113,6 @@ freqs = logspace(-1, 3, 1000);
#+begin_src matlab :tangle no #+begin_src matlab :tangle no
addpath('./matlab'); addpath('./matlab');
addpath('./matlab/src');
#+end_src
#+begin_src matlab :eval no
%% Add functions to path
addpath('./src');
#+end_src #+end_src
** Design of Weighting Function - Proposed formula ** Design of Weighting Function - Proposed formula
@ -407,12 +401,6 @@ freqs = logspace(-3, 0, 1000);
#+begin_src matlab :tangle no #+begin_src matlab :tangle no
addpath('./matlab'); addpath('./matlab');
addpath('./matlab/src');
#+end_src
#+begin_src matlab :eval no
%% Add functions to path
addpath('./src');
#+end_src #+end_src
** Specifications ** Specifications
@ -949,12 +937,6 @@ freqs = logspace(-1, 3, 1000);
#+begin_src matlab :tangle no #+begin_src matlab :tangle no
addpath('./matlab'); addpath('./matlab');
addpath('./matlab/src');
#+end_src
#+begin_src matlab :eval no
%% Add functions to path
addpath('./src');
#+end_src #+end_src
** Weighting Function design ** Weighting Function design
@ -1126,11 +1108,6 @@ freqs = logspace(-2, 3, 1000);
#+begin_src matlab :tangle no #+begin_src matlab :tangle no
addpath('./matlab'); addpath('./matlab');
addpath('./matlab/src');
#+end_src
#+begin_src matlab :eval no
addpath('./src');
#+end_src #+end_src
** Synthesis Architecture ** Synthesis Architecture
@ -1365,7 +1342,7 @@ This scripts corresponds to section 5.2 of cite:dehaeze21_new_method_desig_compl
** =generateWF=: Generate Weighting Functions ** =generateWF=: Generate Weighting Functions
:PROPERTIES: :PROPERTIES:
:header-args:matlab+: :tangle matlab/src/generateWF.m :header-args:matlab+: :tangle matlab/generateWF.m
:header-args:matlab+: :comments none :mkdirp yes :eval no :header-args:matlab+: :comments none :mkdirp yes :eval no
:CUSTOM_ID: sec:generateWF :CUSTOM_ID: sec:generateWF
:END: :END:
@ -1420,7 +1397,7 @@ function mustBeBetween(a,b,c)
** =generateCF=: Generate Complementary Filters ** =generateCF=: Generate Complementary Filters
:PROPERTIES: :PROPERTIES:
:header-args:matlab+: :tangle matlab/src/generateCF.m :header-args:matlab+: :tangle matlab/generateCF.m
:header-args:matlab+: :comments none :mkdirp yes :eval no :header-args:matlab+: :comments none :mkdirp yes :eval no
:CUSTOM_ID: sec:generateCF :CUSTOM_ID: sec:generateCF
:END: :END:
@ -1463,5 +1440,8 @@ P = [W1 -W1;
%% H1 is defined as the complementary of H2 %% H1 is defined as the complementary of H2
H1 = 1 - H2; H1 = 1 - H2;
#+end_src #+end_src
* Bibliography :ignore: * Bibliography :ignore:
bibliography:ref.bib
#+latex: \printbibliography #+latex: \printbibliography

View File

@ -1,4 +1,4 @@
% Created 2021-09-01 mer. 14:59 % Created 2021-09-01 mer. 16:57
% Intended LaTeX compiler: pdflatex % Intended LaTeX compiler: pdflatex
\documentclass[a4paper, 10pt, DIV=12, parskip=full]{scrreprt} \documentclass[a4paper, 10pt, DIV=12, parskip=full]{scrreprt}
\usepackage[utf8]{inputenc} \usepackage[utf8]{inputenc}
@ -47,7 +47,7 @@ This document is divided into the following sections also corresponding to the p
\chapter{H-Infinity synthesis of complementary filters} \chapter{H-Infinity synthesis of complementary filters}
\label{sec:h_inf_synthesis_complementary_filters} \label{sec:h_inf_synthesis_complementary_filters}
\section{Synthesis Architecture} \section{Synthesis Architecture}
\label{sec:orgbe50759} \label{sec:org7b3f474}
In order to generate two complementary filters with a wanted shape, the generalized plant of Figure \ref{fig:h_infinity_robust_fusion_plant} can be used. In order to generate two complementary filters with a wanted shape, the generalized plant of Figure \ref{fig:h_infinity_robust_fusion_plant} can be used.
The included weights \(W_1(s)\) and \(W_2(s)\) are used to specify the upper bounds of the complementary filters being generated. The included weights \(W_1(s)\) and \(W_2(s)\) are used to specify the upper bounds of the complementary filters being generated.
@ -93,7 +93,7 @@ The presented synthesis method therefore allows to shape two filters \(H_1(s)\)
The complete Matlab script for this part is given in Section \ref{sec:1_synthesis_complementary_filters}. The complete Matlab script for this part is given in Section \ref{sec:1_synthesis_complementary_filters}.
\section{Design of Weighting Function - Proposed formula} \section{Design of Weighting Function - Proposed formula}
\label{sec:orgde64d6c} \label{sec:org69d0d73}
A formula is proposed to help the design of the weighting functions: A formula is proposed to help the design of the weighting functions:
\begin{equation} \begin{equation}
W(s) = \left( \frac{ W(s) = \left( \frac{
@ -120,7 +120,7 @@ The general shape of a weighting function generated using the formula is shown i
\end{figure} \end{figure}
\section{Weighting functions for the design of two complementary filters} \section{Weighting functions for the design of two complementary filters}
\label{sec:orgc65c135} \label{sec:org244c0a4}
\label{sec:weighting_functions_example} \label{sec:weighting_functions_example}
The weighting function formula \eqref{eq:weighting_function_formula} is used to generate the upper bounds of two complementary filters that we wish to design. The weighting function formula \eqref{eq:weighting_function_formula} is used to generate the upper bounds of two complementary filters that we wish to design.
@ -142,7 +142,7 @@ The inverse magnitude of these two weighting functions are shown in Figure \ref{
\end{figure} \end{figure}
\section{Synthesis of the complementary filters} \section{Synthesis of the complementary filters}
\label{sec:orgc8c8834} \label{sec:org3378b49}
The generalized plant of Figure \ref{fig:h_infinity_robust_fusion_plant} is defined as follows: The generalized plant of Figure \ref{fig:h_infinity_robust_fusion_plant} is defined as follows:
\begin{minted}[]{matlab} \begin{minted}[]{matlab}
%% Generalized Plant %% Generalized Plant
@ -198,7 +198,7 @@ This function is described in Section \ref{sec:generateCF}.
\end{minted} \end{minted}
\section{Obtained Complementary Filters} \section{Obtained Complementary Filters}
\label{sec:orgc2b3de0} \label{sec:orgb52f55e}
The obtained complementary filters are shown below and are found to be of order 5. The obtained complementary filters are shown below and are found to be of order 5.
Their bode plots are shown in figure \ref{fig:hinf_filters_results} and compare with the defined upper bounds. Their bode plots are shown in figure \ref{fig:hinf_filters_results} and compare with the defined upper bounds.
@ -231,7 +231,7 @@ In this section, the proposed method for the design of complementary filters is
The complete Matlab script for this part is given in Section \ref{sec:2_ligo_complementary_filters}. The complete Matlab script for this part is given in Section \ref{sec:2_ligo_complementary_filters}.
\section{Specifications} \section{Specifications}
\label{sec:orgeaf463d} \label{sec:orgc6bd7b2}
The specifications for the set of complementary filters (\(L_1,H_1\)) used at the LIGO are summarized below (for further details, refer to \cite{hua04_polyp_fir_compl_filter_contr_system}): The specifications for the set of complementary filters (\(L_1,H_1\)) used at the LIGO are summarized below (for further details, refer to \cite{hua04_polyp_fir_compl_filter_contr_system}):
\begin{itemize} \begin{itemize}
\item From 0 to 0.008 Hz, the magnitude \(|L_1(j\omega)|\) should be less or equal to \(8 \times 10^{-4}\) \item From 0 to 0.008 Hz, the magnitude \(|L_1(j\omega)|\) should be less or equal to \(8 \times 10^{-4}\)
@ -249,7 +249,7 @@ The specifications are translated into upper bounds of the complementary filters
\end{figure} \end{figure}
\section{FIR Filter} \section{FIR Filter}
\label{sec:orge501c41} \label{sec:orgef72f87}
To replicated the complementary filters developed in \cite{hua04_low_ligo}, the CVX Matlab toolbox \cite{grant14_cvx} is used. To replicated the complementary filters developed in \cite{hua04_low_ligo}, the CVX Matlab toolbox \cite{grant14_cvx} is used.
The CVX toolbox is initialized and the \texttt{SeDuMi} solver \cite{sturm99_using_sedum} is used. The CVX toolbox is initialized and the \texttt{SeDuMi} solver \cite{sturm99_using_sedum} is used.
@ -409,7 +409,7 @@ H = [exp(-j*kron(w'.*2*pi,[0:n-1]))]*h;
\end{figure} \end{figure}
\section{Weighting function design} \section{Weighting function design}
\label{sec:orge7a3d56} \label{sec:orgcbee7b7}
The weightings function that will be used for the \(\mathcal{H}_\infty\) synthesis of the complementary filters are now designed. The weightings function that will be used for the \(\mathcal{H}_\infty\) synthesis of the complementary filters are now designed.
These weights will determine the order of the obtained filters. These weights will determine the order of the obtained filters.
@ -466,7 +466,7 @@ The inverse magnitude of the weighting functions are shown in Figure \ref{fig:li
\end{figure} \end{figure}
\section{Synthesis of the complementary filters} \section{Synthesis of the complementary filters}
\label{sec:orge44276c} \label{sec:org8f9014e}
The generalized plant of figure \ref{fig:h_infinity_robust_fusion_plant} is defined. The generalized plant of figure \ref{fig:h_infinity_robust_fusion_plant} is defined.
\begin{minted}[]{matlab} \begin{minted}[]{matlab}
%% Generalized plant for the H-infinity Synthesis %% Generalized plant for the H-infinity Synthesis
@ -533,7 +533,7 @@ The magnitude of the obtained filters as well as the requirements are shown in F
\end{figure} \end{figure}
\section{Comparison of the FIR filters and synthesized filters} \section{Comparison of the FIR filters and synthesized filters}
\label{sec:orgc915ecf} \label{sec:org6367ef0}
Let's now compare the FIR filters designed in \cite{hua04_low_ligo} with the with complementary filters obtained with the \(\mathcal{H}_\infty\) synthesis. Let's now compare the FIR filters designed in \cite{hua04_low_ligo} with the with complementary filters obtained with the \(\mathcal{H}_\infty\) synthesis.
@ -558,7 +558,7 @@ In this section, the classical feedback architecture shown in Figure \ref{fig:fe
The complete Matlab script for this part is given in Section \ref{sec:3_closed_loop_complementary_filters}. The complete Matlab script for this part is given in Section \ref{sec:3_closed_loop_complementary_filters}.
\section{Weighting Function design} \section{Weighting Function design}
\label{sec:org62f8027} \label{sec:org856a399}
Weighting functions using the \texttt{generateWF} Matlab function are designed to specify the upper bounds of the complementary filters to be designed. Weighting functions using the \texttt{generateWF} Matlab function are designed to specify the upper bounds of the complementary filters to be designed.
These weighting functions are the same as the ones used in Section \ref{sec:weighting_functions_example}. These weighting functions are the same as the ones used in Section \ref{sec:weighting_functions_example}.
@ -569,7 +569,7 @@ W2 = generateWF('n', 2, 'w0', 2*pi*10, 'G0', 1/10, 'Ginf', 1000, 'Gc', 0.45);
\end{minted} \end{minted}
\section{Generalized plant} \section{Generalized plant}
\label{sec:orgb431bb1} \label{sec:orgbba676f}
The generalized plant of Figure \ref{fig:feedback_synthesis_architecture_generalized_plant} is defined below: The generalized plant of Figure \ref{fig:feedback_synthesis_architecture_generalized_plant} is defined below:
\begin{minted}[]{matlab} \begin{minted}[]{matlab}
%% Generalized plant for "closed-loop" complementary filter synthesis %% Generalized plant for "closed-loop" complementary filter synthesis
@ -584,7 +584,7 @@ P = [ W1 0 1;
\end{figure} \end{figure}
\section{Synthesis of the closed-loop complementary filters} \section{Synthesis of the closed-loop complementary filters}
\label{sec:orga0ede8a} \label{sec:org44dc95f}
And the standard \(\mathcal{H}_\infty\) synthesis is performed. And the standard \(\mathcal{H}_\infty\) synthesis is performed.
\begin{minted}[]{matlab} \begin{minted}[]{matlab}
%% Standard H-Infinity Synthesis %% Standard H-Infinity Synthesis
@ -614,7 +614,7 @@ And the standard \(\mathcal{H}_\infty\) synthesis is performed.
\end{verbatim} \end{verbatim}
\section{Synthesized filters} \section{Synthesized filters}
\label{sec:org174b330} \label{sec:org9e70c62}
The obtained filter \(L(s)\) can then be included in the feedback architecture shown in Figure \ref{fig:hinf_filters_results_mixed_sensitivity}. The obtained filter \(L(s)\) can then be included in the feedback architecture shown in Figure \ref{fig:hinf_filters_results_mixed_sensitivity}.
The closed-loop transfer functions from \(\hat{x}_1\) to \(\hat{x}\) and from \(\hat{x}_2\) to \(\hat{x}\) corresponding respectively to the sensitivity and complementary sensitivity transfer functions are defined below: The closed-loop transfer functions from \(\hat{x}_1\) to \(\hat{x}\) and from \(\hat{x}_2\) to \(\hat{x}\) corresponding respectively to the sensitivity and complementary sensitivity transfer functions are defined below:
@ -651,7 +651,7 @@ In this section, the proposed synthesis method of complementary filters is gener
The complete Matlab script for this part is given in Section \ref{sec:4_three_complementary_filters}. The complete Matlab script for this part is given in Section \ref{sec:4_three_complementary_filters}.
\section{Synthesis Architecture} \section{Synthesis Architecture}
\label{sec:org8851ed2} \label{sec:orgc4d55c9}
The synthesis objective is to shape three filters that are complementary. The synthesis objective is to shape three filters that are complementary.
This corresponds to the conditions \eqref{eq:obj_three_cf} where \(W_1(s)\), \(W_2(s)\) and \(W_3(s)\) are weighting functions used to specify the maximum wanted magnitude of the three complementary filters. This corresponds to the conditions \eqref{eq:obj_three_cf} where \(W_1(s)\), \(W_2(s)\) and \(W_3(s)\) are weighting functions used to specify the maximum wanted magnitude of the three complementary filters.
@ -680,7 +680,7 @@ The last filter \(H_1(s)\) is defined as the complementary of the two others as
\end{equation} \end{equation}
\section{Weights} \section{Weights}
\label{sec:orgca84b75} \label{sec:orgf866c06}
The three weighting functions are defined as shown below. The three weighting functions are defined as shown below.
\begin{minted}[]{matlab} \begin{minted}[]{matlab}
@ -699,7 +699,7 @@ Their inverse magnitudes are displayed in Figure \ref{fig:three_weighting_functi
\end{figure} \end{figure}
\section{H-Infinity Synthesis} \section{H-Infinity Synthesis}
\label{sec:org65e90d4} \label{sec:org0db8a8c}
The generalized plant in Figure \ref{fig:comp_filter_three_hinf} containing the weighting functions is defined below. The generalized plant in Figure \ref{fig:comp_filter_three_hinf} containing the weighting functions is defined below.
@ -780,9 +780,6 @@ s = zpk('s');
%% Initialize Frequency Vector %% Initialize Frequency Vector
freqs = logspace(-1, 3, 1000); freqs = logspace(-1, 3, 1000);
%% Add functions to path
addpath('./src');
%% Weighting Function Design %% Weighting Function Design
% Parameters % Parameters
n = 3; w0 = 2*pi*10; G0 = 1e-3; G1 = 1e1; Gc = 2; n = 3; w0 = 2*pi*10; G0 = 1e-3; G1 = 1e1; Gc = 2;
@ -818,8 +815,8 @@ ylim([5e-4, 20]);
yticks([1e-4, 1e-3, 1e-2, 1e-1, 1, 1e1]); yticks([1e-4, 1e-3, 1e-2, 1e-1, 1, 1e1]);
%% Design of the Weighting Functions %% Design of the Weighting Functions
W1 = generateWF('n', 3, 'w0', 2*pi*10, 'G0', 1000, 'G1', 1/10, 'Gc', 0.45); W1 = generateWF('n', 3, 'w0', 2*pi*10, 'G0', 1000, 'Ginf', 1/10, 'Gc', 0.45);
W2 = generateWF('n', 2, 'w0', 2*pi*10, 'G0', 1/10, 'G1', 1000, 'Gc', 0.45); W2 = generateWF('n', 2, 'w0', 2*pi*10, 'G0', 1/10, 'Ginf', 1000, 'Gc', 0.45);
%% Plot of the Weighting function magnitude %% Plot of the Weighting function magnitude
figure; figure;
@ -910,9 +907,6 @@ s = zpk('s');
%% Initialize Frequency Vector %% Initialize Frequency Vector
freqs = logspace(-3, 0, 1000); freqs = logspace(-3, 0, 1000);
%% Add functions to path
addpath('./src');
%% Upper bounds for the complementary filters %% Upper bounds for the complementary filters
figure; figure;
hold on; hold on;
@ -1175,12 +1169,9 @@ s = zpk('s');
%% Initialize Frequency Vector %% Initialize Frequency Vector
freqs = logspace(-1, 3, 1000); freqs = logspace(-1, 3, 1000);
%% Add functions to path
addpath('./src');
%% Design of the Weighting Functions %% Design of the Weighting Functions
W1 = generateWF('n', 3, 'w0', 2*pi*10, 'G0', 1000, 'G1', 1/10, 'Gc', 0.45); W1 = generateWF('n', 3, 'w0', 2*pi*10, 'G0', 1000, 'Ginf', 1/10, 'Gc', 0.45);
W2 = generateWF('n', 2, 'w0', 2*pi*10, 'G0', 1/10, 'G1', 1000, 'Gc', 0.45); W2 = generateWF('n', 2, 'w0', 2*pi*10, 'G0', 1/10, 'Ginf', 1000, 'Gc', 0.45);
%% Generalized plant for "closed-loop" complementary filter synthesis %% Generalized plant for "closed-loop" complementary filter synthesis
P = [ W1 0 1; P = [ W1 0 1;
@ -1252,15 +1243,10 @@ s = zpk('s');
freqs = logspace(-2, 3, 1000); freqs = logspace(-2, 3, 1000);
addpath('./src');
% Weights
% First we define the weights.
%% Design of the Weighting Functions %% Design of the Weighting Functions
W1 = generateWF('n', 2, 'w0', 2*pi*1, 'G0', 1/10, 'G1', 1000, 'Gc', 0.5); W1 = generateWF('n', 2, 'w0', 2*pi*1, 'G0', 1/10, 'Ginf', 1000, 'Gc', 0.5);
W2 = 0.22*(1 + s/2/pi/1)^2/(sqrt(1e-4) + s/2/pi/1)^2*(1 + s/2/pi/10)^2/(1 + s/2/pi/1000)^2; W2 = 0.22*(1 + s/2/pi/1)^2/(sqrt(1e-4) + s/2/pi/1)^2*(1 + s/2/pi/10)^2/(1 + s/2/pi/1000)^2;
W3 = generateWF('n', 3, 'w0', 2*pi*10, 'G0', 1000, 'G1', 1/10, 'Gc', 0.5); W3 = generateWF('n', 3, 'w0', 2*pi*10, 'G0', 1000, 'Ginf', 1/10, 'Gc', 0.5);
%% Inverse magnitude of the weighting functions %% Inverse magnitude of the weighting functions
figure; figure;
@ -1278,28 +1264,20 @@ xlim([freqs(1), freqs(end)]); ylim([2e-4, 1.3e1])
leg = legend('location', 'northeast', 'FontSize', 8); leg = legend('location', 'northeast', 'FontSize', 8);
leg.ItemTokenSize(1) = 18; leg.ItemTokenSize(1) = 18;
% H-Infinity Synthesis
% Then we create the generalized plant =P=.
%% Generalized plant for the synthesis of 3 complementary filters %% Generalized plant for the synthesis of 3 complementary filters
P = [W1 -W1 -W1; P = [W1 -W1 -W1;
0 W2 0 ; 0 W2 0 ;
0 0 W3; 0 0 W3;
1 0 0]; 1 0 0];
% And we do the $\mathcal{H}_\infty$ synthesis.
%% Standard H-Infinity Synthesis %% Standard H-Infinity Synthesis
[H, ~, gamma, ~] = hinfsyn(P, 1, 2,'TOLGAM', 0.001, 'METHOD', 'ric', 'DISPLAY', 'on'); [H, ~, gamma, ~] = hinfsyn(P, 1, 2,'TOLGAM', 0.001, 'METHOD', 'ric', 'DISPLAY', 'on');
% Obtained Complementary Filters %% Synthesized H2 and H3 filters
% The obtained filters are:
%%
H2 = tf(H(1)); H2 = tf(H(1));
H3 = tf(H(2)); H3 = tf(H(2));
%% H1 is defined as the complementary filter of H2 and H3
H1 = 1 - H2 - H3; H1 = 1 - H2 - H3;
%% Bode plot of the obtained complementary filters %% Bode plot of the obtained complementary filters
@ -1438,5 +1416,6 @@ P = [W1 -W1;
%% H1 is defined as the complementary of H2 %% H1 is defined as the complementary of H2
H1 = 1 - H2; H1 = 1 - H2;
\end{minted} \end{minted}
\printbibliography \printbibliography
\end{document} \end{document}

View File

@ -12,15 +12,13 @@
organization = {International Society for Optics and Photonics}, organization = {International Society for Optics and Photonics},
} }
@inproceedings{dehaeze21_new_method_desig_compl_filter, @article{dehaeze21_new_method_desig_compl_filter,
author = {Dehaeze, Thomas and Vermat, Mohit and Collette, Christophe}, author = {Dehaeze, Thomas and Vermat, Mohit and Collette, Christophe},
title = {A New Method of Designing Complementary Filters for Sensor title = {A New Method of Designing Complementary Filters for Sensor
Fusion Using the $\mathcal{H}_\infty$ Synthesis}, Fusion Using the H-Infinity Synthesis},
booktitle = {Gravitational Wave and Particle Astrophysics Detectors}, journal = {Mechanical Systems and Signal Processing},
year = 2004, year = 2021,
volume = 5500, month = {Nov},
pages = {194--205},
organization = {International Society for Optics and Photonics},
} }
@book{matlab20, @book{matlab20,