Introduktion:
I denne øvelse, skal I hente de gemte data EKG og tonometri dataindsamlingen og analysere dem. I store træk handler det om at finde tidspunktet for peaks på EKG'et (R-takken) samt peaks på tryk-kurven (tonometri-kurven). Tiden imellem de to kombineret med afstanden mellem fossa jugularis og målestedet kan bruges til at beregne Pulse Wave Velocity.
VI implementation:
- Dataindlæsning
- Lav et tomt VI.
- Indsæt et "Read From Measurement File" Express VI
- Express -> Input -> Read Meas File
- HUSK at sætte punktum/komma til jeres respektive formater
(aflæs formatet i den gemte LVM fil ved at åbne den i notepad el. lign.)
- Nu skal de samme øvelser som ved optagelsen laves
- Split signalet i to med en "Split Signals"
- Indsæt et lavpas filter på begge signaler med Cutoff Frequence på 20 Hz
- Medmindre I har været MEGET dygtige, har I ikke kunnet holde baseline niveauet på trykkurven konstant. Den vil med andre ord gå lidt op og ned afhængigt af hvor hårdt I har trykket på proben. Dette kaldes baseline drift og er også velkendt fra EKG signaler. Lykkeligvis virker løsningen fra EKG signal behandling, ved at benytte et højpas filter (se yderligere her) også på trykkurven:
- Indsæt et "Classic Filter Design" Express VI
- Signal Processing -> Digital Filter Design -> Filter Design -> Classical Filter Design
- Sæt værdierne til nedenstående og tryk OK
- Indsæt et "Classic Filter Design" Express VI
- Dette filter skal forbindes med to DFD Filtering VI
- Signal Processing -> Digital Filter Design -> Processing -> DFD Filtering
- Fra drop-down menuen under VI'et: Vælg
- Single Channel -> Multiple Samples -> Waveform
- Forbind Signal in med signalet fra de to lavpas filtre (husk at lave et DFD Filtering VI til hver)
- Forbind Filtret fra Kaiser Window Highpass Filter til Filter indgangen på DFD Filtering
- Det skulle nu se nogenlunde sådan ud:
- Indsæt Waveform Graphs på lige efter Split Signals og efter filtrene og iagttag forskellen. Find et niveau på både EKG og tryk-signalet, som kan bruges til et threshold for, hvilke peaks det er, som skal bruges senere (de største peaks). I signalet til højre kunne dette niveau fx være 0,4.
- Læg mærke til, at den første del af signalet ser underlig ud efter filtreringen. Den skal nu sorteres fra:
- Indsæt to "Extract Portion of Signal" funktioner
- Express -> Signal Manipulation -> Extract Portion
- Sæt "Begin at sample number" til en værdi efter signalet er blevet normaliseret og lad duration stå på remaining samples.
- Indsæt to "Extract Portion of Signal" funktioner
I skal nu lave peak detection, hvis resultater skal plottes og behandles. Implementeringen svarer fuldstændig til den fra Step Response øvelsen, som vi genbruger kode fra i form af et SubVI:
- Da I lavede Step Response øvelsen, indsatte I kode, som generede "kunstige" X-data bestående af tal fra 1 til antallet af samples, som via en Bundle funktion blev samlet med selve Y-data og brugt som input til en Bundle Array funktion, så vi kunne vise såvel selve signalet som peaks og valleys i en og samme graf - disse funktioner kan genbruges her:
- Åbn 4-2_StepResponseAnalysis.vi
- Marker disse funktioner:
- Vælg Edit -> Create SubVI
- Dobbeltklik på det nye ikon og åbn Block Diagrammet ved at trykke Ctrl + E
- Højreklik på ikonet øverst th og vælg Edit Icon…
- Vælg noget, som symboliserer funktionen: At tage et array og lave dem om til XY data, som kan plottes i en XY graf
- På Sub-VI Front panelet: Omdøb Cluster til at hedde XY Data
- Gem dit Sub-VI som XY-data_SubVI.vi
- Indsæt dit nyskabte Sub-VI i PWV VI'et, du er ved at lave.
- Indsæt en "Convert From Dynamic Data funktion
- Express -> Signal Manipulation -> Convert From Dynamic Data
- Vælg 1D array of scalars - automatic og tryk OK
- Forbind udgangen fra Extract Portion of Signal på tryk signalet (nederst) med konverteringsfunktionen og forbind udgangen herfra med jeres Sub-VI
- Indsæt et "Peak Detector" VI
- Signal Processing -> Signal Operation -> Peak Detector
- Forbind "Threshold" indgangen med det aflæste niveau fra tidligere
- Højreklik på "Locations" udgangen og vælg "Create Indicator"
- Kald det nyskabte indikator array for "Tryk Peaks" og udvid det på frontpanelet til at indeholde 10-12 peaks
- Indsæt en "Bundle" funktion
- Programming -> Cluster, Class & Variant -> Bundle
- Forbind indgangene med Locations og Amplitudes fra Peak Detektoren.
- Indsæt en "Build Array" funktion og samle clustret fra bundle funktionen samt jeres Sub-VI heri.
- Forbind udgangen med en XY-graf, kald den Tryk
- I skulle nu have noget som ligner Block Diagrammet th:
- Kopier hele denne blok til EKG signalet
(husk at omdøbe alle Tryk til EKG)
Tryk- og EKG-plottet har, efter peak-detektionen, fået slettet sin tids-information, så X-aksen nu er antal samples, ikke tid. Dette skal nu konverteres tilbage til tid i sekunder ved at dividere med 200 Hz, samplings-raten fra DAQ-assistenten.
- Divider Locations udgangen fra Peak Detectoren med 200
- Lav en unbundle på udgangen fra XY-data sub-VI'et og divider øverste signal med 200. Samle begge signaler igen i et med bundle. Se nærmere herunder:
Vi er nu næsten i hus. Sidste punkt er at trække Tryk Peaks fra EKG Peaks og midle differencen, samt udregne PWV ved at kunne indtaste distancen fra fossa jugularis til a. radialis målestedet:
- Indsæt en minus funktion og forbind data, der går ind i Tryk Peaks Arrayet med øverste indgang.
- Forbind data til EKG arrayet med nederste indgang.
- Skab et Indikator Array ved at højreklikke udgangen af divisions funktionen og vælge Create -> Indicator. Omdøb det til Difference
- Indsæt en "Mean" funktion
- Mathematics -> Prob & Stat -> Mean
- Forbind den med indgangen til Difference arrayet
- Indsæt en numerisk kontrol på front panelet og omdøb den til Distance.
- Indsæt en formel for udregning af PWV = (Distance/100) / Tid
- Forbind PWV udgangen til en numerisk indikator og omdøb den til PWV.
- Kør dit VI og tjek om de fundne peaks ser rimelige ud, og at det hele virker.
- Gem dit VI som 6_PWV_Analyse.vi