I denne øvelse, skal I måle nerveledningshastigheden i Nervus Ulnaris, som forsyner lillefingeren og halvdelen af ringefingeren. Dertil bruger vi en nerve-eksitator, som stimulerer Nervus Ulnaris til at fyre. Dette får musklerne i handfladen under lille- og ringefinger til at bevæge sig grundet muskel kontraktioner. Ved at placerere et par EKG elektroder i dette område samt en stel-ledning, kan muskel-kontraktionerne måles ved elektro-myografi (EMG). Stimulationssignalet er kraftigt nok til at kunne måles med de samme elektroder. Ved at detektere stimulationen samt kontraktionen, kan tiden derimellem måles som et udtryk for nerveledningshastigheden. (Mere info her).
Imidlertid består hele kæden fra stimulation til muskel-kontraktion af dels nervens ledningshastighed, men også af transport af signalet over den terminale synaptiske kløft via transmitter-substanser (mere info her). Sidstnævnte har ikke noget med nerveledningshastigheden at gøre. For at udelukke denne komponent, laves to målinger; en ved albuen og en midt på underarmen. Divideres afstanden mellem stimulations-stederne med differencen på tiden fra stimulation til muskelkontraktion de to eksitations-steder imellem fås et udtryk for nerveledningshastigheden.
I denne øvelse får I først udleveret to sub-VI's, som indeholder allerede optagne data fra de to eksitationssteder. I skal bygge et LabView VI, som kan regne disse tider ud, og når det er færdigt vil vi begive os op til det biomedicinske laboratorium og udføre det i praksis.
LabView Instruktioner:
- Basis plot:
- Lav et tomt VI indeholdende et While Loop og en Menu Ring med teksterne Albue -> 0 og Underarm -> 1. Kald den "Eksitations-sted"
- Forbind "Eksitations-Sted" med en case-struktur
- Hent Sub-VI'et NerveledningSimSigAlbue.vi og placer det inde i "0 - Default" casen
- Hent Sub-VI'et NerveledningSimSigUnderarm.vi og placer det inde i "1" casen
- Forbind iterationstælleren med den tilhørende indgang på Sub-VIs (begge to)
- Forbind udgangen med en Waveform Graph og kald den "EMG Signal".
- Fjern auto-scale fra Y-aksen og sæt den til at gå fra -5 til 5.
- Kør VI'et
Hvis I kan nå at aflæse noget er I særdeles dygtige:) Grunden til at signalet flyver afsted er, at det er samplet med 10000 Hz, 1000 samples ad gangen. Med andre ord, levere Sub-VI'erne data hvert 0.1 sekund - hvad der også vil være tilfældet når I skal måle de fysiske signaler med DAQ'en som vil optage data på præcis samme måde.
Det kan imidlertid ikke bruges til at måle på. Vi skal derfor have bygget et Oscilloscop med en trigger funktion, så vi kun får at se den del af signalet, vi er interesseret i.
- Trigget Oscilloskop
- I kan bruge funktionen "Trigger and Gate", som I også brugte til Step Respons øvelsen
- Express -> Signal Manipulation
- Sæt Start sense til "Rising", Start level til 1 og Number of samples til 200
- Dette sætter funktionen til at trigge ved en stigning op over 1 volt. De 200 samples dækker (fundet ved trial-and-error) netop det interessante område af signalet
- Forbind en Wavechart Graph til Triggered Signal udgangen (Kald det "Triggered EMG Signal") og kør VI'et
- Du vil nu kun se 200 samples. Ved samplingsfrekvensen på 10 kHz svarer dette til 20 ms
- Læg mærke til at signalet blinker. Hvorfor gør det det?
- Ikke-blinkende Triggered signal
- For at fjerne blinkeriet skal I bruge et shift register til at overføre værdierne fra iteration til iteration. Endvidere skal I bruge den Boolske "Data Available" udgang fra "Trigger and Gate" funktionen til at bestemme hvorvidt data skal opdateres eller overføres uændret. Den skal forbindes med en case struktur og de relevante ledninger skal trækkes.
- Kør VI'et og tjek at det nu kører uden blinkeri.
- I kan bruge funktionen "Trigger and Gate", som I også brugte til Step Respons øvelsen
Vi er nu nået til at have et triggered Oscilloscop, som ikke blinker indeholdende de relevante data, startene fra excitationerne, at udføre målingerne på. Vi skal nu have bestemt hvornår EMG signalet starter.
- EMG signal detektion
- Sæt "Eksitations-sted" til Albue
- Indsæt et "Basic Level Trigger Detection" VI
- Programming -> Waveform -> Analog Waveform -> Waveform Measurements -> Waveform Monitoring
- Forbind signalet fra "Trigger and Gate" funktionen med "signal in", sæt level til et niveau tæt på starten af EMG signalet (aflæs på den triggede graf)
- Sæt trigger slope til "Falling Edge"
- Divider "trigger location" med 10 for at få resultatet i ms og udlæs det til en indikator kaldet "Nerveledningstid"
- Kør VI'et og tjek at nerveledningstiden korresponderer med hvad I kan aflæse fysisk på grafen.
- Prøv at skifte til underarms-dataene. Virker det stadig efter hensigten?
Desværre har underarmsdata et initielt dyk, som trigger EMG detektionen. For at fjerne dette dyk, kan I analysere et subset af de 200 samples, som undertrykker det "falske peak".
- Analyse på Waveform Subset
- Indsæt et "Get Waveform Subset" VI
- Programming -> Waveform
- Det skal indsættes på signalet før "Basic Level Trigger Detection"
- Sæt "start/duration format" til "Samples" og forbind start samples/time med en konstant, der dækker det initielle dyk - fx 50.
- Forbind duration med 150 (200 samples minus de 50 ovenfor)
- I og med I har fratrukket nogle samples, vil trigger værdien være forskudt. For at korrigere den målte tid, skal de fratrukne 50 samples lægges til trigger location fra "Basic Level Trigger Decection" VI'et.
- Indsæt et "Get Waveform Subset" VI
Man skulle nu tro, at alt var fryd og gammen. Men ak, hvis I prøver at køre VI'et fejler det. Dette skyldes, at de data I forsøger at lave et subset af initielt er tomme. Det er først når den første peak er fundet, at der er data at lave subset på.
- Initiering af Waveform Subset funktionen
- Indsæt en case struktur rundt om "Waveform Subset" og "Basic Level Trigger Function" VI'erne inklusive alle de tilhørende kontroller.
- Indsæt et "Number of Waveform Samples" VI på selector terminalen, som kontrollerer hvorvidt længden af waveformen er 200
- Programming -> Waveform -> Analog Waveform
- Sæt en "Greater than 0?" funktion på "Number of Samples" udgangen og forbind outputtet heraf med selector terminalen
- Kør dit VI og tjek at resultaterne ser rimelige ud i forhold til graferne på både albue og underarmssignalet
Nu skal tidspunkterne for alle de fundne EMG signaler gemmes, og middelværdien beregnes for såvel albue som underarm. Hertil bruges et cluster, indeholdende to numeric arrays. For hver peak lægges tiden ind i enden af det korrekte array og middelværdien af hele arrayet beregnes og vises.
- Lagring af EMG signal tider
- Lav et cluster på front panelet, kald det "Nerveledningstider Initialisering" og indsæt to control arrays deri. Fyld begge med numeric controls og omdøb det øverste til Albue og det nederste til Underarm. Du behøver ikke ændre på størrelserne af arrays.
- Flyt clustret til venstre for while loopet.
- Højreklik ikonet på Block Diagrammet og vælg "Hide Control".
- Lav et shift register og forbind udgangen fra clustret hermed.
- Flyt "Eksitations-sted" menu rings ikonet ind i casen som laver selve trigger detektionen.
- Lav en lokal variabel (Højreklik -> Local Variable) og sæt den til read. Flyt den hen til "Eksitations-sted's" gamle placering og forbind den med indgangen på case strukturen.
- Lav en case struktur inde i trigger detektions casen, i "True" casen.
- Forbind selector terminalen med menu ringen "Eksitations-sted".
- Indsæt en "Unbundle By Name" og "Bundle By Name" funktion inde i den nyskabte case-struktur
- Programming -> Cluster, Class & Variant
- Indsæt tillige en "Build Array" funktion heri, og udvid den til at være to rækker høj.
- Forbind "Unbundle By Name" med venstre shift register - den vil nu skifte til "Albue". Med denne funktion kan du tilgå de enkelte strukturer i clustret ved navn. Afhængig af, om du står i "0, Default" eller "1" casen, skal du vælge hhv. Albue (=0) eller Underarm (=1) ved at klikke på titlen.
- Forbind udgangen fra "Unbundle By Name" med den øverste indgang på "Build Array" funktionen.
- Træk værdien fra "Nerveledningstid" indikatoren ind til nederste indgang.
- Dette sætter den seneste nerveledningstid ind i slutningen af arrayet.
- Forbind clustret ved indgangen til "Unbundle By Name" med den øverste indgang på "Bundle By Name"
- Forbind udgangen fra "Build Array" funktionen med venstre indgang på "Bundle By Name" funktionen
- Dette erstatter den værdi i indgangsclustret øverst, som står nævnt i titlen på "Bundle By Name" med værdien fra venstre indgang.
- Skift titlen i "Bundle By Name" til at matche 0/1 ligesom ovenfor ved "Unbundle By Name"
- Forbind udgangen på "Bundle By Name" funktionen med højre shift register
- Kopier alle disse elementer ind i den modsatte case, forbind de respektive ind- og udgange og husk at ændre titlerne på "Bundle/Unbundle By Name" til at matche.
- Forbind cluster indgang med cluster udgang på false casen rundt om Trigger Detection casen.
- Middelværdier af EMG signal tiderne
- Udvid højre side af While Loopet
- Indsæt to "Unbundle By Name" funktioner, sæt den ene til Albue og den anden til Underarm inde i While Loopet.
- Forbind clusterudgangen til shiftregistret med indgangen til "Unbundle By Name" funktionerne.
- Indsæt to Mean VI'er
- Mathematics -> Prob & Stat
- Forbind dem med udgangen fra de to "Unbundle By Name" funktioner.
- Indsæt to indikatorer på udgangen fra Mean funktionerne og kald dem hhv. "Albue Middel Tid" og "Underarm Middel Tid"
- Indsæt en formel funktion til at udregner nerveledningshastigheden baseret på de to middelværdier
- Lav tre indgange kaldet A(lbue), U(nderarm), D(istance) og en V(elocity) udgang ved at højreklikke på venstre/højre side og vælge Create Input/Output
- Forbind middelværdierne af Albue og Underarm med de respektive indgange
- Forbind distance indgangen med en numerisk kontrol og kald den "Længde mellem målesteder i cm"
- Forbind V udgangen med en numerisk indikator og kald den "Nerveledningshastighed [m/s]"
- Indsæt formlen for hastigheden. Husk at den skal udspytte m/s og at jeres indgangsenheder er hhv. cm og ms. Husk også at afslutte formlen med semikolon.
Tillykke! I er nu I hus, og vi skal op i det biomedicinske laboratorium og udføre selve øvelsen - LIVE:) Husk at gemme jeres VI som 5_Nervelednings-simulator.vi
I kan hente løsningsforslag her.