Continues from → Project 06: Lead Compensator Design
Classical Control Systems | Lead–Lag Compensator | Steady-State Error | Control System Designer | MATLAB | Aerospace Engineering
This repository contains my seventh independent control systems project — a systematic investigation into whether a Lead–Lead–Lag cascade compensator can succeed where a single lead compensator (Project 06) failed on the aircraft pitch control system.
"Can a Lead–Lead–Lag cascade satisfy overshoot < 10% and settling time < 10 seconds — with meaningful steady-state tracking — on a non-minimum phase plant?"
Answer: Not simultaneously. Transient specs and steady-state accuracy trade off against each other, and the trade-off is structural, not a tuning problem.
Project 06 proved that a single lead compensator cannot meet the specifications — the required 86.75° of phase lead exceeds the ~65° practical limit of one stage. Project 07 asks the natural follow-up: does cascading two lead stages with a lag stage close the gap?
Four sequential investigation stages were used:
- Lead–Lead cascade — combine two lead stages for more phase authority
- Lag compensator study — eight configurations (Tests A–H) to recover DC gain
- Gain sweep — test whether raw gain increase can resolve the remaining deficit
- Automated optimization — let MATLAB search the full Lead–Lead–Lag space
All four stages point to the same root cause.
G(s) = (−1.282s + 1.282) / (s³ + 1.935s² + 0.987s + 0.179)
| Property | Value |
|---|---|
| RHP Zero | s = +1 (non-minimum phase) |
| Phugoid Poles | −0.3336 ± 0.1730j (dominant, lightly damped) |
| Short Period Pole | −1.2679 (fast, heavily damped) |
| Gain Margin (from P05) | K = 0.46 |
Performance Specifications:
- Overshoot < 10% → damping ratio ζ ≥ 0.59
- Settling time < 10 s → real part σ ≥ 0.4
- Desired dominant pole: s_d = −0.5 + 0.6j
C_LL(s) = K (s + 0.5)(s + 0.8) / [(s + 2)(s + 4)]
| Parameter | Result | Requirement | Status |
|---|---|---|---|
| Settling Time | 9.51 s | < 10 s | ✅ |
| Overshoot | 0.625% | < 10% | ✅ |
| Closed-Loop DC Gain | 5.26×10⁻⁵ | ≈ 1.0 | ❌ |
| Steady-State Error | ≈ 100% | 0% | ❌ |
The catch: rlocfind() selected K ≈ 1.47×10⁻⁴ — a gain so small the loop barely closes. The transient specs pass on paper, but the closed-loop poles are nearly identical to the open-loop poles. The system is operating near open-loop conditions with negligible control authority.
Eight lag zero/pole pairs were swept, holding the Lead–Lead base fixed, to boost low-frequency gain.
| Test | z_lag | p_lag | Settling Time | Overshoot | DC Gain | Verdict |
|---|---|---|---|---|---|---|
| A | −0.1 | −0.01 | 122.63 s | 0% | 0.714 | ❌ too slow |
| D | −0.8 | −0.20 | 15.18 s | 4.18% | 0.464 | ❌ ts high |
| E | −1.0 | −0.25 | 14.46 s | 7.41% | 0.489 | 🏆 best balance |
| F | −1.2 | −0.30 | 12.81 s | 13.13% | 0.596 | ❌ OS too high |
| H | −2.0 | −0.50 | 10.66 s | 1.40% | 0.189 | ❌ tracking collapse |
Trend: moving the lag closer to the lead frequencies speeds up the response but reintroduces overshoot. Test E is the best compromise — and it still misses the settling-time spec while only tracking 48.9% of the commanded pitch angle.
| K | DC Gain | Settling Time | Overshoot |
|---|---|---|---|
| 0.279 | 0.500 | 201.2 s | 0% |
| 1.500 | 0.843 | 75.6 s | 0% |
| 4.000 | 0.935 | 41.3 s | 2.08% |
Pushing gain improves tracking but the settling time never approaches spec, and overshoot begins creeping in at the high end. Gain is not a free parameter on this plant.
MATLAB's Response Optimizer searched the full Lead–Lead–Lag parameter space:
C_Optimizer(s) = 1.2599 · (s+0.6056)(s+0.5187)(s+0.4230) / [(s+2.166)(s+4.045)(s+0.4004)]
| Parameter | Result | Requirement | Status |
|---|---|---|---|
| Settling Time | 5.71 s | < 10 s | ✅ |
| Overshoot | 1.66% | < 10% | ✅ |
| Closed-Loop DC Gain | 0.2547 | ≈ 1.0 | — |
| Steady-State Error | 74.5% | ≈ 0% | ❌ |
The optimizer proved the transient specs are achievable with Lead–Lead–Lag — but only by placing the lag pole almost on top of the lag zero, effectively cancelling the lag stage and sacrificing steady-state tracking to get there.
| Controller | Settling Time | Overshoot | DC Gain | SS Error | Both Specs? |
|---|---|---|---|---|---|
| P only | 13.23 s | 18.15% | Low | 58% | ❌ |
| PID | 19.49 s | 3.39% | High | 0% | ❌ (ts) |
| Best Lead (P06) | 13.31 s | 28.61% | Low | Large | ❌ |
| Lead–Lead | 9.51 s | 0.625% | 5.26×10⁻⁵ | ≈100% | ❌ (tracking) |
| Lead–Lead–Lag (Test E) | 14.46 s | 7.41% | 0.489 | 51% | ❌ (ts) |
| Optimizer (Best) | 5.71 s | 1.66% | 0.255 | 74.5% | ❌ (SSE) |
No classical controller across four projects has met OS < 10%, ts < 10s, and meaningful steady-state tracking at the same time.
1. Lead–Lead transient compliance is a mathematical artifact of a near-zero loop gain, not genuine control performance.
2. The lag stage successfully recovers DC gain (5.26×10⁻⁵ → 0.489) but reintroduces overshoot as it approaches the lead frequency range — a direct speed-stability trade-off.
3. Gain adjustment cannot resolve the trade-off: settling time stays roughly 4× over spec at every tested gain, while overshoot grows at high gain.
4. The automated optimizer confirms Lead–Lead–Lag can meet both transient specs — at the cost of 74.5% steady-state error.
5. The RHP zero at s = +1 is the common root cause across all seven projects: it caps achievable bandwidth, produces the characteristic undershoot in every step response, and prevents simultaneous optimization of transient speed and DC tracking.
6. The trade-off is structural, not a tuning failure. State-space methods (Projects 09–11) are needed to place all closed-loop poles simultaneously and break this limitation.
- Commercial autopilots (777/A350-class): use inner pitch-rate + outer pitch-angle loops specifically to separate non-minimum phase dynamics from the tracking integrator.
- Military fighters (F-16/F-22-class): deliberately statically unstable, relying on state-space control with Kalman filtering rather than classical cascades.
- UAV pitch control: gain scheduling is used in practice to work around the same speed-stability trade-off found here.
- Teknofest VLR Rocket: the plant's non-minimum phase behavior worsens as thrust and center of mass shift during burn — motivating the LQR/Kalman filter work in Projects 10–11 for the VLR attitude controller.
✅ Project 01 — Mass-Spring-Damper Analysis
✅ Project 02 — DC Motor Modeling
✅ Project 03 — PID Speed Control
✅ Project 04 — Aircraft Pitch Control
✅ Project 05 — Root Locus Design
✅ Project 06 — Lead Compensator Investigation
✅ Project 07 — Lead–Lag Compensator Design ← YOU ARE HERE
→ Project 08 — Frequency Response Analysis
→ Project 09 — State-Space Modeling
→ Project 10 — Pole Placement Control
→ Project 11 — LQR Optimal Control
→ Project 12 — Kalman Filter Design
→ Project 13 — UAV Attitude Control
→ Project 14 — Rocket Attitude Control
→ Project 15 — Satellite Attitude Control
→ Project 16 — Missile Guidance and Control
→ Project 17 — Integrated Flight Control System
- MATLAB R2024b
- Control System Toolbox
- Control System Designer (SISO Tool)
Zohaib Imtiaz Aerospace Engineering Student | Teknofest VLR Team — Flight Control
This project is released under the MIT License.
