The GSAT-6A simulation and forensic analysis have been refactored to separate data collection from output generation. All output is now framework-driven, not hardcoded in simulation code.
- Collects detection events in chronological order
- Records event type, severity, subsystem, and confidence
- Generates formatted timeline output
- Calculates lead times between detection methods
- Aggregates telemetry statistics (nominal vs degraded)
- Tracks cascade events
- Generates deviations analysis
- Produces detection comparisons
- Calculates mission impact
- Generates timeline visualization
- Plots telemetry deviations (bar charts)
- Creates detection comparison charts
- All graphs are data-driven from analysis results
1. Initialize frameworks (Timeline, Findings, Visualizer)
2. Generate telemetry (simulators)
3. Analyze with causal inference
4. Record events → Timeline
5. Collect stats → Findings
6. Generate all output:
- `print_analysis()` - text output
- `generate_graphs()` - visualization
1. Initialize frameworks (Timeline, Findings)
2. Run simulation
3. Record causal detections → Timeline
4. Record threshold alerts → Timeline
5. Print timeline
- Data-driven output: Text and graphs generated from actual measurements
- Separation of concerns: Simulation ≠ presentation
- Extensible: Add new analysis types without modifying simulation
- Consistent: All outputs follow same data patterns
- Testable: Framework can be tested independently
- Maintainable: Change output format in one place
- Timeline of events (detection times, severity)
- Telemetry deviations (nominal vs degraded)
- Detection comparison (causal vs threshold-based)
- Mission impact analysis
gsat6a_timeline.png- Event timeline with detection pointsgsat6a_telemetry_deviations.png- Nominal vs degraded comparisongsat6a_detection_comparison.png- Method comparison and lead time
# Forensic analysis with graphs
python gsat6a/live_simulation_main.py forensics
# Live simulation with timeline
python gsat6a/live_simulation_main.py simulation
# Full mission analysis (existing)
python gsat6a/live_simulation_main.py missionSimulation/Analysis Code
↓
[Collect Data]
↓
Timeline ← Events ← Detections
Findings ← Stats ← Telemetry
↓
[Framework]
↓
[Generate Output]
↓
Text Output + Graphs
[CRITICAL] T+ 0.0s [Power ] Solar degradation detected (100%)
[WARNING] T+ 0.0s [Power ] Solar Power = 372W (24.9% drop)
Battery Charge (Ah):
Nominal: 64.32 ± 35.29
Degraded: 31.61 ± 23.64
Change: -32.72 ( +50.9%) ↓
LEAD TIME ADVANTAGE: 0.0s
Can enable preventive action
before cascade failure.
forensics.py- Removed hardcoded output, uses frameworks [OK]live_simulation.py- Removed hardcoded output, uses frameworks [OK]mission_analysis.py- Removed hardcoded visualization code, uses frameworks [OK]live_simulation_main.py- Added graph generation call [OK]
timeline.py- Event timeline framework [OK]findings.py- Analysis findings framework [OK]visualizer.py- Graph generation framework [OK]
Analysis Code Framework Components Output
═════════════════════════════════════════════════════════════════════
forensics.py Timeline print_timeline()
→ Analyze + Findings + print_deviations()
→ Record events ───> + Visualizer ──> + print_comparison()
→ Collect stats + print_impact()
+ 3 PNG graphs
live_simulation.py
→ Run simulation
→ Record events
mission_analysis.py
→ Load CSV data
→ Analyze w/causal
→ Record anomalies
This documentation page includes updates from the v2.0 evaluation suite, incorporating empirical validation on European Space Agency (ESA) flight telemetry and improved hierarchical network rendering:
-
ESA OPS-SAT (OPSSAT-AD): Evaluated on ADCS reaction wheel magnetic interference and magnetometer attitude anomalies. By applying subsystem-aware persistence filtering (
$N=15$ consecutive samples for noisy magnetometer channels,$N=3$ for clean optical sensors), Aethelix achieves a 78.3% F1 score, comparable to deep LSTM autoencoder baselines (78.0% F1) without requiring historical model training. -
ESA-ADB Multi-Mission: Evaluated on satellite telemetry subject to periodic orbital thermal variation. To prevent false alarms caused by 90-minute day/night baseline oscillations, the engine evaluates innovation residuals (
$\Delta x_t = x_t - x_{t-1}$ ). Decoupling slow orbital dynamics from step-change fault signatures isolates transient subsystem anomalies.
-
Bounded Functional Corridors: The visualization script (
scripts/generate_dag_visuals.py) enforces strict vertical coordinate bounding (maximum node altitude$y=0.68$ ), ensuring clean separation from structural layer labels ($y=0.87$ ). -
Normalized Ranking Score Visualization: In accordance with project semantics, node color intensity maps directly to normalized ranking scores (e.g., 0.94 normalized score weight for
PCDU Regulator Failureon GSAT-6A; 0.89 normalized score weight forReaction Wheel Magnetic Interferenceon OPS-SAT). Active causal propagation paths connecting dominant root causes to observed telemetry deviations are highlighted along directed edges.
Benchmark datasets and diagnostic charts can be generated locally using the standalone scripts:
# Render hierarchical causal DAGs with normalized score weighting
python3 scripts/generate_dag_visuals.py
# Generate empirical validation charts across ESA datasets
python3 scripts/generate_validation_plots.py
# Execute benchmark suite evaluation
python3 scripts/esa_benchmark.py --dataset allGenerated diagnostic charts in docs/:
causal_dag_intensity_gsat6a.png— Multi-subsystem causal DAG mapping normalized ranking scores.causal_dag_intensity_opssat.png— ADCS magnetometer interference DAG structure.validation_signal_overlay.png— Telemetry Z-score deviations and persistence window thresholds.validation_confusion_matrix.png— Detection performance comparison against sequence-level baselines.validation_subsystem_metrics.png— Subsystem-level precision, recall, and F1 evaluation.validation_causal_attribution.png— Normalized root-cause score distribution across benchmark scenarios.