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