Regroup all the synthesis method in one heading

This commit is contained in:
Thomas Dehaeze 2019-08-29 11:23:10 +02:00
parent 665cc66e38
commit e04f9df47a

View File

@ -820,14 +820,16 @@ We see that the blue complementary filters with a lower maximum norm permits to
** TODO More Complete example with model uncertainty ** TODO More Complete example with model uncertainty
* Complementary filters using analytical formula * Complementary filters using analytical formula
* Methods of complementary filter synthesis
** Complementary filters using analytical formula
:PROPERTIES: :PROPERTIES:
:header-args:matlab+: :tangle matlab/comp_filters_analytical.m :header-args:matlab+: :tangle matlab/comp_filters_analytical.m
:header-args:matlab+: :comments org :mkdirp yes :header-args:matlab+: :comments org :mkdirp yes
:END: :END:
<<sec:comp_filters_analytical>> <<sec:comp_filters_analytical>>
** Introduction :ignore: *** Introduction :ignore:
** ZIP file containing the data and matlab files :ignore: *** ZIP file containing the data and matlab files :ignore:
#+begin_src bash :exports none :results none #+begin_src bash :exports none :results none
if [ matlab/comp_filters_analytical.m -nt data/comp_filters_analytical.zip ]; then if [ matlab/comp_filters_analytical.m -nt data/comp_filters_analytical.zip ]; then
cp matlab/comp_filters_analytical.m comp_filters_analytical.m; cp matlab/comp_filters_analytical.m comp_filters_analytical.m;
@ -841,7 +843,7 @@ We see that the blue complementary filters with a lower maximum norm permits to
All the files (data and Matlab scripts) are accessible [[file:data/comp_filters_analytical.zip][here]]. All the files (data and Matlab scripts) are accessible [[file:data/comp_filters_analytical.zip][here]].
#+end_note #+end_note
** Matlab Init :noexport:ignore: *** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
#+end_src #+end_src
@ -854,7 +856,7 @@ We see that the blue complementary filters with a lower maximum norm permits to
freqs = logspace(-1, 3, 1000); freqs = logspace(-1, 3, 1000);
#+end_src #+end_src
** Analytical 1st order complementary filters *** Analytical 1st order complementary filters
First order complementary filters are defined with following equations: First order complementary filters are defined with following equations:
\begin{align} \begin{align}
H_L(s) = \frac{1}{1 + \frac{s}{\omega_0}}\\ H_L(s) = \frac{1}{1 + \frac{s}{\omega_0}}\\
@ -906,7 +908,7 @@ Their bode plot is shown figure [[fig:comp_filter_1st_order]].
#+CAPTION: Bode plot of first order complementary filter ([[./figs/comp_filter_1st_order.png][png]], [[./figs/comp_filter_1st_order.pdf][pdf]]) #+CAPTION: Bode plot of first order complementary filter ([[./figs/comp_filter_1st_order.png][png]], [[./figs/comp_filter_1st_order.pdf][pdf]])
[[file:figs/comp_filter_1st_order.png]] [[file:figs/comp_filter_1st_order.png]]
** Second Order Complementary Filters *** Second Order Complementary Filters
We here use analytical formula for the complementary filters $H_L$ and $H_H$. We here use analytical formula for the complementary filters $H_L$ and $H_H$.
The first two formulas that are used to generate complementary filters are: The first two formulas that are used to generate complementary filters are:
@ -1006,7 +1008,7 @@ We now study the maximum norm of the filters function of the parameter $\alpha$.
#+CAPTION: Evolution of the H-Infinity norm of the complementary filters with the parameter $\alpha$ ([[./figs/param_alpha_hinf_norm.png][png]], [[./figs/param_alpha_hinf_norm.pdf][pdf]]) #+CAPTION: Evolution of the H-Infinity norm of the complementary filters with the parameter $\alpha$ ([[./figs/param_alpha_hinf_norm.png][png]], [[./figs/param_alpha_hinf_norm.pdf][pdf]])
[[file:figs/param_alpha_hinf_norm.png]] [[file:figs/param_alpha_hinf_norm.png]]
** Third Order Complementary Filters *** Third Order Complementary Filters
The following formula gives complementary filters with slopes of $-3$ and $3$: The following formula gives complementary filters with slopes of $-3$ and $3$:
\begin{align*} \begin{align*}
H_L(s) &= \frac{\left(1+(\alpha+1)(\beta+1)\right) (\frac{s}{\omega_0})^2 + (1+\alpha+\beta)(\frac{s}{\omega_0}) + 1}{\left(\frac{s}{\omega_0} + 1\right) \left( (\frac{s}{\omega_0})^2 + \alpha (\frac{s}{\omega_0}) + 1 \right) \left( (\frac{s}{\omega_0})^2 + \beta (\frac{s}{\omega_0}) + 1 \right)}\\ H_L(s) &= \frac{\left(1+(\alpha+1)(\beta+1)\right) (\frac{s}{\omega_0})^2 + (1+\alpha+\beta)(\frac{s}{\omega_0}) + 1}{\left(\frac{s}{\omega_0} + 1\right) \left( (\frac{s}{\omega_0})^2 + \alpha (\frac{s}{\omega_0}) + 1 \right) \left( (\frac{s}{\omega_0})^2 + \beta (\frac{s}{\omega_0}) + 1 \right)}\\
@ -1053,15 +1055,15 @@ The filters are defined below and the result is shown on figure [[fig:complement
#+CAPTION: Third order complementary filters using the analytical formula ([[./figs/complementary_filters_third_order.png][png]], [[./figs/complementary_filters_third_order.pdf][pdf]]) #+CAPTION: Third order complementary filters using the analytical formula ([[./figs/complementary_filters_third_order.png][png]], [[./figs/complementary_filters_third_order.pdf][pdf]])
[[file:figs/complementary_filters_third_order.png]] [[file:figs/complementary_filters_third_order.png]]
* H-Infinity synthesis of complementary filters ** H-Infinity synthesis of complementary filters
:PROPERTIES: :PROPERTIES:
:header-args:matlab+: :tangle matlab/h_inf_synthesis_complementary_filters.m :header-args:matlab+: :tangle matlab/h_inf_synthesis_complementary_filters.m
:header-args:matlab+: :comments org :mkdirp yes :header-args:matlab+: :comments org :mkdirp yes
:END: :END:
<<sec:h_inf_synthesis_complementary_filters>> <<sec:h_inf_synthesis_complementary_filters>>
** Introduction :ignore: *** Introduction :ignore:
** ZIP file containing the data and matlab files :ignore: *** ZIP file containing the data and matlab files :ignore:
#+begin_src bash :exports none :results none #+begin_src bash :exports none :results none
if [ matlab/h_inf_synthesis_complementary_filters.m -nt data/h_inf_synthesis_complementary_filters.zip ]; then if [ matlab/h_inf_synthesis_complementary_filters.m -nt data/h_inf_synthesis_complementary_filters.zip ]; then
cp matlab/h_inf_synthesis_complementary_filters.m h_inf_synthesis_complementary_filters.m; cp matlab/h_inf_synthesis_complementary_filters.m h_inf_synthesis_complementary_filters.m;
@ -1075,7 +1077,7 @@ The filters are defined below and the result is shown on figure [[fig:complement
All the files (data and Matlab scripts) are accessible [[file:data/h_inf_synthesis_complementary_filters.zip][here]]. All the files (data and Matlab scripts) are accessible [[file:data/h_inf_synthesis_complementary_filters.zip][here]].
#+end_note #+end_note
** Matlab Init :noexport:ignore: *** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
#+end_src #+end_src
@ -1088,7 +1090,7 @@ The filters are defined below and the result is shown on figure [[fig:complement
freqs = logspace(-1, 3, 1000); freqs = logspace(-1, 3, 1000);
#+end_src #+end_src
** Synthesis Architecture *** Synthesis Architecture
We here synthesize the complementary filters using the $\mathcal{H}_\infty$ synthesis. We here synthesize the complementary filters using the $\mathcal{H}_\infty$ synthesis.
The goal is to specify upper bounds on the norms of $H_L$ and $H_H$ while ensuring their complementary property ($H_L + H_H = 1$). The goal is to specify upper bounds on the norms of $H_L$ and $H_H$ while ensuring their complementary property ($H_L + H_H = 1$).
@ -1115,7 +1117,7 @@ We then see that $w_L$ and $w_H$ can be used to shape both $H_L$ and $H_H$ while
#+caption: $\mathcal{H}_\infty$ synthesis of the complementary filters #+caption: $\mathcal{H}_\infty$ synthesis of the complementary filters
[[file:figs-tikz/sf_hinf_filters_b.png]] [[file:figs-tikz/sf_hinf_filters_b.png]]
** Weights *** Weights
#+begin_src matlab #+begin_src matlab
omegab = 2*pi*9; omegab = 2*pi*9;
@ -1149,7 +1151,7 @@ We then see that $w_L$ and $w_H$ can be used to shape both $H_L$ and $H_H$ while
#+CAPTION: Weights on the complementary filters $w_L$ and $w_H$ and the associated performance weights ([[./figs/weights_wl_wh.png][png]], [[./figs/weights_wl_wh.pdf][pdf]]) #+CAPTION: Weights on the complementary filters $w_L$ and $w_H$ and the associated performance weights ([[./figs/weights_wl_wh.png][png]], [[./figs/weights_wl_wh.pdf][pdf]])
[[file:figs/weights_wl_wh.png]] [[file:figs/weights_wl_wh.png]]
** H-Infinity Synthesis *** H-Infinity Synthesis
We define the generalized plant $P$ on matlab. We define the generalized plant $P$ on matlab.
#+begin_src matlab #+begin_src matlab
P = [0 wL; P = [0 wL;
@ -1189,7 +1191,7 @@ We then define the high pass filter $H_H = 1 - H_L$. The bode plot of both $H_L$
Hh_hinf = 1 - Hl_hinf; Hh_hinf = 1 - Hl_hinf;
#+end_src #+end_src
** Obtained Complementary Filters *** Obtained Complementary Filters
The obtained complementary filters are shown on figure [[fig:hinf_filters_results]]. The obtained complementary filters are shown on figure [[fig:hinf_filters_results]].
@ -1223,19 +1225,19 @@ The obtained complementary filters are shown on figure [[fig:hinf_filters_result
#+CAPTION: Obtained complementary filters using $\mathcal{H}_\infty$ synthesis ([[./figs/hinf_filters_results.png][png]], [[./figs/hinf_filters_results.pdf][pdf]]) #+CAPTION: Obtained complementary filters using $\mathcal{H}_\infty$ synthesis ([[./figs/hinf_filters_results.png][png]], [[./figs/hinf_filters_results.pdf][pdf]])
[[file:figs/hinf_filters_results.png]] [[file:figs/hinf_filters_results.png]]
* Feedback Control Architecture to generate Complementary Filters ** Feedback Control Architecture to generate Complementary Filters
:PROPERTIES: :PROPERTIES:
:header-args:matlab+: :tangle matlab/feedback_generate_comp_filters.m :header-args:matlab+: :tangle matlab/feedback_generate_comp_filters.m
:header-args:matlab+: :comments org :mkdirp yes :header-args:matlab+: :comments org :mkdirp yes
:END: :END:
<<sec:feedback_generate_comp_filters>> <<sec:feedback_generate_comp_filters>>
** Introduction :ignore: *** Introduction :ignore:
The idea is here to use the fact that in a classical feedback architecture, $S + T = 1$, in order to design complementary filters. The idea is here to use the fact that in a classical feedback architecture, $S + T = 1$, in order to design complementary filters.
Thus, all the tools that has been developed for classical feedback control can be used for complementary filter design. Thus, all the tools that has been developed for classical feedback control can be used for complementary filter design.
** ZIP file containing the data and matlab files :ignore: *** ZIP file containing the data and matlab files :ignore:
#+begin_src bash :exports none :results none #+begin_src bash :exports none :results none
if [ matlab/feedback_generate_comp_filters.m -nt data/feedback_generate_comp_filters.zip ]; then if [ matlab/feedback_generate_comp_filters.m -nt data/feedback_generate_comp_filters.zip ]; then
cp matlab/feedback_generate_comp_filters.m feedback_generate_comp_filters.m; cp matlab/feedback_generate_comp_filters.m feedback_generate_comp_filters.m;
@ -1249,7 +1251,7 @@ Thus, all the tools that has been developed for classical feedback control can b
All the files (data and Matlab scripts) are accessible [[file:data/feedback_generate_comp_filters.zip][here]]. All the files (data and Matlab scripts) are accessible [[file:data/feedback_generate_comp_filters.zip][here]].
#+end_note #+end_note
** Matlab Init :noexport:ignore: *** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
#+end_src #+end_src
@ -1262,7 +1264,7 @@ Thus, all the tools that has been developed for classical feedback control can b
freqs = logspace(-2, 2, 1000); freqs = logspace(-2, 2, 1000);
#+end_src #+end_src
** Architecture *** Architecture
#+name: fig:complementary_filters_feedback_architecture #+name: fig:complementary_filters_feedback_architecture
#+caption: Architecture used to generate the complementary filters #+caption: Architecture used to generate the complementary filters
[[file:figs-tikz/complementary_filters_feedback_architecture.png]] [[file:figs-tikz/complementary_filters_feedback_architecture.png]]
@ -1278,7 +1280,7 @@ A simple choice is:
Which contains two integrator and a lead. $\omega_c$ is used to tune the crossover frequency and $\alpha$ the trade-off "bump" around blending frequency and filtering away from blending frequency. Which contains two integrator and a lead. $\omega_c$ is used to tune the crossover frequency and $\alpha$ the trade-off "bump" around blending frequency and filtering away from blending frequency.
** Loop Gain Design *** Loop Gain Design
Let's first define the loop gain $L$. Let's first define the loop gain $L$.
#+begin_src matlab #+begin_src matlab
wc = 2*pi*1; wc = 2*pi*1;
@ -1317,7 +1319,7 @@ Let's first define the loop gain $L$.
#+CAPTION: Bode plot of the loop gain $L$ ([[./figs/loop_gain_bode_plot.png][png]], [[./figs/loop_gain_bode_plot.pdf][pdf]]) #+CAPTION: Bode plot of the loop gain $L$ ([[./figs/loop_gain_bode_plot.png][png]], [[./figs/loop_gain_bode_plot.pdf][pdf]])
[[file:figs/loop_gain_bode_plot.png]] [[file:figs/loop_gain_bode_plot.png]]
** Complementary Filters Obtained *** Complementary Filters Obtained
We then compute the resulting low pass and high pass filters. We then compute the resulting low pass and high pass filters.
#+begin_src matlab #+begin_src matlab
Hl = L/(L + 1); Hl = L/(L + 1);
@ -1353,10 +1355,10 @@ We then compute the resulting low pass and high pass filters.
#+CAPTION: Low pass and High pass filters $H_L$ and $H_H$ for different values of $\alpha$ ([[./figs/low_pass_high_pass_filters.png][png]], [[./figs/low_pass_high_pass_filters.pdf][pdf]]) #+CAPTION: Low pass and High pass filters $H_L$ and $H_H$ for different values of $\alpha$ ([[./figs/low_pass_high_pass_filters.png][png]], [[./figs/low_pass_high_pass_filters.pdf][pdf]])
[[file:figs/low_pass_high_pass_filters.png]] [[file:figs/low_pass_high_pass_filters.png]]
* Analytical Formula found in the literature ** Analytical Formula found in the literature
<<sec:analytical_formula_literature>> <<sec:analytical_formula_literature>>
** Analytical Formula *** Analytical Formula
cite:min15_compl_filter_desig_angle_estim cite:min15_compl_filter_desig_angle_estim
\begin{align*} \begin{align*}
H_L(s) = \frac{K_p s + K_i}{s^2 + K_p s + K_i} \\ H_L(s) = \frac{K_p s + K_i}{s^2 + K_p s + K_i} \\
@ -1392,7 +1394,7 @@ cite:baerveldt97_low_cost_low_weigh_attit
H_H(s) = \frac{\tau^2 s^2}{(\tau s + 1)^2} H_H(s) = \frac{\tau^2 s^2}{(\tau s + 1)^2}
\end{align*} \end{align*}
** Matlab Init :noexport:ignore: *** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
#+end_src #+end_src
@ -1401,7 +1403,7 @@ cite:baerveldt97_low_cost_low_weigh_attit
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
** Matlab *** Matlab
#+begin_src matlab #+begin_src matlab
omega0 = 1*2*pi; % [rad/s] omega0 = 1*2*pi; % [rad/s]
tau = 1/omega0; % [s] tau = 1/omega0; % [s]
@ -1461,10 +1463,10 @@ cite:baerveldt97_low_cost_low_weigh_attit
#+CAPTION: Comparison of some complementary filters found in the literature ([[./figs/comp_filters_literature.png][png]], [[./figs/comp_filters_literature.pdf][pdf]]) #+CAPTION: Comparison of some complementary filters found in the literature ([[./figs/comp_filters_literature.png][png]], [[./figs/comp_filters_literature.pdf][pdf]])
[[file:figs/comp_filters_literature.png]] [[file:figs/comp_filters_literature.png]]
** Discussion *** Discussion
Analytical Formula found in the literature provides either no parameter for tuning the robustness / performance trade-off. Analytical Formula found in the literature provides either no parameter for tuning the robustness / performance trade-off.
* Comparison of the different methods of synthesis ** Comparison of the different methods of synthesis
<<sec:discussion>> <<sec:discussion>>
The generated complementary filters using $\mathcal{H}_\infty$ and the analytical formulas are very close to each other. However there is some difference to note here: The generated complementary filters using $\mathcal{H}_\infty$ and the analytical formulas are very close to each other. However there is some difference to note here:
- the analytical formula provides a very simple way to generate the complementary filters (and thus the controller), they could even be used to tune the controller online using the parameters $\alpha$ and $\omega_0$. However, these formula have the property that $|H_H|$ and $|H_L|$ are symmetrical with the frequency $\omega_0$ which may not be desirable. - the analytical formula provides a very simple way to generate the complementary filters (and thus the controller), they could even be used to tune the controller online using the parameters $\alpha$ and $\omega_0$. However, these formula have the property that $|H_H|$ and $|H_L|$ are symmetrical with the frequency $\omega_0$ which may not be desirable.