Skip to content

Commit c975a88

Browse files
committed
docs: align markdown tables
Apply markdown-table-formatter's layout to the tables this tier adds or edits, as suggested by MegaLinter. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q53m7MZDmHwocmKbhhd2o5
1 parent 09091e8 commit c975a88

8 files changed

Lines changed: 113 additions & 113 deletions

File tree

‎README.md‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,20 @@ Refer to the documentation to quickly integrate and utilize the library's signal
1414

1515
## Documentation
1616

17-
| Category | Description |
18-
|--------------------------------------------------------------------|----------------------------------------------------------------------|
19-
| [Analysis](doc/analysis/README.md) | FFT, Real-Input FFT (RFFT), Power Spectral Density, DCT, Discrete Wavelet Transform (Haar/Daubechies), Window Functions, Signal Detectors, Convolution & Correlation, Goertzel Algorithm, Decibels, Hilbert Transform / Analytic Signal, Mel Filterbank / MFCC |
20-
| [Control Analysis](doc/control_analysis/README.md) | Frequency Response, Root Locus, Controllability/Observability Matrices & Gramians, Continuous-to-Discrete, Transfer Function ↔ State Space |
21-
| [Controllers](doc/controllers/README.md) | Bang-Bang/Hysteresis, Deadbeat Control, PID, LQR, LQI (Integral/Servo State Feedback), MPC, Saturation, Rate Limiter, Slew-Limited Saturation, Feedforward/2-DOF, Gain-Scheduled Controller, Lead-Lag Compensator, Luenberger Observer, Friction Compensation (Coulomb + Viscous + Stribeck) |
22-
| [Estimators](doc/estimators/README.md) | Linear Regression, Polynomial Fitting, Total Least Squares, Yule-Walker (offline), Recursive Least Squares, Recursive Instrumental Variables, LMS / NLMS Adaptive Filter (online), Consistency Metrics / NEES / NIS |
17+
| Category | Description |
18+
|--------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
19+
| [Analysis](doc/analysis/README.md) | FFT, Real-Input FFT (RFFT), Power Spectral Density, DCT, Discrete Wavelet Transform (Haar/Daubechies), Window Functions, Signal Detectors, Convolution & Correlation, Goertzel Algorithm, Decibels, Hilbert Transform / Analytic Signal, Mel Filterbank / MFCC |
20+
| [Control Analysis](doc/control_analysis/README.md) | Frequency Response, Root Locus, Controllability/Observability Matrices & Gramians, Continuous-to-Discrete, Transfer Function ↔ State Space |
21+
| [Controllers](doc/controllers/README.md) | Bang-Bang/Hysteresis, Deadbeat Control, PID, LQR, LQI (Integral/Servo State Feedback), MPC, Saturation, Rate Limiter, Slew-Limited Saturation, Feedforward/2-DOF, Gain-Scheduled Controller, Lead-Lag Compensator, Luenberger Observer, Friction Compensation (Coulomb + Viscous + Stribeck) |
22+
| [Estimators](doc/estimators/README.md) | Linear Regression, Polynomial Fitting, Total Least Squares, Yule-Walker (offline), Recursive Least Squares, Recursive Instrumental Variables, LMS / NLMS Adaptive Filter (online), Consistency Metrics / NEES / NIS |
2323
| [Filters](doc/filters/README.md) | Kalman, Extended Kalman, Unscented Kalman, Square-Root Kalman, Alpha-Beta/Alpha-Beta-Gamma, FIR, IIR, Exponential Moving Average, Moving Average, Complementary, Median Filter, CIC (Cascaded Integrator-Comb), Notch/Comb Filter, Savitzky-Golay Filter, Biquad/Second-Order-Section Cascade, IIR Filter Design (Butterworth/Chebyshev-I + Bilinear Transform), Madgwick/Mahony AHRS |
24-
| [Optimization](doc/optimization/README.md) | Gradient Descent, SGD / Adam Step Optimisers |
25-
| [Regularization](doc/regularization/README.md) | L1 (Lasso), L2 (Ridge) |
26-
| [Math](doc/math/README.md) | CORDIC, Quaternion, MatrixNorms, Step Response Metrics, MatrixExponential, Angle Utilities, Tridiagonal (Thomas) Solver |
27-
| [Solvers](doc/solvers/README.md) | Gaussian Elimination, Levinson-Durbin, Durand-Kerner, Cholesky, DARE, Runge-Kutta ODE Integrators (RK4 + Dormand-Prince), Spectral Radius & Discrete Stability Margin, QR Decomposition (Householder / Givens), LU Decomposition with Partial Pivoting, Singular Value Decomposition (Golub-Kahan), Symplectic Integrators (Semi-Implicit Euler, Velocity Verlet) |
28-
| [Nonlinear Control](doc/nonlinear_control/README.md) | Feedback Linearization, Backstepping Control, Model Reference Adaptive Control (MRAC) |
29-
| [Robust Control](doc/robust_control/README.md) | Active Disturbance Rejection Control (ADRC + ESO), Sliding Mode Control (SMC), Disturbance Observer (DOB), H∞ State-Feedback Control |
30-
| [Performance Optimization](doc/performance-optimization/README.md) | Compiler optimizations |
24+
| [Optimization](doc/optimization/README.md) | Gradient Descent, SGD / Adam Step Optimisers |
25+
| [Regularization](doc/regularization/README.md) | L1 (Lasso), L2 (Ridge) |
26+
| [Math](doc/math/README.md) | CORDIC, Quaternion, MatrixNorms, Step Response Metrics, MatrixExponential, Angle Utilities, Tridiagonal (Thomas) Solver |
27+
| [Solvers](doc/solvers/README.md) | Gaussian Elimination, Levinson-Durbin, Durand-Kerner, Cholesky, DARE, Runge-Kutta ODE Integrators (RK4 + Dormand-Prince), Spectral Radius & Discrete Stability Margin, QR Decomposition (Householder / Givens), LU Decomposition with Partial Pivoting, Singular Value Decomposition (Golub-Kahan), Symplectic Integrators (Semi-Implicit Euler, Velocity Verlet) |
28+
| [Nonlinear Control](doc/nonlinear_control/README.md) | Feedback Linearization, Backstepping Control, Model Reference Adaptive Control (MRAC) |
29+
| [Robust Control](doc/robust_control/README.md) | Active Disturbance Rejection Control (ADRC + ESO), Sliding Mode Control (SMC), Disturbance Observer (DOB), H∞ State-Feedback Control |
30+
| [Performance Optimization](doc/performance-optimization/README.md) | Compiler optimizations |
3131

3232
Each category page lists its algorithms with a brief description and links to the detailed documentation.
3333

‎doc/controllers/FrictionCompensation.md‎

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ For fixed $v_s$, $\delta$ and $\varepsilon$, $\tau$ is linear in the force coeff
4545

4646
## Complexity Analysis
4747

48-
| Case | Time | Space | Notes |
49-
|------|------|-------|-------|
48+
| Case | Time | Space | Notes |
49+
|------|--------|--------|--------------------------------------------------------------------------------------------------------------------------------------------|
5050
| All | $O(N)$ | $O(N)$ | $N$ axes; per axis one exponential, one power, one hyperbolic tangent, two divisions and a clamp; $N$ parameter sets stored, no allocation |
5151

5252
Cost is dominated by the three transcendental calls; there is no iteration and no dependence on history, so the latency is constant per sample.
@@ -55,11 +55,11 @@ Cost is dominated by the three transcendental calls; there is no iteration and n
5555

5656
Parameters: $F_c = 0.5$, $F_s = 0.8$, $F_v = 0.1$, $v_s = 0.05$, $\delta = 2$, $\varepsilon = 10^{-3}$, with a non-binding cap $\tau_{max} = 1$.
5757

58-
| $v$ | $(\lvert v\rvert/v_s)^2$ | Level $L$ | $\tanh(v/\varepsilon)$ | $F_v v$ | $\tau$ |
59-
|-----|---------------|-----------|------------------------|---------|--------|
60-
| 1 | 400 | $0.5 + 0.3\,e^{-400} \approx 0.5$ | 1 | 0.1 | 0.6 |
61-
| 0.01 | 0.04 | $0.5 + 0.3\,e^{-0.04} \approx 0.788$ | $\tanh 10 \approx 1$ | 0.001 | 0.789 |
62-
| 0.05 ($=v_s$) | 1 | $0.5 + 0.3/e \approx 0.610$ | $\tanh 50 \approx 1$ | 0.005 | 0.615 |
58+
| $v$ | $(\lvert v\rvert/v_s)^2$ | Level $L$ | $\tanh(v/\varepsilon)$ | $F_v v$ | $\tau$ |
59+
|---------------|--------------------------|--------------------------------------|------------------------|---------|--------|
60+
| 1 | 400 | $0.5 + 0.3\,e^{-400} \approx 0.5$ | 1 | 0.1 | 0.6 |
61+
| 0.01 | 0.04 | $0.5 + 0.3\,e^{-0.04} \approx 0.788$ | $\tanh 10 \approx 1$ | 0.001 | 0.789 |
62+
| 0.05 ($=v_s$) | 1 | $0.5 + 0.3/e \approx 0.610$ | $\tanh 50 \approx 1$ | 0.005 | 0.615 |
6363

6464
At high speed the Stribeck term has vanished and only Coulomb plus viscous drag remain. At $v = 0.01$ the axis is still deep in the Stribeck region, so the level is close to $F_s$. At $v = v_s$ the stiction excess has decayed to a fraction $1/e$ of its initial value. At $v = 0$ the output is exactly zero, and $v = -0.01$ gives $-0.789$ by symmetry.
6565

@@ -75,13 +75,13 @@ At high speed the Stribeck term has vanished and only Coulomb plus viscous drag
7575

7676
## Variants & Generalizations
7777

78-
| Variant | Key Difference |
79-
|---------|----------------|
80-
| **Coulomb + viscous only** | $F_s = F_c$ removes the Stribeck term; the level is constant |
81-
| **Asymmetric friction** | Separate parameters per direction of motion; handles direction-dependent drag |
82-
| **Karnopp model** | Replaces the smooth layer with a velocity dead-zone and a stick state |
83-
| **Dahl / LuGre** | Dynamic models with internal bristle state; capture presliding and hysteresis at the cost of state and a stiffer ODE |
84-
| **Inverse-dynamics term** | Same static model folded into a robot inverse-dynamics computation |
78+
| Variant | Key Difference |
79+
|----------------------------|----------------------------------------------------------------------------------------------------------------------|
80+
| **Coulomb + viscous only** | $F_s = F_c$ removes the Stribeck term; the level is constant |
81+
| **Asymmetric friction** | Separate parameters per direction of motion; handles direction-dependent drag |
82+
| **Karnopp model** | Replaces the smooth layer with a velocity dead-zone and a stick state |
83+
| **Dahl / LuGre** | Dynamic models with internal bristle state; capture presliding and hysteresis at the cost of state and a stiffer ODE |
84+
| **Inverse-dynamics term** | Same static model folded into a robot inverse-dynamics computation |
8585

8686
## Applications
8787

@@ -92,13 +92,13 @@ At high speed the Stribeck term has vanished and only Coulomb plus viscous drag
9292

9393
## Connections to Other Algorithms
9494

95-
| Algorithm | Relationship |
96-
|-----------|--------------|
97-
| [Feedforward / 2-DOF](Feedforward2Dof.md) | Same additive-feedforward structure; friction is a velocity-driven feedforward term |
98-
| [PID Controller](Pid.md) | The feedback loop this term is added to; compensation reduces integrator work and stick-slip hunting |
99-
| [Bang-Bang / Hysteresis](BangBangHysteresis.md) | The $\varepsilon \to 0$ limit is a relay on velocity, with the same chattering mechanism |
100-
| [Saturation / Rate Limiter](SaturationRateLimiter.md) | The output clamp is the same saturation, applied to the compensation term alone |
101-
| [QR Decomposition](../solvers/QrDecomposition.md) | Backbone of the least-squares fit of the linear friction coefficients |
95+
| Algorithm | Relationship |
96+
|-------------------------------------------------------|------------------------------------------------------------------------------------------------------|
97+
| [Feedforward / 2-DOF](Feedforward2Dof.md) | Same additive-feedforward structure; friction is a velocity-driven feedforward term |
98+
| [PID Controller](Pid.md) | The feedback loop this term is added to; compensation reduces integrator work and stick-slip hunting |
99+
| [Bang-Bang / Hysteresis](BangBangHysteresis.md) | The $\varepsilon \to 0$ limit is a relay on velocity, with the same chattering mechanism |
100+
| [Saturation / Rate Limiter](SaturationRateLimiter.md) | The output clamp is the same saturation, applied to the compensation term alone |
101+
| [QR Decomposition](../solvers/QrDecomposition.md) | Backbone of the least-squares fit of the linear friction coefficients |
102102

103103
## References & Further Reading
104104

‎doc/controllers/README.md‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ Feedback control algorithms for regulating dynamic systems in real time.
44

55
## Algorithms
66

7-
| Algorithm | Description |
8-
|--------------------------|-----------------------------------------------------------------------------------------|
9-
| [Bang-Bang / Hysteresis Controller](BangBangHysteresis.md) | Two-state relay controller with Schmitt-trigger dead-band to prevent chatter |
10-
| [Deadbeat Control](DeadbeatControl.md) | Discrete-time N-step deadbeat controller — exact convergence in N samples via reachability pseudo-inverse |
11-
| [PID Controller](Pid.md) | Proportional-Integral-Derivative controller using a discrete recursive formulation |
12-
| [LQR Controller](Lqr.md) | Linear Quadratic Regulator — optimal state-feedback control minimizing a quadratic cost |
13-
| [LQI / Servo Controller](IntegralStateFeedbackLqi.md) | Integral state feedback (LQI) — LQR augmented with integrators on the tracking error for zero steady-state offset |
14-
| [LQG Controller](Lqg.md) | Linear Quadratic Gaussian — output-feedback optimal control via LQR + Kalman Filter |
15-
| [MPC Controller](Mpc.md) | Model Predictive Controller — receding-horizon optimal control with constraint handling |
16-
| [Linear Time-Invariant Model](LinearTimeInvariant.md) | Discrete-time state-space plant model (A, B, C, D) shared across controllers and filters |
17-
| [Feedforward / 2-DOF Controller](Feedforward2Dof.md) | Feedforward + feedback wrapper for decoupled reference tracking and disturbance rejection |
18-
| [Luenberger Observer](LuenbergerObserver.md) | Deterministic state estimator using pole placement (Ackermann's formula) to reconstruct unmeasured states |
19-
| [Friction Compensation](FrictionCompensation.md) | Coulomb + viscous + Stribeck feedforward with a tanh boundary layer and output clamp, per axis |
7+
| Algorithm | Description |
8+
|------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
9+
| [Bang-Bang / Hysteresis Controller](BangBangHysteresis.md) | Two-state relay controller with Schmitt-trigger dead-band to prevent chatter |
10+
| [Deadbeat Control](DeadbeatControl.md) | Discrete-time N-step deadbeat controller — exact convergence in N samples via reachability pseudo-inverse |
11+
| [PID Controller](Pid.md) | Proportional-Integral-Derivative controller using a discrete recursive formulation |
12+
| [LQR Controller](Lqr.md) | Linear Quadratic Regulator — optimal state-feedback control minimizing a quadratic cost |
13+
| [LQI / Servo Controller](IntegralStateFeedbackLqi.md) | Integral state feedback (LQI) — LQR augmented with integrators on the tracking error for zero steady-state offset |
14+
| [LQG Controller](Lqg.md) | Linear Quadratic Gaussian — output-feedback optimal control via LQR + Kalman Filter |
15+
| [MPC Controller](Mpc.md) | Model Predictive Controller — receding-horizon optimal control with constraint handling |
16+
| [Linear Time-Invariant Model](LinearTimeInvariant.md) | Discrete-time state-space plant model (A, B, C, D) shared across controllers and filters |
17+
| [Feedforward / 2-DOF Controller](Feedforward2Dof.md) | Feedforward + feedback wrapper for decoupled reference tracking and disturbance rejection |
18+
| [Luenberger Observer](LuenbergerObserver.md) | Deterministic state estimator using pole placement (Ackermann's formula) to reconstruct unmeasured states |
19+
| [Friction Compensation](FrictionCompensation.md) | Coulomb + viscous + Stribeck feedforward with a tanh boundary layer and output clamp, per axis |

0 commit comments

Comments
 (0)