Real-time ECG Analyzer

Introducere

Proiectul constă într-un sistem de monitorizare a activității cardiace (ECG) în timp real, alcătuit dintr-un modul AD8232 conectat la un Marble Pico. Dispozitivul afișează waveform-ul activității cardiace și calculează frecvența cardiacă cu precizie ridicată.

Obiective principale:

  • Monitorizare continuă: Achiziție de date ECG la 250Hz pentru o rezoluție temporală optimă
  • Procesare avansată: Implementarea algoritmului Pan-Tompkins pentru detectarea complexelor QRS
  • Interfață intuitivă: Aplicație desktop cu afișare în timp real și analiză calității semnalului
  • Portabilitate: Design compact, potrivit pentru monitorizare ambulatorie

Motivația proiectului: Majoritatea soluțiilor existente se limitează la măsurarea frecvenței cardiace. Acest proiect oferă o analiză completă a semnalului ECG, incluzând filtrarea avansată DSP și detectarea automată a problemelor de conectare.

Descriere generală

Workflow utilizator:

  1. Conectarea electrozilor - LED-uri de stare indică conectarea corectă (roșu = deconectat, verde = conectat)
  2. Interfața USB - Conectare automată la calculator prin USB CDC
  3. Lansarea aplicației - Auto-detectare dispozitiv și inițializare
  4. Monitorizare live - Afișare continuă cu analiza calității semnalului

Procesarea semnalului:

  • Filtrare hardware: Filtru low-pass pasiv la ~17Hz pentru eliminarea zgomotului de înaltă frecvență
  • Algoritm Pan-Tompkins: Detectare robustă a complexelor QRS

Hardware Design

Lista componente:

Componentă Specificații Rol
AD8232 Amplificator instrumental ECG Achiziție și pre-procesare semnal
Marble Pico RP2040, 264KB RAM Procesare și comunicație
Condensator 0.47µF Filtru low-pass
Rezistor 20kΩ Polarizare amplificator
Electrozi Gel solid Interfață bioelectrică

Interfețe hardware utilizate:

  • GPIO pins: Monitorizare stare electrozi (leads-off detection)
  • UART/USB CDC: Transmisie date la 115200 baud
  • Timer + ADC: Sampling sincronizat la 250Hz, rezoluție 12-bit
  • LED indicators: Feedback vizual stare sistem

Circuit de filtrare: Filtrul low-pass pasiv (R=20kΩ, C=0.47µF) oferă o frecvență de tăiere fc = 1/(2πRC) ≈ 17Hz, eliminând zgomotul muscular și interferențele de înaltă frecvență.

razvan.rotaru1601-hardware.jpg

Software Design

Firmware (Marble Pico):

#define SAMPLING_INTERVAL_MS 4 // 250 Hz
 
bool timer_callback(repeating_timer_t *rt) {
    gpio_put(LED_PIN, !gpio_get(LED_PIN));
 
    int16_t adc_value = -1;
    bool leads_connected = true;
 
    if (gpio_get(LO_PLUS) || gpio_get(LO_MINUS)) {
        leads_connected = false;
    }
 
    if (leads_connected) {
        adc_value = adc_read();
    }
    printf("%d\n", adc_value);
    return true;
}

Caracteristici firmware:

  • Timer repetat: 4ms interval pentru sampling la 250Hz
  • Detecție electrozi: Verificare stare LO+ și LO- pentru conectare
  • Output format: Valori ADC printate ca int16_t prin USB CDC
  • LED indicator: Toggle pentru feedback vizual

Aplicația desktop:

Funcționalități:

  • Citire date: Parse serial input pentru valori ADC
  • Grafic real-time: Afișare waveform ECG pentru ultimele 6 secunde
  • Algoritm Pan-Tompkins: Detectare complexe QRS pentru calculul heart rate
  • Status: Afișare stare electrozi și calitate semnal

Rezultate Obținute

Funcționalități implementate:

  • Sampling stabil: 250Hz cu timer hardware
  • Detecție electrozi: LED indicators pentru starea conexiunii
  • Transmisie USB: Date ECG în timp real către aplicația desktop
  • Interfață grafică: Afișare waveform și calculul basic al heart rate-ului

Potențial de scalare: Design-ul permite extinderea cu mai multe canale ECG prin multiplexarea ADC-ului și procesarea paralelă.

Concluzii

Lecții învățate:

  • Zgomotul este o problemă majoră pentru semnalele ECG de amplitudine mică
  • Sursa de alimentare introduce interferențe care afectează calitatea semnalului
  • Filtrarea hardware (condensator + rezistor) ajută dar nu elimină complet zgomotul

Dezvoltări viitoare:

  1. Îmbunătățirea filtrării - filtre digitale mai avansate în software
  2. PCB dedicat pentru reducerea zgomotului și a dimensiunilor
  3. Algoritmi mai buni pentru detectarea heart rate-ului în prezența zgomotului
  4. Interfață mai user-friendly cu setări configurabile

Download

https://github.com/RouterInfoMan/ecg-pm

Conține:

  • Cod sursă firmware (C/C++)
  • Aplicație desktop (Python/Qt)
  • Documentație hardware (schemă)

Jurnal

  • Saptamana 27.03 - 4.05
    • Am asamblat legatura Marble Pico - AD8232 si simulat basic polling fara timere
    • Am trimis datele prin UART la un serial plotter
    • Probleme întâlnite: Zgomot excesiv, sampling neuniform
    • Rezultatul obtinut

razvan.rotaru1601-ecg_output.jpg

  • Saptamana 5.05 - 11.05
    • Am adaugat timere hardware pentru sampling precis la 250Hz
    • Am refactorizat codul firmware pentru eficiență
    • Am început dezvoltarea aplicației desktop cu interfață grafică
    • Milestone: Achiziție stabilă cu timer repetat
  • Saptamana 12.05 - 18.05
    • Am implementat baza algoritmului Pan-Tompkins pentru detectarea QRS
    • Am dezvoltat aplicația desktop pentru afișarea graficului în timp real
    • Problemă: Algoritmul nu detecta corect complexele QRS din cauza configurării greșite
  • Saptamana 19.05 - 25.05
    • Am corectat problemele cu algoritmul Pan-Tompkins (configurare filtru digital)
    • Am testat sistemul pe mai multe persoane pentru validarea funcționării
    • Am îmbunătățit interfața aplicației cu indicatori de stare
    • Rezultat: Sistem funcțional care afișează ECG și calculează heart rate-ul

Bibliografie/Resurse

pm/prj2025/rnedelcu/razvan.rotaru1601.txt · Last modified: 2025/05/28 15:22 by razvan.rotaru1601
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0