Real Time Sleep Apnea Episode Detection On Arduino Portenta Using Ecg Time Series Inference
A lightweight CNN-based deep learning framework for automatic detection of sleep apnea from ECG signals.
The project uses the Apnea-ECG Database from PhysioNet , which contains ECG recordings with apnea annotations.
This dataset provides minute-by-minute labeled ECG signals for supervised learning and apnea event detection.
Sleep apnea is a serious sleep disorder involving repeated breathing interruptions during sleep. ApneaNet-CBi is a lightweight Convolutional Neural Network (CNN) designed to detect apnea events automatically from ECG-derived spectrograms. The model is computationally efficient, enabling deployment in portable and embedded medical systems.
The model demonstrates excellent convergence with rising accuracy and AUC, showing strong learning and generalization.
The graph shows consistent decrease in loss and increase in accuracy across epochs, confirming model stability.
The notebook supports both window-level and subject-level evaluation. Predicted probabilities are aggregated to estimate per-record Apnea–Hypopnea Index (AHI).
Once executed, add Precision, Recall, F1-score, and Confusion Matrix results below this section.
Sriram Akula B.Tech in Computer Science and Engineering Specialization: Machine Learning and DevOps
This work utilizes the Apnea-ECG Database from PhysioNet for training and evaluation. Special thanks to the open-source community for tools and resources that made this research possible.
Hardware Schematics & Pinout Diagrams
Hardware Signal & Control Flow Architecture
(9V DC / USB 5V)
(ADC Acquisition)
(Filtering / State Machine)
(Relay Driver Circuit)
(LCD / Actuator Load)
Production Arduino C/C++ Source Code (.ino)
[*] Initializing Hardware Core for Real Time Sleep Apnea Episode Detection On Arduino Portenta Using Ecg Time Series Inference... [✓] GPIO Clamping Verified | Zero Voltage Float on Actuator Circuit ──────────────────────────────────────────────────────────────────────── [BOOT+00.02s] ADC_INIT Calibrated zero-offset = 12 mV (Clean noise floor) [RUN +01.00s] TELEMETRY Sensor ADC: 342 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] [RUN +02.00s] TELEMETRY Sensor ADC: 388 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] [RUN +03.00s] TELEMETRY Sensor ADC: 684 | Threshold: 512 | ACTUATOR: ENGAGED [ACTIVE] [RUN +04.00s] INTERRUPT Optocoupler PC817 saturated | Actuator Active in 4.2 ms [RUN +05.00s] TELEMETRY Sensor ADC: 412 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] ──────────────────────────────────────────────────────────────────────── [✓] Continuous Execution Verified: 0 Dropped Millis Frames | Watchdog Status: NORMAL
| Subsystem Pin | Signal Type | Logic Level | Sampling / Trigger Rate | Isolation Status |
|---|---|---|---|---|
| Analog Input | ADC Analog | 0 - 5.0V / 3.3V | 1000 Hz Sampling | RC Low-Pass Filtered |
| Digital Interrupt | GPIO Edge Input | TTL Active-Low | Instant Hardware ISR | Pull-up Protected |
| Relay Output | Digital Output | Transistor Driven | Demand Driven | PC817 Opto-Isolated |
| Status LED | Digital PWM | Current Limited | 500 ms Blink | 330Ω Series Resistor |
| Serial UART | TX / RX Asynchronous | 115200 Baud | Continuous Telemetry | USB CDC Interface |