Regroup all the synthesis method in one heading
This commit is contained in:
parent
665cc66e38
commit
e04f9df47a
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user