Introduktion:
I denne øvelse, skal I måle trykændringen i en væskefyldt beholder ved hjælp af et væskefyldt kateter. Ved at bruge et manometer kommes gradvist større og større tryk i beholderen, indtil en påmonteret gummihandske flyver af som følge af overtryk. Det pludselige trykfald giver anledning til et Step Response, som kan måles og karakterisers med LabView.
Teori:
Til direkte måling af blodtryk i arterier og centrale vener benyttes væskefyldte katetersystemer (f.eks. på operationsafsnit og intensiv afdelinger). Det kræver direkte adgang til det blodkar man ønsker at måle trykket i. Selve trykket måles med en tryktransducer der sidder udenfor kroppen, men som er koblet til karret man måler i igennem en væskefyldt slange.
Grundet væskens inerti i systemet, den væskedynamiske modstand samt eftergivelighed i primært målemembranen kan et sådant katetersystem modelleres som et 2. ordens lavpas system:
Dette 2. ordenssystem skal udmåles og karakteriseres. Der benyttes en færdig opstilling som vist herunder, som muliggør måling af stepsvaret for kateteret. Dog undlades den brændende tændstik idet ufrivillige vandladninger som følge af uforsigtig omgang med ild er uønskede (og vi har et ønske om at genbruge gummihandskerne).
Måleopstilling:
Materialer:
- Et plastrør
- Væskefyldt kateter
- Forstærker til samme
- Gummihandske
- 4 kabler med banan-stik (han-han)
- Kabel: Forstærker -> 2 nøgne ledninger
- 1 DAQ (NI-6009)
Vejledning:
- Sæt forlængerslangen til tryk-katetret og tilslut den anden ende af forlængerslangen til det cylinderformet rør (studs ved bunden af røret).
- Drej tre-vejshanen således der er gennemgang fra det cylinderformede rør til tryk-katetret.
- Fyld røret ca. 4/5 med vand.
- Hold en papirserviet bag ved det åbne rør på transduceren og træk i den mørkeblå gummitap til der pibler vand ud af det åbne rør (se Fig. 1). Slip derefter gummitappen (dette sikrer at slangen er fyldt med vand og at der ikke er luftbobler tilstede).
- Sluk først laboratoriespændingsforsyningerne på de små runde knapper, så der er lys i skærmene, men ikke i dioderne. Forsyn måleforstærkeren (elektronikprintet) med +8V og med -8V fra de to forskellige spændingsforsyninger. Dette gøres i praksis ved, med laboratoriespændingsforsyningerne, at forbinde den venstre +terminal (rød) til den højre –terminal (sort) og indstille begge spændingsforsyninger til 8V. Tilslut Ground til måleforstærkerens sorte stik, +8V til måleforstærkerens røde stik, og -8V til måleforstærkerens blå stik (se ovenfor). Kontroller at alt er forbundet rigtigt.
- Tilslut tryk-katetret til måleforstærkeren og tænd for laboratoriespændingsforsyningerne.
- Slut kablet med de to nøgne ledninger til jeres DAQ på indgang AI0
- Sæt en handske over røret.
VI implementation:
I denne øvelse, skal I lave et VI, som kan måle step-responset når handsken slipper røret. Det rå signal gemmes til LVM formatet. Herefter laves et nyt VI, som indlæser det gemte LVM signal, hvori der bruges en Extract Portion of a Signal samt en Trigger and Gate funktion, som kan skære input ned til kun at indeholde selve Step Responset. Det målte og beskårne signal skal derpå analyseres med en Peaks/Valley detektor, som skal angive toppe og dale på signalet, samt min og max af det målte og beskårne signal.
Dataindlæsning:
- Start LabView og lav et tomt VI.
- Indsæt en DAQ assistant på Block Diagrammet
- Acquire Signal -> Analog Input -> Voltage
- Sæt Acquisition mode (nederst) til Continuous Samples og Samples to Read = 10 og Rate (Hz) = 1000.
- DAQ'en læser det antal samples I har sat den til før den udsender data. Dersom I sætter den til 100 eller endda 1000, skal den således indsamle data i hhv. 0.1 og 1 sekund ved en rate på 1000 Hz. For at skabe en mere glidende graf, sættes Samples to Read således til 10.
- Tryk OK og svar ja til at indsætte et While Loop
- Forbind Data fra DAQ assistanten med en Waveform Graph og med en numerisk indikator.
- Kør VI'et og blæs luft i røret med manometret. Tjek hvorvidt trykstigningerne også afspejles i kurverne.
- I skal nu gemme data. Indsæt en Case struktur udenfor While Loopet til højre og forbind Selector terminalen med en Boolean Control (Mechanical Action = Switch). Omdøb kontrollen til "Gem Data".
- Indsæt et "Write To Measurement File" Express VI i True casen. Gem data som StepResponseData.lvm. Sæt Segment Headers til "No Headers" og X Value (Time Columns) til "One column only". Sæt funktionen til "Overwrite file" under punktet "If a file already exists".
- Da DAQ'en er sat til kun at indlæse 10 samples ad gangen, vil kun de sidste 10 samples blive gemt dersom I forbinder data udgangen fra "DAQ Assistant" med Signals indgangen på "Write Measurements" VI'et. I skal således opsamle data over et længere tidsrum for at få et meningsfyldt output. Glædeligvis findes der netop en sådanne funktion i LabView, Collector kaldet:
- Indsæt en Collector inde i While Loopet
- Express -> Signal Manipulation -> Collector
- Sæt "Maximum number of samples" til 30000
- Ved en samplingsfrekvens på 1000 Hz, svarer dette til 30 sekunder. I burde kunne blæse handsken af plastikrøret på 30 sekunder.
- Tryk OK
- Indsæt en Collector inde i While Loopet
- Træk "Collected Signal" output fra Collector VI'et ind til Signals indgangen på "Write Measurements" VI'et.
- Sæt status på "Gem Data" til True, kør VI'et mens der blæses luft ind i røret med manometret, indtil handsken flyver af. Et sekund eller to efter dette er sket stoppes VI'et.
- Gem VI'et som 4-2_StepResponseInput.vi
Data analyse:
- Lav et nyt, tomt VI.
- Åbn jeres datafil "StepResponseData.lvm" i Notepad. Find den sidste værdi. Da samplingsfrekvensen er 1000 Hz, vil der være 1000 gange denne værdi antal datapunkter + 1 (tiden er nul-indekseret). Noter jer dette tal, samt den maximale tidsværdi.
- Indsæt en "Read From Measurement File" og sæt filnavnet til den gemte fil fra tidligere (StepResponseData.lvm)
- Under "Segment Size" sætter I antal samples til det antal samples I aflæste fra Notepad.
- Tryk OK
- Indsæt en Waveform Graph og omdøb den til "Input Signal". Slå Autoscale X fra og sæt max-værdien på X-aksen til at være den maximale tidsværdi, aflæst i Notepad.
- Forbind Input Signal med Signals udgangen fra "Read From Measurement File" VI'et.
- Kør jeres VI og tjek at signalet indlæses og plottes korrekt.
- Vi skal nu have beskåret signalet groft:
- Indsæt et "Extract Portion of Signal" Express VI og forbind med Signal outputtet fra "Read From Measurement File"
- Vælg "Begin at offset (x-axis units) (bare lad offset være 0)
- Sæt Duration or Span til "Remaining samples"
- Tryk OK
- Indsæt en "Array Max & Min" funktion og forbind indgangen med Signals udgangen fra "Read From Measurement File"
- Indsæt en Divisions funktion og forbind øverste indgang med max index(es) fra "Array Max & Min". Sæt en konstant på 1000 på nederste indgang
- Denne værdi er tiden for hvornår den maximale værdi i signalet optræder. Grunden til der divideres med 1000 er, at funktionen udsender indexet på det maximale signal - da vi optog med 1000 Hz, skal det divideres med 1000 for at få tidspunktet.
- Udvid Extract Portion… nedad til den ikke kan udvides mere.
- Forbind "Begin Offset" til udgangen fra divisions-funktionen og Signals til signalet fra "Read From…" Vi'et
- Lav en ny Waveform Graph og omdøb den "Beskåret Signal". Forbind Section udgangen fra "Extract Portion of Signal" VI'et til "Beskåret Signal"
- Kør VI'et igen og tjek, at "Beskåret Signal" indeholder Step Responset
- Vi skal nu have beskåret signalet fint, så det kun indeholder selve Step Responset:
- Indsæt et "Trigger and Gate" Express VI
- Sæt "Threshold" til Start sense = Falling og Start level til værdien lige før Step Responset.
- Aflæs på "Beskåret Signal" grafen, ca. hvor lang tid der går fra start af Step Responset til slut. Gang tiden med 1000 (Hz), dette giver dig "Number of samples". Udfyld denne værdi under "Stop Trigger".
- Tryk OK
- Forbind Signals indgangen med Section udgangen fra "Extract Portion…" VI'et
- Dette signal skal nu plottes i en XY-graph
- Grunden til at denne plot-type vælges fremfor en Waveform Graph er, at den vil tillade samtidig visning af selve Step Responset, samt toppe og dale, som vi skal finde herunder. Dette gøres ved at bundle de enkelte komponenters X- og Y-værdier og endeligt, før de alle tre vises, at bygge et Array indholdende alle tre bundles.
- For at kunne plotte Step Responset i en XY-graph, skal det have både X og Y koordinater. Sidstnævnte er fundet, da de udgøres af selve det indkomne volt-signal. X-værdierne skal sættes til en lineært stigende funktion, lige så lang som antallet af samples fra Trigger and Gate VI'et.
- Konverter først de dynamiske data fra "Trigger and Gate" VI'et
- Indsæt en "Convert from Dynamic Data" funktion og forbind den til "Triggered Signal" udgangen fra "Trigger and Gate" funktionen.
- Indsæt en "Bundle Data" funktion og forbind nederste indgang med udgangen fra "Convert from Dynamic Data"
- Øverste indgang skal bestå af et 1D-array indeholdene tallene 1 til antal samples:
- Indsæt en "Ramp Pattern" funktion og en Array Size funktion
- Forbind Array Size med "Convert From Dynamic Data" funktionen.
- Udgangen fra Array Size forbindes med "Samples" indgangen på "Ramp Pattern" funktionen
- Indsæt en "-1" funktion fra Programming->Numeric og forbind den med output fra "Convert From Dynamic Data" og indgangen "end" på "Ramp Pattern" funktionen
- Forbind udgangen fra "Ramp Pattern" med den øverste indgang på "Bundle Data"
- Indsæt en XY-graph på Front Panelet og omdøb den "Step Response".
- Forbind udgangen fra "Bundle Data" funktionen med en Build Array funktion (lad den blot forblive 1 lang).
- Forbind Build Array funktionen med XY-grafen "Step Response"
- Kør dit VI og tjek at "Step Response" grafen også viser Step Responset.
- Endelig skal Step Responset analyseres, max og min værdi findes og Toppe/Dale markeres
- Indsæt et "Transition Measurements" VI og forbind Section udgangen fra "Extract Portion" VI'et med indgangen øverst til venstre. Sæt "polarity" til "falling" og forbind slope, transition duration og post-transition udgangene med indikatorer.
- Indsæt en "Array Max & Min" funktion og forbind den med udgangen fra "Convert from Dynamic Data". Lav en indikator på såvel max som min value.
- Indsæt en Peak Detector funktion og forbind X indgangen med udgangen fra "Convert from Dynamic Data"
- Lav en konstant på peaks/valleys indgangen nederst til venstre og vælg "Peaks"
- Lav en "Bundle" funktion og forbind Locations udgangen fra Peak Detector med øverste indgang og Amplitudes med nederste. Udvid "Build Array" funktionen til at være 2 rækker og forbind udgangen fra bundle funktionen med anden indgang på Build Array funktionen.
- Kør VI'et og tjek at toppe nu er markeret.
- Dersom dit signal er støjfyldt, vil der være markeret for mange toppe.
- Indsæt da et lavpas filter på Signals udgangen fra "Read from Measurement File" VI'et og vælg fx en cutoff frekvens på 50 Hz (Express -> Signal Analysis -> Filter).
- Forbind outputtet med Signals indgangen på "Extract Portion of Signal"
- Skift plot typen for toppene ved at udvide legend og venstre-klikke på anden plot og vælge "Common Plots" -> punkter
- Kopier "Peak Detector funktionen og lav en konstant på peaks/valleys indgangen nederst til venstre og vælg "Valleys"
- Disse vil dog ikke findes førend Threshold er sat til en værdi højere end de målte (default er 0). Forbind derfor "Threshold indgangen" med max-værdien fra "Array Max & Min" funktionen.
- Lav en bundle, forbind som før og udvid Build array til 3 rækker - forbind den nederste med udgangen fra "Valley" bundlet.
- Kør dit VI og tjek, at Step Response grafen nogenlunde ud som herunder (Højreklik grafen og vælg Properties for at sætte farver, symboler, gitter-linie farve mv.)
- Gem dit VI som "4-2_StepResponseAnalysis.vi"