Compare commits
3 Commits
946ae5f977
...
4568a119a2
Author | SHA1 | Date | |
---|---|---|---|
4568a119a2 | |||
4769d4b57f | |||
616652f67a |
Binary file not shown.
@ -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}.
|
||||
|
||||
|
@ -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
@ -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
|
||||
|
Binary file not shown.
@ -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}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user