• Non ci sono risultati.

Capitolo III Software & Metodologia

N/A
N/A
Protected

Academic year: 2021

Condividi "Capitolo III Software & Metodologia"

Copied!
21
0
0

Testo completo

(1)

35

Capitolo III Software & Metodologia

Paragrafo 3.1 Introduzione

In questo paragrafo descriveremo la metodologia utilizzata. Il nostro scopo è realizzare un sistema indossabile per il monitoraggio del flusso d’aria respirato, della frequenza respiratoria e della frequenza cardiaca. Siamo partiti analizzando i dati raccolti dai sensori su di un personal computer; abbiamo realizzato dei Virtual Instruments (VI) in LabView[21] per rendere agevole e rapida la fase di analisi dei dati. I VI sono i programmi realizzati nel linguaggio G tipico dell’ambiente LabView. Questi sono stati pensati in maniera da semplificare l’analisi dei dati raccolti e da renderne agevole la trasposizione sul microcontrollore una volta ottimizzato il software su PC.

A partire dai Virtual Instruments si è passati all’implementazione del codice su microcontrollore. Uno dei punti principali di questa fase è stata la programmazione di un algoritmo Fast Fourier Transform (FFT) in linguaggio di programmazzione C++ che potesse essere caricato sul microcontrollore. A seguire gli algoritmi implementati in LabView sono stati opportunamente modificati ed adattati per essere eseguiti efficacemente sul dispositivo mobile, così da sfruttare al meglio le limitate risorse Hardware ma in modo da offrire comunque un’analisi in tempo reale soddisfacente per un sistema indossabile.

L’ultima fase ha portato alla realizzazione di un’elementare interfaccia grafica per il PC che mostrasse i dati trasmessi dal sistema. L’ interfaccia non è stata volutamente realizzata in LabView, essa è stata realizzata in C++ utilizzando delle librerie grafiche Simple mediaDirect Layer (SDL) che verranno accennate in seguito. Grazie alle caratteristiche delle librerie il programma può essere esportato su diversi sistemi operativi (OS) senza grosse modifiche.

Paragrafo 3.2 Analisi dei segnali

Gran parte dell’analisi dei segnali come accennato precedentemente è stata fatta in LabView un ambiente di sviluppo della National Instruments[22]. Questo ambiente è basato su una intuitiva interfaccia grafica che rende semplice e veloce la programmazione. Le potenzialità di questo ambiente sono notevoli, la National Instruments mette a disposizione diversi hardware proprietari che rendono facili ed automatiche un gran numero di elaborazioni e misurazioni. In esso possono essere facilmente messi a punto degli algoritmi usando i blocchi base disponibili uniti fra loro in

(2)

36 una sorta di diagramma di flusso. Per la nostra applicazione sul Personal computer è stata installata una scheda PCI della National Instruments modello PCI-MIO16 E-4[23] Con questa scheda si possono acquisire fino a 16 canali analogici ed altrettanti canali digitali a frequenze di campionamento fino a 100KS/s. Nel nostro caso le uscite dello stadio di condizionamento analogico sono state collegate a tre diversi ingressi della scheda di acquisizione. Una volta resi disponibili i segnali fisiologici è stato messo a punto un VI per la loro analisi. I primi blocchi del VI caricano in un vettore di lunghezza N selezionabile dall’utente i segnali in ingresso. I 3 vettori così realizzati sono utilizzati come una pila FIFO(First In First Out) il chè significa, che una volta a regime, il vettore viene “shiftato” di un elemento per fare posto al nuovo campione in ingresso e il campione più vecchio viene eliminato.

Questa scelta è necessaria per poter lavorare sul PC in maniera analoga a come si lavora sul microcontrollore,e, nel paragrafo in cui descriviamo il programma implementato, questa scelta verrà motivata estesamente. I due vettori provenienti dal respiro addominale e dal respiro toracico vengono sommati, successivamente moltiplicati per un fattore di scala proveniente dalla procedura di calibrazione (questa procedura sarà descritta più avanti) e in questo modo si ottiene il segnale del flusso respiratorio che è rappresentato nel grafico denominato Spyro sul VI.

Il segnale proveniente dal respiro addominale invece viene sottoposto ad analisi di Fourier esso attraversa un blocco FFT. Dalla FFT del segnale ne viene calcolato il modulo e ne viene eliminata la componente continua tramite un filtro numerico. A questo punto il modulo della FFT del vettore è pronto per essere analizzato per trovarne il “breath rate”(frequenza respiratoria). Da varie prove effettuate il metodo più efficace per identificare il “breath rate” si è dimostrato individuare l’armonica principale della trasformata di Fourier così ottenuta. Il “breath rate” così calcolato viene mostrato da un indicatore sull VI. Per trovare l”heart rate” (frequenza cardiaca) non si è potuto utilizzare lo stesso metodo infatti in segnale cardiaco è molto più disturbato rispetto a quello respiratorio. Ciò si verifica poiché le onde di pressione generate dal battito sono più deboli della pressione meccanica esercitata dai movimenti respiratori. Lo studio della fisiologia umana ci ha dato un piccolo aiuto, infatti, la frequenza respiratoria e quella cardiaca possono essere viste come due variabili aleatorie che fortunatamente non sono incorrelate fra loro, tuttaltro. Ci sono diversi studi che si occupano della correlazione di queste due variabili aleatorie[24] da questi si evince che le frequenza cardiaca in generale è di solito un multiplo della frequenza respiratoria. Potremmo approssimare la dipendenza del heart rate (HR) dal breath rate (BR) con la formula (1).

(3)

37 3,8 ·     5,1 · ; (1)

Grazie a questa relazione possiamo procedere al calcolo del HR prendiamo il vettore contenente i campioni provenienti dal battito cardiaco e facciamone l’FFT. Calcoliamo il modulo dell’FFT e filtriamo eliminandoli tutti gli elementi che non appartengono all’intervallo di frequenze indicato dalla formula (1) a questo punto nel vettore rimanente andiamo a cercare la componente principale, questa sarà la frequenza cardiaca HR stimata dal nostro algoritmo e mostrata sul VI.

Figura 1 Interfaccia in LabView(VI) per l’analisi dei segnali

Nella figura soprastante possiamo osservare la VI in azione. In particolare possiamo notare i grafici del CH1 e CH3 che rappresentano rispettivamente i segnali provenienti dal torace e dall’addome. Sono molto evidenti i cicli respiratori ogni ciclo corrisponde ad un periodo dell’onda rappresentata. Il grafico Spyro rappresenta la somma dei segnali addominali e toracici scalata del coefficiente di calibrazione K. Il grafico denominato CH2 rappresenta l’andamento del segnale

(4)

38 proveniente dal battito cardiaco ottenuto con il nostro sensore è evidente come il segnale cardiaco sia più rumoroso rispetto al segnale respiratorio.

Infine i due indicatori RPM e BPM mostrano i respiri al minuto ed i battiti al minuto calcolati con il nostro algoritmo.

Paragrafo 3.3 La procedura di Calibrazione

La procedura di calibrazione serve a mettere in relazione il segnale in Volt che si ottiene in uscita dal nostro sistema con il reale flusso d’aria effettivamente respirato. Questa procedura necessita la collaborazione del soggetto. Il primo passo e riempire con una quantità nota d’aria un contenitore simile ad un comune palloncino. La quantità nota d’aria viene introdotta grazie ad una siringa calibrata di volume noto pari a due litri. Il passo successivo è quello di richiedere al soggetto di andare in apnea dopo aver espirato. A questo punto si può premere il pulsante Calibrate nell VI ed il paziente respira l’aria dal contenitore noto e, alla fine del respiro, si avrà la costante di calibrazione Kappa calcolata dal VI è mostrata dall’apposito indicatore indicatore. Spieghiamo ora dettagliatamente il calcolo che esegue il VI durante la calibrazione. I dati a nostra disposizione sono la funzione f(x) a cui manca il fattore di calibrazione Kappa e conosciamo la quantità d’aria respirata nel tempo t, questa è nota poiché il volume dell’aria respirata durante la calibrazione lo abbiamo imposto noi (volume del contenitore) ciò corrisponde a conoscere il risultato dell’integrale: ·  come schematizzato nella figura sottostante per un singolo respiro.

(5)

39 Ma la funzione f(x) è nota anch’essa poiché è quella calcolata dalla VI e denominata Spyro. L’unica incognita rimasta è k che può essere facilmente calcolata dalla formula seguente:

 ·   2

La VI esegue l’integrale di f(x) e calcola K. Una volta inserito il giusto valore di kappa nell’algoritmo il nostro sistema rappresenta nel grafico denominato Spyro il flusso respiratorio espresso in litri al minuto.

Paragrafo 3.4 la trasformata veloce di Fourier FFT

Tutta la nostra analisi si basa sullo studio delle trasformate di Fourier dei segnali; questa è la parte più complessa dal punto di vista computazionale per il calcolatore. Nell’ottica di un’implementazione su microcontrollore è stato indispensabile utilizzare un algoritmo di trasformata veloce in maniera da ottimizzare al meglio le risorse hardware disponibili.

L’algoritmo scelto è stato il classico radix-2 sviluppato nel 1965[25]. Quest’algoritmo permette di abbattere notevolmente la complessità di calcolo . Ricordiamo la formula della trasformata discreta di Fourier[26], data una successione di N campioni nel tempo:

xn con n = 0, 1, ..., N-1;

la sua trasformata sarà:

Xk con k = 0, 1, ..., N-1;

dove gli Xk sono calcolati come:

   xe !" # $%

&'(

(6)

40 La formula così espressa presenta una complessità computazionale CDFT pari a:

CDFT= 8N2;

Grazie all’algoritmo radix-2 si ottiene invece una complessità computazionale CFFT pari a:

CFFT= 8Nlog2(N);

Appare chiaro come, al crescere di N, sia sempre più conveniente l’utilizzo di tale algoritmo. Questo ha, tuttavia, un prezzo da pagare. Esso divide ricorsivamente una trasformata di N campioni in due trasformate di N/2 campioni, ripetendo questa suddivisione sino ad ottenere una trasformata di 2 campioni. Così facendo sono trasformabili solo sequenze di N=2m campioni. Per analizzare più nel dettaglio i passi dell’algoritmo riscriviamo la formula (4) introducendo il termine W, denominato comunemente come Twiddle factor:

W=e012; quindi la (4) diventa:    x3W#3 $% 5'( ; 4

Il primo passo dell’algoritmo prevede il riordinamento dei campioni, che vengono divisi in due parti: i campioni pari e quelli dispari. Essi sono ordinati in maniera particolare, operazione che prende il nome di “bit-reverse”, la cui funzione ci sarà più chiara in seguito. Supponiamo che l’indice dei campioni sia espresso in binario su N bit, questi verranno divisi in pari e dispari, ma ordinati in maniera tale da invertire la posizione dei bit della parola binaria che rappresenta l’indice dei campioni ( notiamo che 110->011 ), riportiamo, di seguito, un esempio di bit reverse nel caso di 8 campioni.

Indici in ordine temporale

Indici binari in ordine temporale

Bit reverse binario Bit reverse decimale

(7)

41 1 001 100 4 2 010 010 2 3 011 110 6 4 100 001 1 5 101 101 5 6 110 011 3 7 111 111 7

Tabella 1: Ordine del bit-reverse su 8 campioni

Analizziamo ora, dal punto di vista matematico, la formula(4) e separiamo i campioni d’indice pari e dispari per i primi N/2 punti della sequenza d’ingresso. Possiamo allora scrivere che:

5    $% '( 75    7 5 8   9%75 9% $ % '( $ % '(

Mettendo in evidenza un Wn otteniamo:

5    7 58 75   9%75   %58 75 5 $ % '( $ % '( Con n=0,1,2,...,$% .

Per i successivi N/2 punti della sequenza, invece, possiamo scrivere, analogamente alla notazione precedente che:

:59;

0<=  %59;058 7

59<0 

59;05 (5)

Considerando le propietà di 75 possiamo dire che:

759$  e !" 3 e! /W3 Quindi la (5) diventa: :59; 0<=  %5/ 7 5 5 (6)

(8)

42 Per n=0,1,2,....$

Si possono riscrivere gli indici per il gruppo di campioni con indice maggiore di N/2-1, facendo un semplice cambiamento di variabile dove:

> ?2 ,?2 8 1, … , ? / 1

5  %:5$ =/ 75 :5$ =

Infine, X1n ed X2n vengono così ricombinate per ottenere la FFT desiderata:

5  %58 75 5 @AB >  ?/2

5  %5<

0/ 7

5

5<0 per nD ?/2

Tutto questo procedimento si itera continuando a dividere i campioni con il procedimento di seguito mostrato. Le suddivisioni degli insiemi vanno sempre effettuate fra indici pari e dispari. Per ottenere la sequenza in uscita nell’ordine usuale, dobbiamo stare ben attenti ad eseguire la divisione del bit reverse con la sequenza in ingresso, in modo da avere il grafo denominato a “farfalla”, di cui è riportato nella figura sottostante un esempio per il caso a 8 campioni.

(9)

43

Figura 3 grafo a farfalla dell'algoritmo

Alla fine delle iterazioni non resta altro da fare che mettere insieme tutti i risultati della trasformata ottenuti nei vari passi iterativi.

L’algoritmo così descritto è stato implementato in linguaggio C e se ne fatta una funzione che calcola l’FFT a partire da N campioni questa funzione in C è stata ampiamente usata nel firmware del microcontrollore.

Paragrafo 3.5 Implementazione su Microcontrollore

Il nostro microcontrollore ha una buona potenza di calcolo, è in grado di effettuare fino a sedici milioni di istruzioni al secondo ma ciò nonostante il peso computazionale di una FFT soprattutto su un numero elevato di campioni non è trascurabile. Fra gli obbiettivi del progetto vi è quello di far funzionare il sistema in real time quindi si è dovuta porre una particolare attenzione nelle temporizzazioni: si sono fatte varie stime, poi verificate sul campo, sul tempo necessario al micro per eseguire l’FFT. Ad esempio: supponiamo di campionare a 50Hz e di volere utilizzare 512 campioni, lavorando con un clock ad 8MHz fra un campionamento ed il successivo passeranno 20 millesimi di secondo ed in questo intervallo di tempo ho a disposizione 160000 cicli di clock. Ora stimiamo quante operazioni sono necessarie per una FFT su 512 campioni pari a

(10)

44 CDFT=8 512 log2 512=36846

Possiamo anche stimare quante di queste operazioni siano moltiplicazioni, infatti, l’algoritmo da noi scelto prevede un numero di moltiplicazioni Nm espresso dalla seguente relazione[26]

?&  ?2 log ? ;

nel nostro esempio ?&  2304;

Il nostro microcontrollore è dotato di moltiplicatore Hardware che permette di effettuare una moltiplicazione in appena tre cicli di clock [27] quindi una stima dei cicli di clock necessari è 41454 che si traduce in un intervallo di tempo di circa 5 msec.

Un altro punto chiave dell’implementazione su micro è la gestione della memoria RAM, questa deve avere spazio sufficiente per allocare un vettore di N campioni in ingresso per ogni segnale di cui vogliamo effettuare l’FFT e dovrà contenere anche un vettore N con i risultati nonché diverse variabili ausiliarie necessarie all’elaborazione. Il micro è dotato anche di una ampia memoria Flash da 116KB ma questa è troppo lenta in lettura e scrittura per pensare di effettuare un FFT in real time su dei campioni in essa contenuti. Da dati sperimentali abbiamo misurato che per effettuare un FFT seguita dall’algoritmo di estrazione della frequenza su 128 campioni abbiamo bisogno di circa 2KB di memoria. Ricordiamo che la memoria totale disponibile ammonta a 8KB.

Il numero dei campioni e la frequenza di campionamento sono cruciali. Da essi dipende la precisione dell’algoritmo, infatti la risoluzione frequenziale della nostra FFT è espressa dalla formula:

Δ  IJKLM

$JKLM;

dove:

NO&P è la frequenza di campionamento;

(11)

45 Δsarà così la nostra frequenza minima discriminabile. La risoluzione in frequenza è migliore se minima possibile. Grandi ?NO&P a frequenze relativamente basse sono preferibili.

Alla luce di queste specifiche dovute all’hardware si è corretto l’algoritmo complessivo in labview dividendolo in due unità da caricare separatamente sul micro al fine di mantenere alta la risoluzione frequenziale e quindi avere una buona precisione.

Si è implementato sul micro un primo programma che si occupa esclusivamente del respiro. Questo effettua un campionamento a 5Hz e lavora su un vettore da 512 elementi. N pari a 512 elementi è stato scelto per gestire al meglio lo spazio disponibile in RAM. Mentre la frequenza di campionamento a 5Hz è sufficientemente alta da non violare la condizione di Nyquist. La risoluzione frequenziale così ottenuta è pari a:

Δ  0,009765625 T;

Addentriamoci nei meccanismi del software. Di sotto riportiamo un diagramma di flusso del programma realizzato. Descriveremo il software nel suo funzionamento a regime, osserviamo che in partenza c’è un intervallo di tempo morto in cui il sistema inizializza l’array di dati.

(12)

46 Il convertitore analogico digitale ADC12 campiona i due segnali alla frequenza di 5Hz. I due campioni vengono sommati e moltiplicati per il coefficiente di calibrazione K precedentemente calcolato dall VI. A questo punto il campione viene inserito nella pila FIFO, su di essa prima si effettua l’FFT poi si applica lo stesso procedimento descritto nel paragrafo 3.1. L’utilizzo della pila FIFO è necessario a creare un buffer sui dati in ingresso, infatti, la frequenza di campionamento è piuttosto bassa e per raccogliere un numero di campioni sufficiente ci vuole un tempo superiore al minuto, la pila tiene memoria i dati precedentemente raccolti ed ogni volta che un nuovo dato viene inserito esegue nuovamente tutto l’algoritmo. In questo modo una volta entrato a regime il sistema risponde rapidamente alle variazioni. Esso calcola ed aggiorna ben 5 volte al secondo i dati. In uscita dall’algoritmo abbiamo la frequenza respiratoria ed il dato sul flusso istantaneo di aria respirata. In particolare grazie a questo algoritmo si può ottenere una precisione sulla frequenza respiratoria di più o meno mezzo atto respiratorio al minuto (±0,5859375 UV. Il secondo programma calcola e trasmette il rate respiratorio e quello cardiaco. Esso è simile al precedente ma con alcune piccole differenze. Ciò che più si discosta dal programma fino ad ora visto è il particolare sistema di buffer per ottenere diverse frequenze di campionamento a partire da una singola frequenza di controllo dell’ADC12. La frequenza di campionamento per i segnali è stata modificata rispetto al caso precedente, nel dettaglio il TIMER_A produce un impulso di campionamento ogni 15 Hz. I segnali provenienti dal respiro vengono decimati ne viene memorizzato solo uno su 3 i campioni contenuti nell’array ottenuti in questo modo hanno una frequenza di campionamento pari a 5 Hz. I campioni raccolti riempiono una pila FIFO da 256 elementi. Invece il segnale proveniente dal cuore viene campionato a 15 Hz. Per gestire al meglio le temporizzazioni le trasformate di Fourier vengono effettuate solo ogni nuovo campione respiratorio acquisito. Per non alterare il vettore del segnale cardiaco mentre viene effettuata la trasformata di Fourier i campioni raccolti fra una trasformata e l’altra vengono conservati in un mini-buffer di 3 elementi. Il vettore dei campioni del segnale cardiaco quindi si comporta come una pila FIFO che scorre di tre elementi alla volta con 256 campioni in tutto.

Una volta che sono disponibili i due vettori si procede ad effettuare l’algoritmo di individuazione della frequenza respiratoria e cardiaca esattamente come avveniva nel VI al calcolatore.

(13)

Figura 5 Scema a blocchi del software per il calcolo dell'heart rate

Nella figura soprastante è illustrato il diagramma a blocchi di funzionamento del software.

Osserviamo che l’accorgimento del doppio buffer ci permette, in pratica, di campionare a due frequenze diverse i segnali, partendo da un unico impulso di trigger per il convertitore analogico digitale. Questo accorgimento è causato da tre

• 5 Hz è una frequenza troppo bassa di campionamento per il segnale cardiaco • Un maggior numero di FFT comporta un maggior consumo di potenza;

• Calcolare ad una frequenza superiore i parametri fisiologici non ha senso (variano abbastanza lentamente);

Grazie al filtraggio selettivo pilotato dalla frequenza respiratoria riusciamo ad eliminare gran parte del rumore. Le risoluzioni frequenziali espresse in rispettivamente in battiti e respiri al minuto sono:

dove fcamp=15Hz, e Ncamp=256, mentre per il respiro:

Scema a blocchi del software per il calcolo dell'heart rate

Nella figura soprastante è illustrato il diagramma a blocchi di funzionamento del software.

Osserviamo che l’accorgimento del doppio buffer ci permette, in pratica, di campionare a due diverse i segnali, partendo da un unico impulso di trigger per il convertitore analogico

o accorgimento è causato da tre fattori concorrenti:

5 Hz è una frequenza troppo bassa di campionamento per il segnale cardiaco FFT comporta un maggior consumo di potenza;

Calcolare ad una frequenza superiore i parametri fisiologici non ha senso (variano

Grazie al filtraggio selettivo pilotato dalla frequenza respiratoria riusciamo ad eliminare gran parte l rumore. Le risoluzioni frequenziali espresse in rispettivamente in battiti e respiri al minuto

ΔHR = 60 3;

=256, e ΔHR rappresenta la risoluzione minima discriminabile

47 Nella figura soprastante è illustrato il diagramma a blocchi di funzionamento del software.

Osserviamo che l’accorgimento del doppio buffer ci permette, in pratica, di campionare a due diverse i segnali, partendo da un unico impulso di trigger per il convertitore analogico

5 Hz è una frequenza troppo bassa di campionamento per il segnale cardiaco; FFT comporta un maggior consumo di potenza;

Calcolare ad una frequenza superiore i parametri fisiologici non ha senso (variano

Grazie al filtraggio selettivo pilotato dalla frequenza respiratoria riusciamo ad eliminare gran parte l rumore. Le risoluzioni frequenziali espresse in rispettivamente in battiti e respiri al minuto

(14)

48 ∆ ?NO&P

NO&P· 60 Y 1;

dove NO&P  5T, e ?NO&P  256, e ∆ rappresenta la risoluzione minima discriminabile; Possiamo osservare che riducendo il numero dei campioni abbiamo ridotto anche la risoluzione del respiro rispetto al firmware descritto precedentemente ma questa operazione e necessaria per adattarsi al microcontrollore.

.

Paragrafo 3.6Metodologia d’analisi dei dati

In questo paragrafo mostreremo come appaiono i segnali acquisiti dal nostro sistema e descriveremo come sono stati confrontati con i dati di riferimento ottenuti dal Biopac.

Di seguito abbiamo riportato una grafico che mostra come appaiono i dati acquisiti dal Biopac con i suoi quattro canali.

Figura 6 Acquisizione con il Biopac

Di seguito riportiamo invece il Grafico dei nostri campioni raccolti dal sensore toracico e addominale.

(15)

49

Figura 7 Come appare il segnale del sistema

Il primo grafico è relativo al sensore posizionato sul torace il secondo invece è relativo al sensore addominale. L’asse x è sempre espresso in centesimi di secondo. Possiamo osservare il tipico sfasamento fra i due segnali dovuto alla naturale dinamica respiratoria. Questo sfasamento é assolutamente naturale e sempre presente nei soggetti non affetti da patologie, esso suscita un certo interesse da parte degli pneumologi [28].

(16)

50 Nella figura 8 possiamo osservare il confronto tra la spirometria del biopac e la spirometria del nostro sistema: quest’ultimo rappresentato in verde mentre in bianco è rappresentato il biopac. Lo sfasamento che si osserva, benché i due segnali siano stati campionati contemporaneamente è dovuto ai diversi ritardi introdotti dalle due differenti catene di acquisizione ed è minore di mezzo secondo. Da questo grafico, quasi coincidente, si può valutare la bontà del nostro sistema infatti lo scarto di misura del flusso d’aria si è rilevato sempre inferiore a 0,3[l/m] che corrisponde ad un errore percentuale in media inferiore al 15%.

Per quanto riguarda la frequenza respiratoria essa è stata sempre identificata con precisione con un errore massimo pari a mezzo respiro al minuto a rispetto ai dati ottenuti dal Biopac: pari ad un erroe percentuale inferiore al 5%. Di seguito riportiamo come appare lo spettro di frequenza del nostro segnale respiratorio confrontato con lo spettro proveniente dal segnale del Biopac.

Figura 9 trasformata di fourier di un segnale respiratorio proveniente dal nostro sistema

(17)

51 A parte un fattore di scala differente i due diagrammi sono molto simili e le frequenze della componente principale coincidono.

Andiamo ora ad analizzare come si presentano i segnali provenienti dal battito cardiaco in figura 11 né è rappresentato uno, sono ben visibili le due fasi auscultabili del ciclo cardiaco: la contrazione dei ventricoli e la chiusura delle valvole. Nella figura abbiamo evidenziato una rivoluzione cardiaca, in arancione, ed in un ciclo successivo sono stati evidenziati, in verde, la fase di contrazione ed, in giallo, la fase di apertura delle valvole.

Figura 11 Segnale cardiac ottenuto col nostro sensore

(18)

52

Figura 12 Spettro del segnale di figura 11

Se noi andassimo semplicemente ad analizzare le componenti principali di questo segnale troveremmo che l’armonica dove l’ampiezza è massima è pari a circa 2,23 Hz che corrisponderebbe ad un Heart Rate di 134 battiti molto al di sopra del battito effettivamente rilevato. Ma il nostro sistema è dotato di un filtro mobile centrato sulla frequenza respiratoria, che in questo esempio è pari a 14 respiri al minuto; la trasformata filtrata diventa dunque quella rappresentata in figura 13 in rosso le parti eliminate.

(19)

53

Figura 13 Spettro del segnale di fig.11 in cui sono evidenziate le frequenze filtrate

Grazie al filtraggio ci poniamo in una banda molto più stretta e riusciamo ad evitare gran parte del rumore. La nuova frequenza alla quale si trova l’armonica di maggiore ampiezza è 1,11 Hz che corrisponde ad un battito di circa 68 battiti al minuto che si discosta di poco dai dati rilevati dal biopac, che per questa rivelazione aveva segnalato 69 bpm.

Tuttavia il segnale cardiaco è molto sensibile all’attivià fisica. Le acquisizioni effettuate durante questa tesi sono state effettuate su soggetti in piedi a riposo ed in questi casi l’errore è stato sempre inferiore al 20% ma questo dato abbastanza buono, deve essere confermato da un numero statisticamente significativo di acquisizioni effettuate in condizioni dinamiche in maniera da verificare l’effettiva “robustezza” rispetto agli artefatti introdotti dai movimenti.

(20)

54

Paragrafo 3.7 Interfaccia per il PC

Durante questa tesi si sono gettate le basi software per la realizzazione di un’efficace interfaccia grafica basata su tecnologie multiplatform ed Open source. Infatti si è iniziato a sviluppare una semplice interfaccia grafica in linguaggio C++. Le specifiche alla quale questa doveva rispondere sono:

• Basarsi su tecnologie Open Source; • Poter operare su diversi sistemi operativi;

• Acquisire dalla porta seriale i dati trasmessi dal sistema indossabile;

Come nocciolo su cui costruire quest’interfaccia sono state scelte le librerie SDL (Simple Direct mediaLayer) [29]. Questa è una libreria multimediale multi piattaforma[30], scritta in linguaggio C[31], che crea un livello astratto al di sopra di varie piattaforme software grafiche e sonore e dunque può controllare video ed audio digitale. Questa astrazione permette ai programmatori di scrivere un'applicazione multimediale[32] una sola volta e farla girare su molti sistemi operativi. Inoltre questa libreria è disponibile gratuitamente secondo la filosofia del codice con sorgente aperto.

Allo stato attuale l’interfaccia si presenta piuttosto scarna è rappresenta su di un grafico l’andamento della pletismografia ed indica con un testo il valore del flusso d’aria.

(21)

55 Appare subito chiaro che essa non vuole assurgere al ruolo di interfaccia per l’utente finale poiché appare troppo scarna. Ma vuole essere una base per gli sviluppi futuri. Si può facilmente estendere questo semplice programma in C++ aggiungendo le funzionalità necessarie. Ad esempio per un utilizzo in laboratorio si possono aggiungere delle funzioni di salvataggio dei dati o implementarne altre per effettuare ulteriori analisi o in alternativa per un uso da parte di personale non tecnico si possono aggiungere funzionalità interattive come già sviluppato da altri [5].

Figura

Figura 1 Interfaccia in LabView(VI) per l’analisi dei segnali
Figura 2 Rappresentazione schematica del segnale respiratorio durante la calibrazione
Tabella 1: Ordine del bit-reverse su 8 campioni
Figura 3 grafo a farfalla dell'algoritmo
+7

Riferimenti

Documenti correlati