diff --git a/content/article/stoev17_tensor_method_mimo_decoup_contr.md b/content/article/stoev17_tensor_method_mimo_decoup_contr.md index 31773dc..8f0159d 100644 --- a/content/article/stoev17_tensor_method_mimo_decoup_contr.md +++ b/content/article/stoev17_tensor_method_mimo_decoup_contr.md @@ -30,7 +30,7 @@ Because their are strong non-intuitive aspect of MIMO loop-shaping, the followin - **[Interaction Analysis]({{< relref "interaction_analysis.md" >}})**. The goal is to identify two sided interactions in the plant dynamics. If there is no two sided interaction, then feedback design becomes a standard multi-loop SISO design problem. - Two measured of the plant interaction are [Relative Gain Array]({{< relref "relative_gain_array.md" >}}) and [Structured Singular Value]({{< relref "structured_singular_value.md" >}}). + Two measured of the plant interaction are Relative Gain Array and Structured Singular Value. - **Decoupling transformations**. To reduce interaction, one may redefine the input and output of the plant using a decoupling transformation. For motion systems, most transformations are found on the basis of **kinematic model**. diff --git a/content/inbook/albertos04_decen_decoup_contr.md b/content/inbook/albertos04_decen_decoup_contr.md index 6ce6e83..41de021 100644 --- a/content/inbook/albertos04_decen_decoup_contr.md +++ b/content/inbook/albertos04_decen_decoup_contr.md @@ -48,7 +48,7 @@ The multi-loop control may not work in strongly coupled systems. Therefore, a methodology the access the degree of interaction between the loops is needed. -### [Relative Gain Array]({{< relref "relative_gain_array.md" >}}) {#relative-gain-array--relative-gain-array-dot-md} +### Relative Gain Array {#relative-gain-array} The Relative Gain Array (RGA) \\(\Lambda(s)\\) is defined as: diff --git a/content/zettels/continuous_transfer_functions.md b/content/zettels/continuous_transfer_functions.md index 861d49d..c8d2397 100644 --- a/content/zettels/continuous_transfer_functions.md +++ b/content/zettels/continuous_transfer_functions.md @@ -6,10 +6,244 @@ category = "Signals and Systems" +++ Tags -: +: [Discrete Transfer Functions]({{< relref "discrete_transfer_functions.md" >}}) + +Classical transfer functions in the Laplace domain, with the meaning of their parameters. +In all the examples, the frequency of interest is \\(\omega\_0 = 2\pi\\) rad/s (1 Hz) and is shown with a dashed line. +To obtain the equivalent digital filter, see [Discrete Transfer Functions]({{< relref "discrete_transfer_functions.md" >}}). -## Typical Transfer Functions {#typical-transfer-functions} +## First Order Low Pass Filter {#first-order-low-pass-filter} + +\begin{equation} + H(s) = \frac{1}{1 + s/\omega\_0} +\end{equation} + +Parameters: + +- \\(\omega\_0\\): cut-off frequency in [rad/s] + +Characteristics: + +- Low frequency gain of \\(1\\) +- At \\(\omega\_0\\): gain of \\(1/\sqrt{2}\\) (-3 dB) and phase of -45 deg +- High frequency roll-off of -20 dB/dec, phase tends to -90 deg + + + +```matlab +w0 = 2*pi; % Cut-off frequency [rad/s] + +H = 1/(1 + s/w0); +``` + + + +{{< figure src="/ox-hugo/filter_low_pass_first_order.png" caption="Figure 1: First order low pass filter, effect of \\(\omega\_0\\) (dashed: \\(\omega\_0 = 2\pi\\) rad/s)" >}} + + +## First Order High Pass Filter {#first-order-high-pass-filter} + +\begin{equation} + H(s) = \frac{s/\omega\_0}{1 + s/\omega\_0} +\end{equation} + +Parameters: + +- \\(\omega\_0\\): cut-off frequency in [rad/s] + +Characteristics: + +- High frequency gain of \\(1\\) +- At \\(\omega\_0\\): gain of \\(1/\sqrt{2}\\) (-3 dB) and phase of +45 deg +- Low frequency slope of +20 dB/dec, phase tends to +90 deg + + + +```matlab +w0 = 2*pi; % Cut-off frequency [rad/s] + +H = (s/w0)/(1 + s/w0); +``` + + + +{{< figure src="/ox-hugo/filter_high_pass_first_order.png" caption="Figure 2: First order high pass filter, effect of \\(\omega\_0\\) (dashed: \\(\omega\_0 = 2\pi\\) rad/s)" >}} + + +## Second Order Low Pass Filter {#second-order-low-pass-filter} + +\begin{equation} + H(s) = \frac{1}{1 + \frac{2 \zeta}{\omega\_0} s + \frac{s^2}{\omega\_0^2}} +\end{equation} + +Parameters: + +- \\(\omega\_0\\): natural frequency in [rad/s] +- \\(\zeta\\): damping ratio + +Characteristics: + +- Low frequency gain of \\(1\\) +- High frequency roll-off of -40 dB/dec, phase tends to -180 deg +- Phase of -90 deg at \\(\omega\_0\\), whatever the damping +- Gain at \\(\omega\_0\\) equal to \\(1/(2\zeta)\\) +- For \\(\zeta < 1/\sqrt{2}\\) there is a resonance peak, for \\(\zeta \geq 1/\sqrt{2}\\) the magnitude is monotonically decreasing +- Smaller \\(\zeta\\) gives a sharper phase transition around \\(\omega\_0\\) + + + +```matlab +w0 = 2*pi; % Natural frequency [rad/s] +zeta = 0.1; % Damping ratio + +H = 1/(1 + 2*zeta/w0*s + s^2/w0^2); +``` + + + +{{< figure src="/ox-hugo/filter_low_pass_second_order.png" caption="Figure 3: Second order low pass filter, effect of the damping ratio \\(\zeta\\)" >}} + + +## Second Order High Pass Filter {#second-order-high-pass-filter} + +\begin{equation} + H(s) = \frac{s^2/\omega\_0^2}{1 + \frac{2 \zeta}{\omega\_0} s + \frac{s^2}{\omega\_0^2}} +\end{equation} + +Parameters: + +- \\(\omega\_0\\): natural frequency in [rad/s] +- \\(\zeta\\): damping ratio + +Characteristics: + +- High frequency gain of \\(1\\) +- Low frequency slope of +40 dB/dec, phase tends to +180 deg +- Phase of +90 deg at \\(\omega\_0\\), whatever the damping +- Gain at \\(\omega\_0\\) equal to \\(1/(2\zeta)\\), resonance peak for \\(\zeta < 1/\sqrt{2}\\) + + + +```matlab +w0 = 2*pi; % Natural frequency [rad/s] +zeta = 0.1; % Damping ratio + +H = (s^2/w0^2)/(1 + 2*zeta/w0*s + s^2/w0^2); +``` + + + +{{< figure src="/ox-hugo/filter_high_pass_second_order.png" caption="Figure 4: Second order high pass filter, effect of the damping ratio \\(\zeta\\)" >}} + + +## Notch Filter {#notch-filter} + +\begin{equation} + H(s) = \frac{s^2 + 2 g\_c \zeta \omega\_n s + \omega\_n^2}{s^2 + 2 \zeta \omega\_n s + \omega\_n^2} +\end{equation} + +Parameters: + +- \\(\omega\_n\\): frequency of the notch in [rad/s] +- \\(g\_c\\): gain at the notch frequency (\\(g\_c < 1\\) gives a notch, \\(g\_c > 1\\) gives a peak) +- \\(\zeta\\): damping ratio, sets the width of the notch + +Characteristics: + +- Unity gain at low and high frequency +- Gain of exactly \\(g\_c\\) at \\(\omega\_n\\), with a phase of 0 deg +- For \\(g\_c < 1\\): phase is negative below \\(\omega\_n\\) and positive above +- Larger \\(\zeta\\) gives a wider notch, and more phase lag/lead around it + + + +```matlab +wn = 2*pi; % Notch frequency [rad/s] +gc = 0.02; % Gain at the notch frequency +zeta = 0.2; % Damping ratio (notch width) + +H = (s^2 + 2*gc*zeta*wn*s + wn^2)/(s^2 + 2*zeta*wn*s + wn^2); +``` + + + +{{< figure src="/ox-hugo/filter_notch_gc.png" caption="Figure 5: Notch filter, effect of the gain at the notch frequency \\(g\_c\\)" >}} + + + +{{< figure src="/ox-hugo/filter_notch_zeta.png" caption="Figure 6: Notch filter, effect of the damping ratio \\(\zeta\\) (notch width)" >}} + + +## Lead Filter {#lead-filter} + +A lead filter is usually used to add some phase lead at a particular frequency, at the expense of a reduction of the gain at low frequency and increase of the gain at high frequency. + +\begin{equation} + H(s) = \frac{1}{\sqrt{a}} \frac{1 + \frac{s}{\omega\_c/\sqrt{a}}}{1 + \frac{s}{\omega\_c \sqrt{a}}}, \quad a > 1 +\end{equation} + +Parameters: + +- \\(\omega\_c\\): frequency at which the phase lead is maximum, in [rad/s] +- \\(a\\): sets the amount of phase lead, and the gain increase between low and high frequency + +Characteristics: + +- Zero at \\(\omega\_c/\sqrt{a}\\) and pole at \\(\omega\_c \sqrt{a}\\), geometrically centered on \\(\omega\_c\\) +- Unity gain at \\(\omega\_c\\), low frequency gain of \\(1/\sqrt{a}\\), high frequency gain of \\(\sqrt{a}\\) +- Maximum phase lead, obtained at \\(\omega\_c\\), equal to (Figure [Figure 8](#figure--fig:filter-lead-effect-a-phase)): + \\[ \angle H(j\omega\_c) = \tan^{-1}(\sqrt{a}) - \tan^{-1}(1/\sqrt{a}) \\] + + + +```matlab +a = 3; % Amount of phase lead +wc = 2*pi; % Frequency of maximum phase lead [rad/s] + +H = 1/sqrt(a)*(1 + s/(wc/sqrt(a)))/(1 + s/(wc*sqrt(a))); +``` + + + +{{< figure src="/ox-hugo/filter_lead.png" caption="Figure 7: Lead filter, effect of the parameter \\(a\\)" >}} + + + +{{< figure src="/ox-hugo/filter_lead_effect_a_phase.png" caption="Figure 8: Maximum phase lead as a function of \\(a\\)" >}} + + +## Lag Filter {#lag-filter} + +A lag filter is usually used to add low frequency gain, at the expense of some phase lag. + +\begin{equation} + H(s) = a \cdot \frac{1 + \frac{s}{\omega\_c \sqrt{a}}}{1 + \frac{s}{\omega\_c/\sqrt{a}}}, \quad a > 1 +\end{equation} + +Parameters: + +- \\(\omega\_c\\): frequency at which the phase lag is maximum, in [rad/s] +- \\(a\\): sets the amount of phase lag, and the gain increase at low frequency (the low frequency gain is \\(a\\)) + +Characteristics: + +- Zero at \\(\omega\_c \sqrt{a}\\) and pole at \\(\omega\_c/\sqrt{a}\\) +- Low frequency gain of \\(a\\), high frequency gain of \\(1\\) (unchanged), gain of \\(\sqrt{a}\\) at \\(\omega\_c\\) +- It is used to increase the low frequency gain (e.g. instead of a pure integrator), \\(\omega\_c\\) should be kept well below the crossover frequency to limit the phase lag there + + + +```matlab +a = 3; % Amount of phase lag +wc = 2*pi; % Frequency of maximum phase lag [rad/s] + +H = a*(1 + s/(wc*sqrt(a)))/(1 + s/(wc/sqrt(a))); +``` + + + +{{< figure src="/ox-hugo/filter_lag.png" caption="Figure 9: Lag filter, effect of the parameter \\(a\\)" >}} ## Bibliography {#bibliography} diff --git a/content/zettels/decoupled_control.md b/content/zettels/decoupled_control.md index 27df10b..eea8474 100644 --- a/content/zettels/decoupled_control.md +++ b/content/zettels/decoupled_control.md @@ -10,6 +10,88 @@ Tags : [Multivariable Control]({{< relref "multivariable_control.md" >}}) +## Decoupling Control of Parallel Kinematics Robots {#decoupling-control-of-parallel-kinematics-robots} + +Consider a rigid body (mass matrix \\(\bm{M}\\), stiffness matrix \\(\bm{K}\\)) suspended by actuators, with their forces \\(\bm{\tau}\\) and the change of length of the struts \\(\bm{\mathcal{L}}\\). +The Jacobian matrix \\(\bm{J}\\) relates the pose \\(\bm{\mathcal{X}}\\) of the body to the strut lengths, \\(\bm{\mathcal{L}} = \bm{J} \bm{\mathcal{X}}\\), and the actuator forces to the wrench \\(\bm{\mathcal{F}}\\) applied on the body, \\(\bm{\mathcal{F}} = \bm{J}^{\intercal} \bm{\tau}\\). + +The transfer function in the actuator frame is: + +\begin{equation} + \bm{G}\_{\\{\mathcal{L}\\}}(s) = \frac{\bm{\mathcal{L}}}{\bm{\tau}} = \bm{J} \left( \bm{M} s^2 + \bm{C} s + \bm{K} \right)^{-1} \bm{J}^{\intercal} +\end{equation} + +Depending on the frequency range, the dynamics is dominated by the stiffness (low frequency) or the inertia (high frequency). +The best frame to decouple the system is not the same in the two cases. + + +### Control at the Center Of Mass {#control-at-the-center-of-mass} + +For soft systems (for instance voice coil based), it makes sense to work at the Center of Mass (CoM). +Above the "suspension modes", the dynamics is dominated by inertia. +Therefore, the transfer function from forces and torques applied at the CoM to the translation and rotation of the suspended mass evaluated at the CoM is decoupled. +It is equal to the inverse of the mass matrix (diagonal when evaluated at the CoM) times \\(1/s^2\\): + +\begin{equation} + \bm{G}\_{\\{CoM\\}}(s) = \frac{\bm{\mathcal{X}}\_{\\{CoM\\}}}{\bm{\mathcal{F}}\_{\\{CoM\\}}} \approx \frac{1}{s^2} \bm{M}^{-1} +\end{equation} + +To work at the CoM, the plant is pre- and post-multiplied by the Jacobian matrices as shown in Figure [Figure 1](#figure--fig:detail-control-decoupling-control-jacobian): + +\begin{equation} + \bm{G}\_{\\{CoM\\}}(s) = \bm{J}\_{\\{CoM\\}}^{-1} \\, \bm{G}\_{\\{\mathcal{L}\\}}(s) \\, \bm{J}\_{\\{CoM\\}}^{-\intercal} +\end{equation} + + + +{{< figure src="/ox-hugo/detail_control_decoupling_control_jacobian.png" caption="Figure 1: Plant with inputs \\(\bm{\tau}\\) and outputs \\(\bm{\mathcal{L}}\\), and the Jacobian matrices used to work with forces and displacements at the CoM" >}} + +The animations below show a 3DoF suspended body above its suspension modes (1 Hz), when a force or a torque is applied at the CoM. +The three actuator forces are computed with \\(\bm{\tau} = \bm{J}\_{\\{CoM\\}}^{-\intercal} \bm{\mathcal{F}}\_{\\{CoM\\}}\\) (the darker the actuator, the larger its force). + +**Force along \\(x\\) applied at the CoM**: the body only translates along \\(x\\). + + + +{{< figure src="/ox-hugo/decoupled_control_com_Fx.gif" caption="Figure 2: Force along \\(x\\) applied at the CoM (1 Hz): pure translation" >}} + +**Torque about \\(z\\) applied at the CoM**: the body only rotates around its CoM. + + + +{{< figure src="/ox-hugo/decoupled_control_com_Mz.gif" caption="Figure 3: Torque about \\(z\\) applied at the CoM (1 Hz): pure rotation" >}} + + +### Control in the Actuator Frame {#control-in-the-actuator-frame} + +For stiff parallel systems, the dynamics from \\(\bm{\tau}\\) to \\(\bm{\mathcal{L}}\\) is well decoupled at low frequency (well below the first resonance frequency). +At low frequency, the dynamics is dominated by the stiffness: with \\(\bm{K} = \bm{J}^{\intercal} \mathcal{K} \bm{J}\\), \\(\mathcal{k}\\) being the diagonal matrix of the actuator stiffnesses, the transfer function from \\(\bm{\tau}\\) to \\(\bm{\mathcal{L}}\\) is diagonal: + +\begin{equation} + \bm{G}\_{\\{\mathcal{L}\\}}(0) = \bm{J} \bm{K}^{-1} \bm{J}^{\intercal} = \mathcal{K}^{-1} +\end{equation} + +Each actuator then only changes the length of its own strut. +The control can be designed independently for each actuator, using the length of the strut as the sensor. + +Below the suspension modes, actuating one actuator moves the body, but the lengths of the two other struts do not change. +Therefore, the plant in the frame of the actuators is decoupled. + + + +{{< figure src="/ox-hugo/decoupled_control_low_freq_act_1.gif" caption="Figure 4: Left actuator at 0.1 Hz (below the suspension modes): only the strut of the actuated direction changes length" >}} + + + +{{< figure src="/ox-hugo/decoupled_control_low_freq_act_2.gif" caption="Figure 5: Bottom left actuator at 0.1 Hz (below the suspension modes): only the strut of the actuated direction changes length" >}} + +At higher frequency, the inertia becomes important and the system is coupled: using only the first actuator also excites the other directions and the other struts change length. + + + +{{< figure src="/ox-hugo/decoupled_control_high_freq_act_1.gif" caption="Figure 6: Left actuator at 1 Hz (above the suspension modes): the system is coupled, the body translates and rotates" >}} + + ## Bibliography {#bibliography}
diff --git a/content/zettels/interaction_analysis.md b/content/zettels/interaction_analysis.md index 5d0c1ed..ab9051d 100644 --- a/content/zettels/interaction_analysis.md +++ b/content/zettels/interaction_analysis.md @@ -11,8 +11,59 @@ Tags Two main ways to evaluate the interaction: -- [Relative Gain Array]({{< relref "relative_gain_array.md" >}}) -- [Structured Singular Value]({{< relref "structured_singular_value.md" >}}) +- Relative Gain Array +- Structured Singular Value + + +## Relative Gain Array {#relative-gain-array} + +Imagine a 2x2 plant: +\\[ G(s) = \begin{bmatrix} g\_{11}(s) & g\_{12}(s)\\\ g\_{21}(s) & g\_{22}(s) \end{bmatrix} \\] + +Now suppose a controller \\(k\_{1}(s)\\) is closed on the first loop. +The new transfer function from \\(u\_2\\) to \\(y\_2\\) (while the first loop is closed) is : + +\begin{equation} +y\_2 = g\_{22} \left[ 1 - \underbrace{\frac{g\_{21}g\_{12}}{g\_{11}g\_{22}}}\_{\phi} \underbrace{\frac{g\_{11} k\_{11}}{1 + g\_{11}k\_{11}}}\_{T\_{11}} \right] +\end{equation} + +\\(\phi\\) is called the **interaction index**. +\\(T\_{11}\\) is the complementary sensitivity of the first loop (equal to 1 in the bandwidth of the first controller). +Therefore, we want \\(\phi \approx 0\\) to have no interaction. + +Similarly, the **relative gain** is defined as: +\\[ \Lambda = \frac{1}{1 - \phi} \\] +And we want \\(\Lambda \approx 1\\) to have no interaction. + +Note that the scaling of inputs or outputs of the MIMO plant has no effect on \\(\phi\\) or \\(\Lambda\\). + +The **relative gain array** is defined as: +\\[ \Lambda(G) = G \star (G^{-1})^{T} \\] +where \\(\star\\) means element wise multiplication. + +```matlab +RGA = G.*pinv(G.') +``` + + +## RGA-number {#rga-number} + +The RGA-number is a scalar measure of how far the RGA is from the identity matrix (i.e. from a plant without interaction): + +\begin{equation} + \text{RGA-number} = \\| \Lambda(G) - I \\|\_{\text{sum}} = \sum\_{i,j} \left| \Lambda\_{ij} - \delta\_{ij} \right| +\end{equation} + +with \\(\delta\_{ij}\\) the Kronecker delta, and \\(\\|\cdot\\|\_{\text{sum}}\\) the sum of the absolute values of all the elements. + +The RGA-number should be small around the crossover frequency of the decentralized controller, as this is where the interaction matters most. + +```matlab +RGA = G.*pinv(G.'); +RGA_number = sum(sum(abs(RGA - eye(size(RGA))))); +``` + +For a plant evaluated over frequency, this is computed at each frequency point of the frequency response. ## Bibliography {#bibliography} diff --git a/content/zettels/model_predictive_control.md b/content/zettels/model_predictive_control.md deleted file mode 100644 index dd80e17..0000000 --- a/content/zettels/model_predictive_control.md +++ /dev/null @@ -1,16 +0,0 @@ -+++ -title = "Model Predictive Control" -author = ["Dehaeze Thomas"] -draft = false -category = "Control Theory" -subcategory = "Advanced Control" -+++ - -Tags -: - - -## Bibliography {#bibliography} - -
-
diff --git a/content/zettels/test.md b/content/zettels/test.md index a93829d..3635b7a 100644 --- a/content/zettels/test.md +++ b/content/zettels/test.md @@ -465,7 +465,7 @@ Numbering can be continued by using `+n` option as shown below. ```
Code Snippet 4: - Tikz code that is used to generate 5 + Tikz code that is used to generate 5
@@ -632,9 +632,21 @@ It is approximately **12,742 km** ## Videos {#videos} + +### Youtube link {#youtube-link} + {{< youtube SzA2YODtgK4 >}} +### GIF generated from Python {#gif-generated-from-python} + +Animation of a 3DoF rigid body excited by the left actuator at 1 Hz, generated by the Python block below. + + + +{{< figure src="/ox-hugo/coupling_high_freq_1Hz.gif" caption="Figure 7: GIF generated from Python" >}} + + ## Bibliography {#bibliography}
diff --git a/static/ox-hugo/coupling_high_freq_1Hz.gif b/static/ox-hugo/coupling_high_freq_1Hz.gif new file mode 100644 index 0000000..cf4ef21 Binary files /dev/null and b/static/ox-hugo/coupling_high_freq_1Hz.gif differ diff --git a/static/ox-hugo/decoupled_control_com_Fx.gif b/static/ox-hugo/decoupled_control_com_Fx.gif new file mode 100644 index 0000000..a17fc55 Binary files /dev/null and b/static/ox-hugo/decoupled_control_com_Fx.gif differ diff --git a/static/ox-hugo/decoupled_control_com_Mz.gif b/static/ox-hugo/decoupled_control_com_Mz.gif new file mode 100644 index 0000000..5af7338 Binary files /dev/null and b/static/ox-hugo/decoupled_control_com_Mz.gif differ diff --git a/static/ox-hugo/decoupled_control_high_freq_act_1.gif b/static/ox-hugo/decoupled_control_high_freq_act_1.gif new file mode 100644 index 0000000..cf4ef21 Binary files /dev/null and b/static/ox-hugo/decoupled_control_high_freq_act_1.gif differ diff --git a/static/ox-hugo/decoupled_control_low_freq_act_1.gif b/static/ox-hugo/decoupled_control_low_freq_act_1.gif new file mode 100644 index 0000000..25d6c5d Binary files /dev/null and b/static/ox-hugo/decoupled_control_low_freq_act_1.gif differ diff --git a/static/ox-hugo/decoupled_control_low_freq_act_2.gif b/static/ox-hugo/decoupled_control_low_freq_act_2.gif new file mode 100644 index 0000000..3da6a65 Binary files /dev/null and b/static/ox-hugo/decoupled_control_low_freq_act_2.gif differ diff --git a/static/ox-hugo/detail_control_decoupling_control_jacobian.png b/static/ox-hugo/detail_control_decoupling_control_jacobian.png new file mode 100644 index 0000000..ad89031 Binary files /dev/null and b/static/ox-hugo/detail_control_decoupling_control_jacobian.png differ diff --git a/static/ox-hugo/filter_high_pass_first_order.png b/static/ox-hugo/filter_high_pass_first_order.png new file mode 100644 index 0000000..0c781f1 Binary files /dev/null and b/static/ox-hugo/filter_high_pass_first_order.png differ diff --git a/static/ox-hugo/filter_high_pass_second_order.png b/static/ox-hugo/filter_high_pass_second_order.png new file mode 100644 index 0000000..ee7aa0d Binary files /dev/null and b/static/ox-hugo/filter_high_pass_second_order.png differ diff --git a/static/ox-hugo/filter_lag.png b/static/ox-hugo/filter_lag.png new file mode 100644 index 0000000..c5bfcdb Binary files /dev/null and b/static/ox-hugo/filter_lag.png differ diff --git a/static/ox-hugo/filter_lag_effect_a_phase.png b/static/ox-hugo/filter_lag_effect_a_phase.png new file mode 100644 index 0000000..31aa72d Binary files /dev/null and b/static/ox-hugo/filter_lag_effect_a_phase.png differ diff --git a/static/ox-hugo/filter_lead.png b/static/ox-hugo/filter_lead.png new file mode 100644 index 0000000..c48b1cf Binary files /dev/null and b/static/ox-hugo/filter_lead.png differ diff --git a/static/ox-hugo/filter_lead_effect_a_phase.png b/static/ox-hugo/filter_lead_effect_a_phase.png new file mode 100644 index 0000000..8ea218f Binary files /dev/null and b/static/ox-hugo/filter_lead_effect_a_phase.png differ diff --git a/static/ox-hugo/filter_low_pass_first_order.png b/static/ox-hugo/filter_low_pass_first_order.png new file mode 100644 index 0000000..f751a25 Binary files /dev/null and b/static/ox-hugo/filter_low_pass_first_order.png differ diff --git a/static/ox-hugo/filter_low_pass_second_order.png b/static/ox-hugo/filter_low_pass_second_order.png new file mode 100644 index 0000000..d990572 Binary files /dev/null and b/static/ox-hugo/filter_low_pass_second_order.png differ diff --git a/static/ox-hugo/filter_notch_gc.png b/static/ox-hugo/filter_notch_gc.png new file mode 100644 index 0000000..4e1eeb6 Binary files /dev/null and b/static/ox-hugo/filter_notch_gc.png differ diff --git a/static/ox-hugo/filter_notch_xi.png b/static/ox-hugo/filter_notch_xi.png new file mode 100644 index 0000000..b4c6944 Binary files /dev/null and b/static/ox-hugo/filter_notch_xi.png differ diff --git a/static/ox-hugo/filter_notch_zeta.png b/static/ox-hugo/filter_notch_zeta.png new file mode 100644 index 0000000..a7d0b7e Binary files /dev/null and b/static/ox-hugo/filter_notch_zeta.png differ