Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

📐 MATLAB – Engineering & Safety-Critical Workflows

MATLAB n’est pas (souvent) le langage “embarquĂ©â€ final : c’est la plateforme d’ingĂ©nierie (calcul, identification, conception, simulation, validation) qui alimente des implĂ©mentations certifiables via Model-Based Design (Simulink) et code generation.

MATLAB : le “workbench” de l’avionique moderne.

De la loi de commande (GNC / FCS) aux algorithmes de dĂ©tection/anomalies, MATLAB/Simulink sert Ă  modĂ©liser, simuler, tester, valider, puis souvent Ă  gĂ©nĂ©rer du code C/Ada pour l’embarquĂ©.

Numerical computing Simulink / MBD Codegen (C/C++) SIL / PIL / HIL
Angle safety-critical : ce qui compte n’est pas “MATLAB vs C”, mais le process V&V : exigences → modĂšle → tests → couverture → traçabilitĂ© → preuves (et outillage adĂ©quat).
MATLAB / Simulink hero
1.1 Fondations

MATLAB, c’est quoi (vraiment) ?

Langage + environnement : matrices, scripts, fonctions, toolboxes. Différence MATLAB vs Simulink (modÚle bloc).

NumericsToolboxesEngineering
1.2 MBD

Simulink & Model-Based Design

Du schéma fonctionnel à la simulation temporelle : plant model, controller, buses, states, scheduling, fixed-step.

SimulinkControlPlant
1.3 Algorithmes

Commande & estimation

PID/State-space, observateurs, filtres (Kalman), identification systÚme, linéarisation, robustesse, marges.

GNCKalmanID
2.1 Critique

Code Generation (Embedded)

Passage au monde déterministe : fixed-step, types fixes, saturation, anti-UB, limitations supportées, style MISRA-ready.

CodegenDeterminismC
2.2 Preuves

V&V : tests, couverture, traçabilité

Requirements-based testing, back-to-back tests (model vs code), SIL/PIL/HIL, gestion des cas limites.

V&VBack-to-backCoverage
2.3 Safety

Safety-critical : DO-178C / DO-331

Model-based certification : exigences, modĂšles qualifiĂ©s, preuves, outillage, configuration, audits, “evidence package”.

DO-178CDO-331Process
3.1 Contexte

Domaines avionique & exemples “avions”

A320/737 : usage typique en conception (lois de commande, sim, V&V). Sur l’embarquĂ© : C/Ada gĂ©nĂ©rĂ© ou recodĂ©.

A320737FCS
3.2 Architecture

Architecture “model → code”

De l’exigence au modùle : data dictionary, interfaces, buses, rate transitions, scheduling, diagnostics, safe states.

InterfacesRatesDiagnostics
3.3 Pratique

Checklist “MATLAB/Simulink safe-ready”

RÚgles concrÚtes pour modÚles déterministes, codegen-friendly, testables, traçables, auditables.

ReviewMBDSafety
4.1 Atelier

Mini-projet : filtre + clamp + diagnostic

Exemple MATLAB “prototype” + version “embedded-style” (types fixes) + tests + tableau de cas limites.

ExampleFixed-pointTests
4.2 Réfs

Ressources & docs

Toolboxes clés, concepts MBD, SIL/PIL/HIL, notion de back-to-back, et repÚres safety.

DocsToolboxesStandards
4.3 FAQ

“MATLAB en avion, ça tourne ?”

RĂ©ponse claire : rarement “tel quel”. On parle plutĂŽt de modĂšles + gĂ©nĂ©ration de code + V&V + contraintes temps rĂ©el.

FAQReality-checkEmbedded
1.1 MATLAB : langage + environnement (ce que ça change en ingénierie)
Forces “ingĂ©nierie avionique”
  • Prototypage rapide : tester des lois/algos sur des donnĂ©es rĂ©elles.
  • NumĂ©rique : matrices, optimisation, identification, signal processing.
  • ÉcosystĂšme : toolboxes (control, signal, optimization, aerospace, etc.).
  • TraçabilitĂ© possible via workflows MBD (Simulink + tests + rapports).
Exemple MATLAB (filtre + clamp)
function [y, diag] = safe_filter(x, state)
% Simple 1st order low-pass + clamp + diagnostic
% x: input sample, state: previous output
alpha = 0.1;
y = (1-alpha)*state + alpha*x;

diag = struct();
diag.saturated = false;

% clamp
if y > 1.0
    y = 1.0; diag.saturated = true;
elseif y < -1.0
    y = -1.0; diag.saturated = true;
end
          
Limites “embarquĂ© & safety”
  • Non dĂ©terminisme potentiel (types dynamiques, allocations implicites) si on reste en prototype “desktop”.
  • Performance & timing : l’embarquĂ© exige des boucles bornĂ©es, types fixes, budgets WCET.
  • Certification : le code final doit ĂȘtre prouvable (tests, coverage, traçabilitĂ©).
MATLAB est souvent le laboratoire. L’embarquĂ© est souvent du C/Ada dĂ©terministe, parfois gĂ©nĂ©rĂ© depuis un modĂšle, puis vĂ©rifiĂ© “back-to-back”.
1.3 Commande & estimation : ce que MATLAB/Simulink fait trĂšs bien en avionique
Cas d’usage (GNC / FCS)
  • Design de correcteurs (PID, LQR, H∞) + marges / robustesse.
  • Observateurs (Kalman, complementary) + fusion capteurs.
  • Identification systĂšme (modĂšles Ă  partir de donnĂ©es d’essai).
  • Simulation scĂ©narios : turbulence, capteur bruitĂ©, panne, saturation.
Mini-exemple “discret” (concept)
% Discrete state-space: x(k+1)=A x(k)+B u(k), y(k)=C x(k)
A = [0.98 0; 0 0.95]; B = [0.02; 0.01]; C = [1 0];
x = [0;0];
for k=1:100
   u = 0.5;                 % command
   x = A*x + B*u;           % update
   y = C*x;                 % output
end
          
Ce qui devient “safety-critical”
  • Saturation & rate-limits (actuateurs).
  • Plausibility checks capteurs + dĂ©gradations.
  • Modes (active/degraded/fault) via machines Ă  Ă©tats.
  • Bornage : loops, temps, mĂ©moire, types.
L’algorithme peut ĂȘtre “bon” sur le papier et dangereux sans garde-fous (bornes, plausibilitĂ©, modes, diagnostics).
2.1 Code Generation : passer du prototype au monde déterministe (embarqué)
Le “mur” prototype → embarquĂ©
AspectPrototype MATLABEmbedded deterministic
Typesdynamique / double par défauttypes fixes, éventuellement fixed-point
Timingnon contraintpériodes, WCET, fixed-step
MĂ©moireallocations implicites possiblesbuffers bornĂ©s, pas d’alloc dans la boucle
Safetyscripts “flexibles”rùgles, restrictions, analyse statique, V&V
Diagramme : model → code → back-to-back
flowchart LR
  M[Simulink Model] --> CG[Code Generation]
  CG --> C[C / Embedded Code]
  M --> T1[Model Tests]
  C --> T2[Code Tests]
  T1 --> B2B[Back-to-back Comparison]
  T2 --> B2B
  B2B --> REP[Evidence Reports]
      
Back-to-back = prouver que le code (généré ou recodé) est équivalent au modÚle sur un ensemble de scénarios/cas limites.
2.2 V&V : tests, SIL/PIL/HIL, couverture, traçabilité
SIL / PIL / HIL (lecture pratique)
ModeButCe qu’on dĂ©couvre
SILcode tournant sur PCécarts modÚle/code, erreurs logiques, overflow
PILcode sur targettiming, compilateur, ABI, précision numérique
HILtarget + plant temps réellatences, interfaces, jitter, comportements limites
Requirements-based testing
Req-CTRL-001: Output must be saturated to [-1..+1]
Test-CTRL-001A: x=2.3 -> y=+1
Test-CTRL-001B: x=-9  -> y=-1
Test-CTRL-001C: x=0.2 -> y=0.2
Evidence: report + traceability matrix
        
La clé certification : prouver que chaque exigence est testée et que les résultats sont reproductibles.
Couverture (concept)
  • Couverture modĂšle : dĂ©cisions, conditions, Ă©tats/transitions (machines Ă  Ă©tats).
  • Couverture code : statement/branch (et parfois plus selon criticitĂ©/process).
  • Justifications : tout ce qui n’est pas couvert doit ĂȘtre justifiĂ© (code mort, unreachable, etc.).
La couverture n’est pas une “mĂ©trique vanity” : c’est une preuve structurelle au service de la sĂ»retĂ©.
2.3 Safety-critical : DO-178C / DO-331 (Model-Based Development)

Pour l’avionique, le sujet n’est pas “MATLAB certifiĂ©â€, mais comment un workflow model-based produit des preuves acceptables. Cela implique : exigences, modĂšles, vĂ©rification, outillage, configuration, audits.

“Evidence package” (vue process)
flowchart TB
  R[System Requirements] --> SR[Software Requirements]
  SR --> M[Model (Simulink/Stateflow)]
  M --> TG[Test Generation / Scenarios]
  TG --> MR[Model Test Reports]
  M --> CG[Code Generation]
  CG --> C[Generated C Code]
  C --> CR[Code Test Reports]
  SR --> TM[Traceability Matrix]
  MR --> PKG[Certification Evidence Package]
  CR --> PKG
  TM --> PKG
      
Ce qui est “scrutĂ©â€ en audit
ZoneQuestion typiquePreuve attendue
ModÚleest-il déterministe, clair, et maßtrisé ?guidelines, revues, restrictions, logs
Outillagepeut-il masquer un défaut ?justification/qualification selon usage
TraçabilitĂ©Req ↔ modĂšle ↔ tests ↔ rĂ©sultats ?matrices + rapports
Testscas limites et scénarios critiques couverts ?campaign reports + coverage
Point clĂ© : le model-based n’enlĂšve pas la rigueur — il la dĂ©place sur la discipline de modĂ©lisation + V&V + configuration.
3.1 Domaines avionique & rĂ©fĂ©rences “avions” (A320 / 737) : usage typique de MATLAB
Cadre : MATLAB/Simulink est trĂšs utilisĂ© en conception & validation (lois, modĂšles, tests) dans l’industrie aĂ©ro, tandis que l’embarquĂ© final est gĂ©nĂ©ralement du C/Ada safety-critical (parfois gĂ©nĂ©rĂ© depuis modĂšles).
OĂč MATLAB apparaĂźt typiquement dans un programme avion
PhaseUsage MATLAB/SimulinkLivrables
Conceptiondesign laws, estimation, identificationmodĂšles, scripts, rapports
Simulationplant + controller + scénarioscampagnes de sim, KPI
V&Vtests req-based, back-to-backrapports, coverage, traçabilité
Industrialisationcodegen ou spécification vers C/Adacode, tests target, evidence
RĂ©fĂ©rence “737 MAX / MCAS” (lecture engineering, sans sensationalisme)
  • Les systĂšmes de commande et logiques de modes sont typiquement conçus/validĂ©s via modĂšles + scĂ©narios.
  • Ce qui compte cĂŽtĂ© safety : validation des entrĂ©es, modes explicites, dĂ©gradations, limites d’autoritĂ©, tests robustesse.
  • MATLAB/Simulink sert Ă  Ă©prouver ces transitions et cas limites avant implĂ©mentation embarquĂ©e.
3.2 Architecture “model → code” : interfaces, rates, diagnostics, safe states
Pattern recommandé (safety-ready)
flowchart LR
  In[Sensors] --> Val[Validate & plausibility]
  Val --> Norm[Normalize / filter]
  Norm --> Ctrl[Control law]
  Ctrl --> Lim[Clamp / rate limit]
  Lim --> Out[Actuators]
  Val --> Diag[Fault flags]
  Norm --> Diag
  Ctrl --> Diag
  Diag --> Mode[Mode manager (FSM)]
  Mode --> Ctrl
      
Table : rùgles “design for verification”
RĂšglePourquoiComment
Interfaces explicitestraçabilité & testbuses, naming, dictionnaire de données
Modes centraliséséviter logique disperséeFSM / Stateflow, transitions revues
Bornes partoutsécurité + déterminismeclamp/rate-limit, ranges, saturations
Logs bornĂ©stiming stablebuffer circulaire, quotas, “monitoring task”
3.3 Checklist “MATLAB/Simulink safe-ready” (conception + V&V)
[MATLAB/Simulink Safety-Ready Checklist]

A) Determinism
- [ ] Fixed-step solver for embedded-intent models
- [ ] Explicit sample times; rate transitions handled
- [ ] No hidden dynamic memory patterns in real-time path

B) Data & Types
- [ ] Explicit data dictionary; no implicit signal typing
- [ ] Fixed-width types where needed; consider fixed-point strategy
- [ ] Saturation/clamp everywhere a boundary exists

C) Architecture
- [ ] Modes via explicit state machine (FSM)
- [ ] Separation: control loop vs monitoring/logging
- [ ] Diagnostics flags + counters (observable behavior)

D) Verification
- [ ] Requirements-based tests exist for each key requirement
- [ ] Edge cases covered: sensor out-of-range, spikes, intermittence
- [ ] Back-to-back tests between model and generated/hand code

E) Evidence
- [ ] Traceability matrix: Req -> Model element -> Test -> Report
- [ ] Coverage evidence (model and/or code as required)
- [ ] Configuration management: versioning, reproducible builds and reports
      
4.1 Mini-projet : filtre + clamp + diagnostic (prototype → embedded-style)
Prototype MATLAB simple
function [y, state, diag] = lp1_safe(x, state)
alpha = 0.2;
y = (1-alpha)*state + alpha*x;
diag = struct('sat', false);

if y > 1.0
   y = 1.0; diag.sat = true;
elseif y < -1.0
   y = -1.0; diag.sat = true;
end
state = y;
        
Embedded-style (intention : types fixes + bornes)
% Intent: fixed-point-ish style (concept)
% Use explicit scaling to int16 range [-32768..32767]
function [y_q15, state_q15, diag] = lp1_q15(x_q15, state_q15)
% x_q15: int32 representing Q15
alpha_q15 = int32(6553);  % ~0.2 in Q15 (0.2*32768)

y_q15 = ( (int32(32768)-alpha_q15) * state_q15 + alpha_q15 * x_q15 ) / int32(32768);

diag = struct('sat', false);

if y_q15 > int32(32767)
   y_q15 = int32(32767); diag.sat = true;
elseif y_q15 < int32(-32768)
   y_q15 = int32(-32768); diag.sat = true;
end

state_q15 = y_q15;
        
Ici on montre l’intention “embarquĂ©â€ : Ă©viter doubles implicites, rendre les bornes et saturations explicites.
Table de tests (cas limites)
TestEntréeAttenduDiag
T1x=0, state=0y=0sat=false
T2x=+10, state=0y=+1 (clamp)sat=true
T3x=-10, state=0y=-1 (clamp)sat=true
T4x=0.1, state=0.1y≈0.1sat=false
En safety, tu ajoutes aussi : spikes, intermittence capteur, valeurs NaN/Inf (au niveau prototype), et comportement en modes dégradés.
4.3 FAQ : “MATLAB tourne en vol ?” + rĂ©alitĂ©s embarquĂ©es
Q1 — MATLAB est-il exĂ©cutĂ© “tel quel” sur avion ?
GĂ©nĂ©ralement non. L’usage principal est ingĂ©nierie : conception, simulation, validation. L’embarquĂ© vise du code dĂ©terministe (souvent C/Ada), parfois gĂ©nĂ©rĂ© depuis modĂšles puis vĂ©rifiĂ©.
Q2 — Alors pourquoi MATLAB est central ?
  • AccĂ©lĂšre les itĂ©rations d’algorithmes.
  • Permet des campagnes de simulation massives.
  • Structure le V&V via MBD : tests + rapports + back-to-back.
Q3 — Le risque principal ?
Confondre prototype “desktop” (flexible) et design embarquĂ© (bornĂ©, dĂ©terministe). La solution : discipline, restrictions, tests, traceability, evidence.
⚙ Quickstart MATLAB/Simulink (orientation avionique & safety)
1) Prototype algorithm in MATLAB using real flight/test data
2) Move to Simulink for executable model + timing intent
3) Enforce determinism: fixed-step, explicit sample times, bounded logic
4) Model modes explicitly (state machine) + diagnostics flags
5) Define data dictionary: types, ranges, units, scaling
6) Add clamps/rate limits + plausibility checks everywhere
7) Create requirements-based tests + edge cases
8) Run back-to-back tests (model vs generated/hand code)
9) Validate on SIL then PIL then HIL for timing/IO behavior
10) Produce evidence: reports, coverage, traceability, config management