Compare commits

...

3 Commits

Author SHA1 Message Date
4568a119a2 Update bibtex for source code 2021-09-01 17:03:27 +02:00
4769d4b57f Last update before submission 2021-09-01 17:00:12 +02:00
616652f67a Update matlab scripts 2021-09-01 16:50:18 +02:00
14 changed files with 672 additions and 757 deletions

View File

@ -1,4 +1,4 @@
% Created 2021-09-01 mer. 10:05
% Created 2021-09-01 mer. 17:02
% Intended LaTeX compiler: pdflatex
\documentclass[preprint, sort&compress]{elsarticle}
\usepackage[utf8]{inputenc}
@ -58,7 +58,7 @@ Sensor fusion \sep{} Complementary filters \sep{} \(\mathcal{H}_\infty\) synthes
\end{frontmatter}
\section{Introduction}
\label{sec:org759f4b3}
\label{sec:org2e9b248}
\label{sec:introduction}
Measuring a physical quantity using sensors is always subject to several limitations.
First, the accuracy of the measurement will be affected by several noise sources, such as the electrical noise of the conditioning electronics being used.
@ -105,13 +105,13 @@ The synthesis method is further validated in Section~\ref{sec:application_ligo}
Section~\ref{sec:discussion} compares the proposed synthesis method with the classical mixed-sensitivity synthesis, and extends it to the shaping of more than two complementary filters.
\section{Sensor Fusion and Complementary Filters Requirements}
\label{sec:org1ec960d}
\label{sec:org11c2c5d}
\label{sec:requirements}
Complementary filters provides a framework for fusing signals from different sensors.
As the effectiveness of the fusion depends on the proper design of the complementary filters, they are expected to fulfill certain requirements.
These requirements are discussed in this section.
\subsection{Sensor Fusion Architecture}
\label{sec:org12550f0}
\label{sec:orgf188ee8}
\label{sec:sensor_fusion}
A general sensor fusion architecture using complementary filters is shown in Fig.~\ref{fig:sensor_fusion_overview} where several sensors (here two) are measuring the same physical quantity \(x\).
@ -138,7 +138,7 @@ Therefore, a pair of complementary filter needs to satisfy the following conditi
It will soon become clear why the complementary property is important for the sensor fusion architecture.
\subsection{Sensor Models and Sensor Normalization}
\label{sec:org09fb715}
\label{sec:orgb672f70}
\label{sec:sensor_models}
In order to study such sensor fusion architecture, a model for the sensors is required.
@ -184,7 +184,7 @@ The super sensor output is therefore equal to:
\end{figure}
\subsection{Noise Sensor Filtering}
\label{sec:org9e08a61}
\label{sec:org6621cf0}
\label{sec:noise_filtering}
In this section, it is supposed that all the sensors are perfectly normalized, such that:
@ -225,7 +225,7 @@ In such case, to lower the noise of the super sensor, the norm \(|H_1(j\omega)|\
Therefore, by properly shaping the norm of the complementary filters, it is possible to minimize the noise of the super sensor noise.
\subsection{Sensor Fusion Robustness}
\label{sec:org526930e}
\label{sec:orge7e30ce}
\label{sec:fusion_robustness}
In practical systems the sensor normalization is not perfect and condition \eqref{eq:perfect_dynamics} is not verified.
@ -289,7 +289,7 @@ As it is generally desired to limit the maximum phase added by the super sensor,
Typically, the norm of the complementary filter \(|H_i(j\omega)|\) should be made small when \(|w_i(j\omega)|\) is large, i.e., at frequencies where the sensor dynamics is uncertain.
\section{Complementary Filters Shaping}
\label{sec:orgfd9f96b}
\label{sec:orgffe483d}
\label{sec:hinf_method}
As shown in Section~\ref{sec:requirements}, the noise and robustness of the super sensor are a function of the complementary filters norms.
Therefore, a complementary filters synthesis method that allows to shape their norms would be of great use.
@ -297,7 +297,7 @@ In this section, such synthesis is proposed by writing the synthesis objective a
As weighting functions are used to represent the wanted complementary filters shapes during the synthesis, the proper design of weighting functions is discussed.
Finally, the synthesis method is validated on an simple example.
\subsection{Synthesis Objective}
\label{sec:orgf199dad}
\label{sec:orgc020e5d}
\label{sec:synthesis_objective}
The synthesis objective is to shape the norm of two filters \(H_1(s)\) and \(H_2(s)\) while ensuring their complementary property \eqref{eq:comp_filter}.
@ -314,7 +314,7 @@ This is equivalent as to finding proper and stable transfer functions \(H_1(s)\)
\(W_1(s)\) and \(W_2(s)\) are two weighting transfer functions that are carefully chosen to specify the maximum wanted norms of the complementary filters during the synthesis.
\subsection{Shaping of Complementary Filters using \(\mathcal{H}_\infty\) synthesis}
\label{sec:org6bbfe23}
\label{sec:org6c86cb9}
\label{sec:hinf_synthesis}
In this section, it is shown that the synthesis objective can be easily expressed as a standard \(\mathcal{H}_\infty\) optimization problem and therefore solved using convenient tools readily available.
@ -370,7 +370,7 @@ There might be solutions were the objectives~\eqref{eq:hinf_cond_h1} and~\eqref{
In practice, this is however not an found to be an issue.
\subsection{Weighting Functions Design}
\label{sec:org7255223}
\label{sec:orgf11126f}
\label{sec:hinf_weighting_func}
Weighting functions are used during the synthesis to specify the maximum allowed norms of the complementary filters.
@ -419,7 +419,7 @@ An example of the obtained magnitude of a weighting function generated using \eq
\end{figure}
\subsection{Validation of the proposed synthesis method}
\label{sec:orgca261f8}
\label{sec:org254cb4b}
\label{sec:hinf_example}
The proposed methodology for the design of complementary filters is now applied on a simple example where two complementary filters \(H_1(s)\) and \(H_2(s)\) have to be designed such that:
@ -490,7 +490,7 @@ This simple example illustrates the fact that the proposed methodology for compl
A more complex real life example is taken up in the next section.
\section{Application: Design of Complementary Filters used in the Active Vibration Isolation System at the LIGO}
\label{sec:org00afdda}
\label{sec:org87f5cba}
\label{sec:application_ligo}
Sensor fusion using complementary filters are widely used in active vibration isolation systems in gravitational wave detectors such at the LIGO~\cite{matichard15_seism_isolat_advan_ligo,hua05_low_ligo}, the VIRGO~\cite{lucia18_low_frequen_optim_perfor_advan,heijningen18_low} and the KAGRA \cite[Chap. 5]{sekiguchi16_study_low_frequen_vibrat_isolat_system}.
@ -513,7 +513,7 @@ After synthesis, the obtained FIR filters were found to be compliant with the re
However they are of very high order so their implementation is quite complex.
In this section, the effectiveness of the proposed complementary filter synthesis strategy is demonstrated on the same set of requirements.
\subsection{Complementary Filters Specifications}
\label{sec:org4c34a41}
\label{sec:orgf53acf5}
\label{sec:ligo_specifications}
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}):
@ -534,7 +534,7 @@ They are physically represented in Fig.~\ref{fig:fir_filter_ligo} as well as the
\end{figure}
\subsection{Weighting Functions Design}
\label{sec:org2098436}
\label{sec:org4b996f7}
\label{sec:ligo_weights}
The weighting functions should be designed such that their inverse magnitude is as close as possible to the specifications in order to not over-constrain the synthesis problem.
@ -551,7 +551,7 @@ The magnitudes of the weighting functions are shown in Fig.~\ref{fig:ligo_weight
\end{figure}
\subsection{\(\mathcal{H}_\infty\) Synthesis of the complementary filters}
\label{sec:org6f6d00c}
\label{sec:org64068df}
\label{sec:ligo_results}
The proposed \(\mathcal{H}_\infty\) synthesis is performed on the generalized plant shown in Fig.~\ref{fig:h_infinity_robust_fusion_plant}.
@ -567,10 +567,10 @@ This confirms the effectiveness of the proposed synthesis method even when the c
\end{figure}
\section{Discussion}
\label{sec:org268cb51}
\label{sec:org36bf100}
\label{sec:discussion}
\subsection{``Closed-Loop'' complementary filters}
\label{sec:org5bce6c6}
\label{sec:org38ca6e5}
\label{sec:closed_loop_complementary_filters}
An alternative way to implement complementary filters is by using a fundamental property of the classical feedback architecture shown in Fig.~\ref{fig:feedback_sensor_fusion}.
This is for instance presented in \cite{mahony05_compl_filter_desig_special_orthog,plummer06_optim_compl_filter_their_applic_motion_measur,jensen13_basic_uas}.
@ -667,7 +667,7 @@ The obtained ``closed-loop'' complementary filters are indeed equal to the ones
\end{figure}
\subsection{Synthesis of more than two Complementary Filters}
\label{sec:org5cb9fba}
\label{sec:org16306e2}
\label{sec:hinf_three_comp_filters}
Some applications may require to merge more than two sensors~\cite{stoten01_fusion_kinet_data_using_compos_filter,becker15_compl_filter_desig_three_frequen_bands}.
@ -771,7 +771,7 @@ A set of \(n\) complementary filters can be shaped using the generalized plant \
\end{equation}
\section{Conclusion}
\label{sec:org85a0b4e}
\label{sec:org05380ec}
\label{sec:conclusion}
Sensors measuring a physical quantities are always subject to limitations both in terms of bandwidth or accuracy.
@ -785,12 +785,12 @@ Links with ``closed-loop'' complementary filters where highlighted, and the prop
Future work will aim at developing a complementary filter synthesis method that minimizes the super sensor noise while ensuring the robustness of the fusion.
\section*{Acknowledgment}
\label{sec:org5dd6e93}
\label{sec:orgcfbe3a3}
This research benefited from a FRIA grant from the French Community of Belgium.
This paper is based on a paper previously presented at the ICCMA conference~\cite{dehaeze19_compl_filter_shapin_using_synth}.
\section*{Data Availability}
\label{sec:orgabe6565}
\label{sec:orga0214e5}
Matlab \cite{matlab20} was used for this study.
The source code is available under a MIT License and archived in Zenodo~\cite{dehaeze21_new_method_desig_compl_filter_code}.

View File

@ -378,11 +378,11 @@
}
@misc{dehaeze21_new_method_desig_compl_filter_code,
author = {Thomas Dehaeze},
doi = {10.5281/zenodo.3894342},
howpublished = {Source Code on Zonodo},
month = 09,
title = {A New Method of Designing Complementary Filters for Sensor
Fusion using $\mathcal{H}_\infty$ Synthesis},
author = {Dehaeze, Thomas},
doi = {10.5281/zenodo.5361943},
howpublished = {Source code on Zenodo},
month = sep,
title = {{A New Method of Designing Complementary Filters for Sensor
Fusion Using the $\mathcal{H}_\infty$ Synthesis}},
year = 2021,
}

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
addpath('./matlab');
addpath('./matlab/src');
#+end_src
#+begin_src matlab :eval no
%% Add functions to path
addpath('./src');
#+end_src
** Design of Weighting Function - Proposed formula
@ -407,12 +401,6 @@ freqs = logspace(-3, 0, 1000);
#+begin_src matlab :tangle no
addpath('./matlab');
addpath('./matlab/src');
#+end_src
#+begin_src matlab :eval no
%% Add functions to path
addpath('./src');
#+end_src
** Specifications
@ -949,12 +937,6 @@ freqs = logspace(-1, 3, 1000);
#+begin_src matlab :tangle no
addpath('./matlab');
addpath('./matlab/src');
#+end_src
#+begin_src matlab :eval no
%% Add functions to path
addpath('./src');
#+end_src
** Weighting Function design
@ -1126,11 +1108,6 @@ freqs = logspace(-2, 3, 1000);
#+begin_src matlab :tangle no
addpath('./matlab');
addpath('./matlab/src');
#+end_src
#+begin_src matlab :eval no
addpath('./src');
#+end_src
** Synthesis Architecture
@ -1365,7 +1342,7 @@ This scripts corresponds to section 5.2 of cite:dehaeze21_new_method_desig_compl
** =generateWF=: Generate Weighting Functions
: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
:CUSTOM_ID: sec:generateWF
:END:
@ -1420,7 +1397,7 @@ function mustBeBetween(a,b,c)
** =generateCF=: Generate Complementary Filters
: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
:CUSTOM_ID: sec:generateCF
:END:
@ -1463,5 +1440,8 @@ P = [W1 -W1;
%% H1 is defined as the complementary of H2
H1 = 1 - H2;
#+end_src
* Bibliography :ignore:
bibliography:ref.bib
#+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
\documentclass[a4paper, 10pt, DIV=12, parskip=full]{scrreprt}
\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}
\label{sec:h_inf_synthesis_complementary_filters}
\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.
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}.
\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:
\begin{equation}
W(s) = \left( \frac{
@ -120,7 +120,7 @@ The general shape of a weighting function generated using the formula is shown i
\end{figure}
\section{Weighting functions for the design of two complementary filters}
\label{sec:orgc65c135}
\label{sec:org244c0a4}
\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.
@ -142,7 +142,7 @@ The inverse magnitude of these two weighting functions are shown in Figure \ref{
\end{figure}
\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:
\begin{minted}[]{matlab}
%% Generalized Plant
@ -198,7 +198,7 @@ This function is described in Section \ref{sec:generateCF}.
\end{minted}
\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.
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}.
\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}):
\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}\)
@ -249,7 +249,7 @@ The specifications are translated into upper bounds of the complementary filters
\end{figure}
\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.
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}
\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.
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}
\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.
\begin{minted}[]{matlab}
%% 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}
\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.
@ -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}.
\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.
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}
\section{Generalized plant}
\label{sec:orgb431bb1}
\label{sec:orgbba676f}
The generalized plant of Figure \ref{fig:feedback_synthesis_architecture_generalized_plant} is defined below:
\begin{minted}[]{matlab}
%% Generalized plant for "closed-loop" complementary filter synthesis
@ -584,7 +584,7 @@ P = [ W1 0 1;
\end{figure}
\section{Synthesis of the closed-loop complementary filters}
\label{sec:orga0ede8a}
\label{sec:org44dc95f}
And the standard \(\mathcal{H}_\infty\) synthesis is performed.
\begin{minted}[]{matlab}
%% Standard H-Infinity Synthesis
@ -614,7 +614,7 @@ And the standard \(\mathcal{H}_\infty\) synthesis is performed.
\end{verbatim}
\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 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}.
\section{Synthesis Architecture}
\label{sec:org8851ed2}
\label{sec:orgc4d55c9}
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.
@ -680,7 +680,7 @@ The last filter \(H_1(s)\) is defined as the complementary of the two others as
\end{equation}
\section{Weights}
\label{sec:orgca84b75}
\label{sec:orgf866c06}
The three weighting functions are defined as shown below.
\begin{minted}[]{matlab}
@ -699,7 +699,7 @@ Their inverse magnitudes are displayed in Figure \ref{fig:three_weighting_functi
\end{figure}
\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.
@ -780,9 +780,6 @@ s = zpk('s');
%% Initialize Frequency Vector
freqs = logspace(-1, 3, 1000);
%% Add functions to path
addpath('./src');
%% Weighting Function Design
% Parameters
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]);
%% Design of the Weighting Functions
W1 = generateWF('n', 3, 'w0', 2*pi*10, 'G0', 1000, 'G1', 1/10, 'Gc', 0.45);
W2 = generateWF('n', 2, 'w0', 2*pi*10, 'G0', 1/10, 'G1', 1000, '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, 'Ginf', 1000, 'Gc', 0.45);
%% Plot of the Weighting function magnitude
figure;
@ -910,9 +907,6 @@ s = zpk('s');
%% Initialize Frequency Vector
freqs = logspace(-3, 0, 1000);
%% Add functions to path
addpath('./src');
%% Upper bounds for the complementary filters
figure;
hold on;
@ -1175,12 +1169,9 @@ s = zpk('s');
%% Initialize Frequency Vector
freqs = logspace(-1, 3, 1000);
%% Add functions to path
addpath('./src');
%% Design of the Weighting Functions
W1 = generateWF('n', 3, 'w0', 2*pi*10, 'G0', 1000, 'G1', 1/10, 'Gc', 0.45);
W2 = generateWF('n', 2, 'w0', 2*pi*10, 'G0', 1/10, 'G1', 1000, '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, 'Ginf', 1000, 'Gc', 0.45);
%% Generalized plant for "closed-loop" complementary filter synthesis
P = [ W1 0 1;
@ -1252,15 +1243,10 @@ s = zpk('s');
freqs = logspace(-2, 3, 1000);
addpath('./src');
% Weights
% First we define the weights.
%% 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;
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
figure;
@ -1278,28 +1264,20 @@ xlim([freqs(1), freqs(end)]); ylim([2e-4, 1.3e1])
leg = legend('location', 'northeast', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
% H-Infinity Synthesis
% Then we create the generalized plant =P=.
%% Generalized plant for the synthesis of 3 complementary filters
P = [W1 -W1 -W1;
0 W2 0 ;
0 0 W3;
1 0 0];
% And we do the $\mathcal{H}_\infty$ synthesis.
%% Standard H-Infinity Synthesis
[H, ~, gamma, ~] = hinfsyn(P, 1, 2,'TOLGAM', 0.001, 'METHOD', 'ric', 'DISPLAY', 'on');
% Obtained Complementary Filters
% The obtained filters are:
%%
%% Synthesized H2 and H3 filters
H2 = tf(H(1));
H3 = tf(H(2));
%% H1 is defined as the complementary filter of H2 and H3
H1 = 1 - H2 - H3;
%% Bode plot of the obtained complementary filters
@ -1438,5 +1416,6 @@ P = [W1 -W1;
%% H1 is defined as the complementary of H2
H1 = 1 - H2;
\end{minted}
\printbibliography
\end{document}

View File

@ -7,9 +7,6 @@ s = zpk('s');
%% Initialize Frequency Vector
freqs = logspace(-1, 3, 1000);
%% Add functions to path
addpath('./src');
%% Weighting Function Design
% Parameters
n = 3; w0 = 2*pi*10; G0 = 1e-3; G1 = 1e1; Gc = 2;
@ -45,8 +42,8 @@ ylim([5e-4, 20]);
yticks([1e-4, 1e-3, 1e-2, 1e-1, 1, 1e1]);
%% Design of the Weighting Functions
W1 = generateWF('n', 3, 'w0', 2*pi*10, 'G0', 1000, 'G1', 1/10, 'Gc', 0.45);
W2 = generateWF('n', 2, 'w0', 2*pi*10, 'G0', 1/10, 'G1', 1000, '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, 'Ginf', 1000, 'Gc', 0.45);
%% Plot of the Weighting function magnitude
figure;

View File

@ -7,9 +7,6 @@ s = zpk('s');
%% Initialize Frequency Vector
freqs = logspace(-3, 0, 1000);
%% Add functions to path
addpath('./src');
%% Upper bounds for the complementary filters
figure;
hold on;

View File

@ -7,12 +7,9 @@ s = zpk('s');
%% Initialize Frequency Vector
freqs = logspace(-1, 3, 1000);
%% Add functions to path
addpath('./src');
%% Design of the Weighting Functions
W1 = generateWF('n', 3, 'w0', 2*pi*10, 'G0', 1000, 'G1', 1/10, 'Gc', 0.45);
W2 = generateWF('n', 2, 'w0', 2*pi*10, 'G0', 1/10, 'G1', 1000, '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, 'Ginf', 1000, 'Gc', 0.45);
%% Generalized plant for "closed-loop" complementary filter synthesis
P = [ W1 0 1;

View File

@ -6,15 +6,10 @@ s = zpk('s');
freqs = logspace(-2, 3, 1000);
addpath('./src');
% Weights
% First we define the weights.
%% 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;
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
figure;
@ -32,28 +27,20 @@ xlim([freqs(1), freqs(end)]); ylim([2e-4, 1.3e1])
leg = legend('location', 'northeast', 'FontSize', 8);
leg.ItemTokenSize(1) = 18;
% H-Infinity Synthesis
% Then we create the generalized plant =P=.
%% Generalized plant for the synthesis of 3 complementary filters
P = [W1 -W1 -W1;
0 W2 0 ;
0 0 W3;
1 0 0];
% And we do the $\mathcal{H}_\infty$ synthesis.
%% Standard H-Infinity Synthesis
[H, ~, gamma, ~] = hinfsyn(P, 1, 2,'TOLGAM', 0.001, 'METHOD', 'ric', 'DISPLAY', 'on');
% Obtained Complementary Filters
% The obtained filters are:
%%
%% Synthesized H2 and H3 filters
H2 = tf(H(1));
H3 = tf(H(2));
%% H1 is defined as the complementary filter of H2 and H3
H1 = 1 - H2 - H3;
%% Bode plot of the obtained complementary filters

View File

@ -12,14 +12,13 @@
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},
title = {A New Method of Designing Complementary Fil},
booktitle = {Gravitational Wave and Particle Astrophysics Detectors},
year = 2004,
volume = 5500,
pages = {194--205},
organization = {International Society for Optics and Photonics},
title = {A New Method of Designing Complementary Filters for Sensor
Fusion Using the H-Infinity Synthesis},
journal = {Mechanical Systems and Signal Processing},
year = 2021,
month = {Nov},
}
@book{matlab20,