Calcolo del Ritmo Cardiaco Fetale da Segnali ECG mediante MATLAB: Un Approccio Integrato

Il periodo della gravidanza espone la madre ed il feto ad un continuo adattamento alle mutevoli condizioni che la situazione presenta. I cambiamenti fisici e psicologici che la madre affronta sono notevoli e meritano di essere studiati da più prospettive, sia per comprendere le dinamiche fisiologiche che per garantire il benessere di entrambi. Un attento monitoraggio, infatti, permette di prevenire rischi sia per la madre che per il feto, attraverso periodiche visite con specialisti ed esecuzione di esami di laboratorio o con apparecchiatura diagnostica. Tra le varie metodologie diagnostiche e di monitoraggio, l'acquisizione e l'analisi del segnale elettrocardiografico (ECG) rivestono un ruolo di primaria importanza. Questo articolo esplora i metodi per l'acquisizione, l'elaborazione e l'analisi di segnali ECG, con un focus specifico sul calcolo del ritmo cardiaco fetale e materno utilizzando il software MATLAB, integrando concetti teorici con approcci pratici derivati da studi e ricerche recenti.

Acquisizione del Segnale Elettrocardiografico (ECG) in Gravidanza e Parto

Una possibile attività di monitoraggio durante la gestazione e il travaglio può essere l’acquisizione del segnale elettrocardiografico (ECG), sia materno che fetale. Le modalità di acquisizione variano in base alla fase della gravidanza e all'obiettivo specifico dell'analisi. Durante la gravidanza, l'ECG fetale può essere ottenuto in modo non invasivo attraverso la disposizione di elettrodi specifici sull'addome e sul torace della madre. Questa tecnica, nota come elettrocardiografia addominale fetale (fECG), permette di catturare le deboli ma caratteristiche onde ECG del feto, che si sovrappongono al segnale ECG materno. Nel momento del parto, per ottenere un segnale ECG fetale di maggiore qualità e dettaglio, è possibile utilizzare un elettrodo a spirale applicato direttamente sullo scalpo fetale. Questa procedura, pur essendo più invasiva, fornisce dati più precisi per monitorare lo stato fetale durante il travaglio attivo.

Disposizione elettrodi ECG materno e fetale sull'addome

L'acquisizione del segnale ECG, sia esso materno o fetale, richiede un'attenta considerazione della qualità del segnale, poiché artefatti da movimento, interferenze elettriche e la bassa ampiezza del segnale fetale possono complicare l'analisi. La scelta del software e degli algoritmi di elaborazione diventa quindi cruciale per estrarre informazioni affidabili da questi segnali complessi.

Dalla Forma d'Onda ECG agli Intervalli RR: La Base per l'Analisi del Ritmo Cardiaco

Attraverso l'ECG, è possibile procedere con l'analisi della variabilità del ritmo cardiaco (in inglese Heart-Rate Variability, HRV). Questo tipo di analisi si basa sull'estrazione degli intervalli temporali tra battiti cardiaci successivi. Nello specifico, questi intervalli sono definiti come gli intervalli RR, che rappresentano il tempo tra due picchi R consecutivi del complesso QRS. Il complesso QRS è la deflessione più prominente nell'ECG, rappresentativa della depolarizzazione ventricolare. La precisione nell'identificazione di questi picchi R è fondamentale per ottenere misure affidabili del ritmo cardiaco.

Gli intervalli RR così estratti vengono poi utilizzati per costruire il "tacogramma", una rappresentazione grafica degli intervalli RR in funzione del tempo. Questo tacogramma è la base per successive analisi, che possono essere condotte sia nel dominio del tempo che nel dominio della frequenza, al fine di estrarre specifici indici dell'HRV. Tali indici forniscono informazioni quantitative sullo stato del sistema cardiovascolare e sulla sua regolazione.

Complesso QRS in un segnale ECG con picco R evidenziato

Identificazione dei Picchi R e Calcolo degli Intervalli RR

Una delle prime e più critiche fasi nell'elaborazione di un segnale ECG per calcolare il ritmo cardiaco è l'identificazione accurata dei picchi R. Diverse metodologie possono essere impiegate, a seconda della qualità del segnale e degli strumenti a disposizione.

Un approccio comune, come suggerito da alcuni utenti, prevede l'utilizzo della funzione findpeaks in MATLAB. Questa funzione può essere impiegata per rilevare i picchi in un segnale dato. Per ottenere risultati ottimali, specialmente con segnali rumorosi, potrebbe essere necessario un pre-filtraggio del segnale ECG.

Consideriamo un segnale ECG acquisito e campionato a una frequenza fs. Il tempo t associato a ciascun campione può essere definito come:t = linspace(0, length(sig)/fs, length(sig));

Se si dispone di un segnale ECG EKG e della sua frequenza di campionamento Fs, si possono identificare i picchi R e i loro tempi di occorrenza utilizzando findpeaks. Ad esempio, in un contesto di analisi, si potrebbe avere:[Pks, Locs] = findpeaks(EKG, 'MinPeakHeight', threshold);dove Locs conterrà i tempi (o gli indici, a seconda della configurazione) dei picchi R rilevati. Se Locs contiene i tempi in secondi, la differenza tra tempi consecutivi (diff(Locs)) fornisce gli intervalli RR in secondi.

Il calcolo del battito cardiaco medio (BPM) può quindi essere effettuato in diversi modi:

  1. Basato sulla media degli intervalli RR: Calcolando la media degli intervalli RR (ad esempio, in secondi) e poi convertendo in BPM:MeanHr1 = 60 / mean(diff(Locs));Questo metodo fornisce una stima del ritmo cardiaco medio sull'intero periodo analizzato.

  2. Basato sul numero totale di battiti: Contando il numero totale di R-waves rilevati (numel(Locs)) e dividendo per la durata totale dell'acquisizione (differenza tra il tempo dell'ultimo e del primo R-wave):Duration = Locs(end) - Locs(1);MeanHr = numel(Locs) / Duration * 60;Questo metodo è analogo al precedente ma può essere utile per verificare la coerenza dei risultati.

Un esempio di codice per leggere un segnale ECG da un file CSV e calcolare il battito cardiaco medio utilizzando findpeaks potrebbe essere:

% Assumendo che 'Anonymous ECG.csv' contenga i dati ECGEKG = readmatrix('Anonymous ECG.csv');Fs = 350/2; % Esempio di frequenza di campionamento, potrebbe necessitare di correzione% Se il segnale è già in tempo (ad esempio, se il file contiene tempo e ampiezza)% allora si usano direttamente i tempi. Altrimenti, si genera un vettore tempo.% Supponendo che EKG sia solo l'ampiezza e Fs sia nota:L = numel(EKG);Ts = 1/Fs;tv = linspace(0, L*Ts, L); % Vettore tempo in secondi% Rilevamento picchi R% È spesso necessario un filtro prima di findpeaks, e un valore di soglia appropriato% In questo esempio, usiamo una soglia arbitraria che potrebbe dover essere adattatathreshold = 0.2 * max(EKG); % Esempio di soglia dinamica basata sul massimo del segnale[Pks, Locs_idx] = findpeaks(EKG, 'MinPeakHeight', threshold);Locs_time = tv(Locs_idx); % Tempi dei picchi R in secondi% Calcolo del battito cardiaco medioif numel(Locs_time) > 1 MeanHr_time = 60 / mean(diff(Locs_time)); disp(['Battito cardiaco medio (basato su intervalli RR): ', num2str(MeanHr_time), ' BPM']);else disp('Non sono stati rilevati sufficienti picchi R per calcolare il battito cardiaco medio.');end

È importante notare che la frequenza di campionamento Fs (qui usata come 350/2) è un parametro critico e deve essere correttamente determinata dal file sorgente dei dati. Se Fs è errata, i calcoli del ritmo cardiaco saranno proporzionalmente errati.

Gestione del Rumore e Pre-elaborazione del Segnale

La qualità del segnale ECG è di vitale importanza. Segnali grezzi, specialmente quelli acquisiti in contesti clinici reali o durante la gravidanza/parto, possono essere affetti da rumore e artefatti. Il rumore può derivare da artefatti muscolari, interferenze di rete elettrica, movimento del paziente o elettrodi non correttamente posizionati. Campioni invalidi possono anche essere presenti a causa di problemi di acquisizione o trasmissione.

Se il segnale è molto rumoroso, il rilevamento dei picchi R con findpeaks può diventare inaffidabile. In questi casi, è consigliabile un pre-filtraggio del segnale. Le tecniche di filtraggio comuni includono:

  • Filtri passa-banda: Per rimuovere frequenze al di fuori della banda di interesse per l'ECG (tipicamente tra 0.5 Hz e 150 Hz).
  • Filtri notch: Per eliminare specifiche frequenze di interferenza, come quella della rete elettrica a 50 Hz o 60 Hz.
  • Filtri adattivi: Più complessi, ma capaci di rimuovere rumore variabile nel tempo.

Nel caso di segnali acquisiti da file binari, come ficheroAnalogico.dat menzionato, dove il segnale è campionato a 1kHz e memorizzato come int16 in millivolt, la fase di lettura e normalizzazione è la prima da affrontare:

% Lettura dati da file binariofl = fopen("ficheroAnalogico.dat", 'r'); % Assumendo 'r' per lettura, specificare 'rb' se binarioA = fread(fl, inf, 'int16');fclose(fl);% Conversione da int16 a volt, se necessario (richiede conoscere il fattore di scala)% Supponendo che i dati siano già in una scala utilizzabile o che il fattore sia 1Fs = 1000; % Frequenza di campionamentotimeVector = (0:length(A)-1) / Fs; % Vettore tempo in secondi% Esempio di filtraggio passa-bandalowCutoff = 0.5; % HzhighCutoff = 150; % Hz[b, a] = butter(4, [lowCutoff highCutoff]/(Fs/2), 'bandpass'); % Ordine 4, filtro Butterworthfiltered_A = filtfilt(b, a, double(A)); % filtfilt applica il filtro in avanti e indietro per evitare ritardi di fase% Plot del segnale originale e filtrato per confrontofigure;subplot(2,1,1);plot(timeVector(1:min(4000, end)), A(1:min(4000, end)));title('Segnale ECG Grezzo (Primi 4000 campioni)');xlabel('Tempo (s)');ylabel('Ampiezza');grid on;subplot(2,1,2);plot(timeVector(1:min(4000, end)), filtered_A(1:min(4000, end)));title('Segnale ECG Filtrato (Primi 4000 campioni)');xlabel('Tempo (s)');ylabel('Ampiezza');grid on;% Ora si può procedere con findpeaks sul segnale filtered_A% ... (codice per findpeaks e calcolo HR)

L'uso di filtfilt è preferibile a filter in molte applicazioni biomedicali perché filtfilt applica il filtro in avanti e all'indietro, annullando la distorsione di fase che potrebbe alterare la morfologia dei complessi QRS e quindi la precisione nel rilevamento dei picchi R.

Analisi nel Dominio della Frequenza con Trasformata di Fourier

Oltre all'analisi nel dominio del tempo basata sugli intervalli RR, il ritmo cardiaco può essere stimato attraverso l'analisi spettrale utilizzando la Trasformata di Fourier (FT). Questo approccio è particolarmente utile per identificare la frequenza dominante del battito cardiaco in un segnale.

L'idea di base è che la frequenza di battito cardiaco corrisponde a una frequenza predominante nello spettro di potenza del segnale ECG. Sebbene l'HRV analizzi le variazioni rapide di frequenza, la frequenza cardiaca media corrisponde a un picco ben definito nello spettro di frequenza.

Per eseguire l'analisi spettrale in MATLAB:

  1. Calcolare la Trasformata di Fourier Discreta (DFT): Utilizzando la funzione fft. È importante rimuovere eventuali offset DC (componente a frequenza zero) prima di applicare la FFT.
  2. Generare il Vettore delle Frequenze: La funzione fft restituisce i coefficienti per un certo intervallo di frequenze. È necessario creare un vettore che rappresenti queste frequenze.
  3. Identificare il Picco di Frequenza: Trovare il picco di maggiore ampiezza nello spettro di frequenza (tipicamente, si considera la metà positiva dello spettro a causa della simmetria). Questo picco corrisponderà alla frequenza cardiaca principale.

Un esempio di implementazione in MATLAB, partendo da un segnale EKG campionato a Fs:

% Assumendo che 'EKG' sia il vettore del segnale ECG e 'Fs' la frequenza di campionamentoL = numel(EKG); % Lunghezza del segnaleFTEKG = fft(EKG - mean(EKG))/L; % Trasformata di Fourier, sottraendo la media per rimuovere DC offset% Generazione del vettore delle frequenze per la metà positiva dello spettroFn = Fs/2; % Frequenza di NyquistFv = linspace(0, Fn, fix(L/2)+1); % Vettore delle frequenze in Hz% Consideriamo solo la metà positiva dello spettro (più significativa)FTEKG_half = FTEKG(1:fix(L/2)+1);% Calcolo dello spettro di ampiezza (valore assoluto)AmplitudeSpectrum = abs(FTEKG_half) * 2; % Moltiplichiamo per 2 per compensare la metà scartata% Trovare il picco di frequenza principale (esclusa la frequenza zero se non si è già partiti da lì)% Spesso si cerca il picco maggiore nello spettro che non sia DC (che è FTEKG(1))[~, Idx] = max(AmplitudeSpectrum(2:end)); % Troviamo il max escludendo la componente DCIdx = Idx + 1; % Indice corretto nel vettore AmplitudeSpectrum% Ottenere la frequenza associata al picco massimoPeakFrequency = Fv(Idx); % Frequenza in Hz% Convertire la frequenza in battiti per minuto (BPM)MeanHR_fft = PeakFrequency * 60;disp(['Battito cardiaco medio (basato su analisi FFT): ', num2str(MeanHR_fft), ' BPM']);% Plot dello spettro di frequenzafigure;plot(Fv, AmplitudeSpectrum);title('Spettro di Ampiezza del Segnale ECG');xlabel('Frequenza (Hz)');ylabel('Ampiezza');grid on;xlim([0 2]); % Limita l'asse x per visualizzare meglio le frequenze cardiache tipiche

È importante notare che l'analisi FFT potrebbe essere influenzata da rumore a banda larga che non viene rimosso con filtri semplici. Come menzionato in un contributo utente, "the broadband noise present in the Fourier-transformed data (that cannot be removed with a frequency-selective filter) may obscure the actual R-wave peak in the Fourier-transformed data." Pertanto, i risultati ottenuti dall'analisi FFT potrebbero non coincidere perfettamente con quelli basati sul rilevamento dei picchi R, ma dovrebbero essere ragionevolmente vicini.

Spettro di frequenza di un segnale ECG con picco cardiaco identificato

Analisi della Variabilità del Ritmo Cardiaco (HRV) e Implicazioni Fisiologiche

L'analisi della variabilità del ritmo cardiaco (HRV) va oltre la semplice stima del battito cardiaco medio. Essa esamina le fluttuazioni nel tempo degli intervalli RR, riflettendo il complesso interplay tra il sistema nervoso autonomo (SNA) e il cuore. L'SNA è composto da due branche principali: il sistema nervoso simpatico (SNS) e il sistema nervoso parasimpatico (SNP).

  • Il SNS, spesso associato alla risposta "lotta o fuga", tende ad aumentare la frequenza cardiaca e a diminuire la variabilità.
  • Il SNP, associato alla risposta "riposo e digestione", tende a diminuire la frequenza cardiaca e ad aumentare la variabilità.

In condizioni fisiologiche normali, vi è un equilibrio dinamico tra queste due branche che regola la funzionalità cardiaca. L'HRV quantifica questa modulazione. Indici comuni di HRV includono:

Indici nel Dominio del Tempo:

  • SDNN (Standard Deviation of NN intervals): La deviazione standard di tutti gli intervalli RR (NN, dove N sta per intervalli normali, escludendo battiti ectopici). Indica la variabilità totale.
  • RMSSD (Root Mean Square of Successive Differences): La radice quadrata della media delle differenze al quadrato tra intervalli RR successivi. È più sensibile alla variabilità a breve termine e riflette principalmente l'attività parasimpatica.
  • SDSD (Standard Deviation of Differences between Successive RR intervals): Simile a RMSSD, misura la variabilità nelle differenze tra battiti consecutivi.

Indici nel Dominio della Frequenza:

Questi indici vengono calcolati dopo aver trasformato il segnale degli intervalli RR nel dominio della frequenza, solitamente tramite tecniche come la Trasformata di Fourier o il metodo AR (Autoregressive).

  • LF (Low Frequency): Componente di potenza nelle bande di frequenza basse (tipicamente 0.04-0.15 Hz). Si ritiene sia influenzata sia dal SNS che dal SNP, ma con una maggiore dominanza simpatica in alcune condizioni.
  • HF (High Frequency): Componente di potenza nelle bande di frequenza alte (tipicamente 0.15-0.4 Hz). È considerata un indicatore primario dell'attività parasimpatica (vagale).
  • LF/HF Ratio: Il rapporto tra le potenze LF e HF. Un aumento di questo rapporto è generalmente associato a una maggiore attività simpatica rispetto a quella parasimpatica.

Diagramma che illustra l'influenza del sistema nervoso autonomo sull'HRV

HRV in Gravidanza e Parto

Lo studio dell'HRV in gravidanza è un'area di ricerca attiva, con diversi approcci che considerano l'alterazione di HRV dovuta a specifici task, stress materno, o condizioni patologiche psico-fisiche. Ad esempio, l'HRV può essere utilizzata per valutare lo stress indotto dal parto sulla madre. Durante il travaglio, si possono osservare cambiamenti significativi negli indici HRV, che riflettono le risposte fisiologiche allo sforzo fisico e allo stress emotivo.

Un'analisi specifica potrebbe prendere in considerazione due segnali ECG acquisiti durante la gravidanza o durante il parto per la valutazione dello stress indotto dal parto sulla madre. L'elaborazione di questi segnali attraverso MATLAB permetterebbe di costruire i tacogrammi e calcolare gli indici dell'HRV, fornendo una quantificazione oggettiva delle risposte del SNA materno.

Le esercitazioni pratiche menzionate, come la rappresentazione delle distribuzioni degli intervalli RR istantanei mediante boxplot, l'identificazione dei battiti anomali tramite il coefficiente di correlazione di Pearson, o la delineazione di tracciati ECG mediante algoritmi specifici (es. Martinez et al.), sono tutti passi fondamentali per ottenere dati HRV robusti e affidabili.

Rilevamento della frequenza cardiaca da un ECG (HRV) - Progetti Matlab!

Approcci Avanzati e Sfide nell'Analisi ECG

La determinazione accurata della frequenza cardiaca fetale e materna, e l'analisi HRV associata, presentano diverse sfide. La presenza di interferenze, la bassa ampiezza del segnale fetale, e la necessità di identificare con precisione i complessi QRS richiedono algoritmi sofisticati.

Delineazione del Complesso QRS

Algoritmi avanzati per la rilevazione del complesso QRS, come quello proposto da Martinez et al., mirano a migliorare la robustezza e la precisione rispetto a metodi più semplici come il solo findpeaks. Questi algoritmi spesso includono passaggi di filtraggio più elaborati, derivatizzazione del segnale per enfatizzare le transizioni rapide (come suggerito per aumentare l'ampiezza dei picchi R), e l'applicazione di modelli o soglie dinamiche per distinguere i veri complessi QRS da artefatti.

Ad esempio, la derivatizzazione del segnale ECG può aumentare la sua sensibilità ai picchi R. Sebbene non sia un metodo standard per il calcolo diretto della frequenza cardiaca, può essere un passo preliminare in pipeline di elaborazione più complesse.

Fenotipizzazione Digitale

Concetti come la "fenotipizzazione digitale" (espressa da Torous et al.) stanno emergendo come un modo per integrare dati fisiologici complessi, come quelli derivati dall'ECG, per ottenere un quadro più completo dello stato di salute di un individuo. In gravidanza, questo potrebbe significare correlare i dati HRV materni e fetali con altri biomarcatori o con parametri clinici per una valutazione perinatale più olistica. I biomarcatori tradizionali vengono confrontati con l'informazione ricca e continua che la fenotipizzazione digitale può offrire.

Utilizzo di MATLAB per la Ricerca e l'Applicazione Clinica

MATLAB, con i suoi potenti toolbox (come il Signal Processing Toolbox e il Bioinfomatics Toolbox), offre un ambiente integrato per lo sviluppo e l'implementazione di algoritmi per l'analisi di segnali ECG. La capacità di caricare dati da vari formati (file di testo, CSV, binari), visualizzare segnali, applicare trasformazioni matematiche, implementare algoritmi di rilevamento e analisi, e generare report grafici, lo rende uno strumento indispensabile per ricercatori e clinici che lavorano nel campo della cardiologia fetale e materna. La possibilità di testare diversi approcci, come l'analisi nel dominio del tempo e della frequenza, e di confrontare simultaneamente i risultati, permette di ottenere una comprensione più profonda e sfaccettata della salute cardiovascolare durante la gravidanza.

La sfida rimane quella di convalidare gli algoritmi con ampi set di dati clinici e di tradurre le scoperte della ricerca in applicazioni cliniche pratiche e affidabili, garantendo al contempo la comprensibilità e l'accessibilità per diversi livelli di utenza, dallo studente al professionista.La capacità di analizzare segnali non filtrati, o di decidere quando e come filtrare, è una competenza chiave. Un segnale non filtrato può contenere informazioni che un filtro potrebbe rimuovere, ma è anche più suscettibile ad artefatti. La scelta della strategia di elaborazione dipende dall'obiettivo specifico dell'analisi.

In sintesi, il calcolo del ritmo cardiaco fetale e materno da segnali ECG in MATLAB si avvale di tecniche di elaborazione del segnale per estrarre informazioni vitali. Dalla semplice stima della frequenza cardiaca basata sugli intervalli RR, all'analisi complessa della variabilità del ritmo cardiaco e delle sue implicazioni fisiologiche, MATLAB fornisce gli strumenti necessari per affrontare queste sfide. L'integrazione di metodi basati sul tempo e sulla frequenza, unitamente a tecniche di pre-elaborazione per gestire il rumore, è fondamentale per ottenere risultati accurati e significativi.

tags: #come #ricavare #il #ritmo #cardiaco #medio