• No results found

Utveckling av prototyp för uppmätning av blodflöde med Dopplersensorer

N/A
N/A
Protected

Academic year: 2021

Share "Utveckling av prototyp för uppmätning av blodflöde med Dopplersensorer"

Copied!
87
0
0

Loading.... (view fulltext now)

Full text

(1)

Institutionen för systemteknik

Department of Electrical Engineering

Examensarbete

"Utveckling av prototyp för uppmätning av blodflöde

med Dopplersensorer"

Examensarbete utfört i Elektroteknik vid Tekniska högskolan vid Linköpings universitet

av

Tomas Johansson LiTH-ISY-EX-ET--15/0443--SE

Linköping 2016

Department of Electrical Engineering Linköpings tekniska högskola

Linköpings universitet Linköpings universitet

(2)
(3)

"Utveckling av prototyp för uppmätning av blodflöde

med Dopplersensorer"

Examensarbete utfört i Elektroteknik

vid Tekniska högskolan vid Linköpings universitet

av

Tomas Johansson LiTH-ISY-EX-ET--15/0443--SE

Handledare: J Jacob Wikner

isy, Linköpings universitet Examinator: J Jacob Wikner

isy, Linköpings universitet

(4)
(5)

Avdelning, Institution Division, Department

Avdelningen för Elektroniska Kretsar och System Department of Electrical Engineering

SE-581 83 Linköping Datum Date 2016-10-16 Språk Language Svenska/Swedish Engelska/English   Rapporttyp Report category Licentiatavhandling Examensarbete C-uppsats D-uppsats Övrig rapport  

URL för elektronisk version

http://urn.kb.se/resolve?urn=urn:nbn:se:liu:diva-XXXXX

ISBN — ISRN

LiTH-ISY-EX-ET--15/0443--SE Serietitel och serienummer Title of series, numbering

ISSN —

Titel Title

"Utveckling av prototyp för uppmätning av blodflöde med Dopplersensorer" "Development of prototype for measuring blood flow with Doppler sensors"

Författare Author

Tomas Johansson

Sammanfattning Abstract

De nuvarande vanligaste metoderna för att mäta upp ett blodkärls blodflöde med Doppler-teknik kräver en kabel mellan patient och mätinstrument. I dagens Doppler-teknik och de framsteg som har gjorts inom mikroelektroniken har gjort det möjligt att tillverka ultraljudssändare och mottagare, styrelektronik och antenner i tillräckligt liten storlek för att de ska kunna integreras i en prob som fästs vid blodkärlet. För att kunna läsa av blodflödet används NFC för att säkert kunna skicka över information trådlöst till en smartphone eller en surfplatta. Detta medför att kabeln mellan patienten och mätinstrumentet inte skulle behövas och pa-tientens möjlighet att röra sig skulle öka. Så det här examensarbetet gick ut på att fortsätta på en prototyp med hjälp av en Raspberry Pi och annan medicinsk utrustning för att när-ma sig det slutgiltiga målet. Så med hjälp av filtrering och förstärkning är målet att minska störningar och förstärka signalen så att rätt data skickas till mottagarens smartphone eller surfplatta.

Nyckelord

(6)
(7)

Sammanfattning

De nuvarande vanligaste metoderna för att mäta upp ett blodkärls blodflöde med Doppler-teknik kräver en kabel mellan patient och mätinstrument. I dagens tek-nik och de framsteg som har gjorts inom mikroelektrotek-niken har gjort det möjligt att tillverka ultraljudssändare och mottagare, styrelektronik och antenner i till-räckligt liten storlek för att de ska kunna integreras i en prob som fästs vid blod-kärlet. För att kunna läsa av blodflödet används NFC för att säkert kunna skicka över information trådlöst till en smartphone eller en surfplatta. Detta medför att kabeln mellan patienten och mätinstrumentet inte skulle behövas och patientens möjlighet att röra sig skulle öka. Så det här examensarbetet gick ut på att fortsät-ta på en prototyp med hjälp av en Raspberry Pi och annan medicinsk utrustning för att närma sig det slutgiltiga målet. Så med hjälp av filtrering och förstärkning är målet att minska störningar och förstärka signalen så att rätt data skickas till mottagarens smartphone eller surfplatta.

(8)
(9)

Abstract

The current most common methods for measuring a blood vessels flow with Doppler technique requires a cable between the patient and measuring instru-ment. In today’s technology and the progress made in microelectronics have made it possible to manufacture ultrasonic transmitters and receivers, control electronics and antennas small enough for them to be integrated in a probe at-tached to the blood vessel. In order to read the flow of blood used NFC to securely send the information wireless to a smartphone or a tablet. This ensures that the cable between the patient and the measuring instrument would not be needed and the patient possibility to move would increase. So this thesis was to continue on a prototype using a Raspberry Pi and other medical equipment to approach toward the ultimate objective. So with help of filtering and amplification the tar-get was to reduce noise and amplify the signal so that the correct data was send to the recipient’s smartphone or tablet.

(10)
(11)

Tack

Jag skulle vilja tacka min klasskamrat Patrik som har hjälp mig och för alla dis-kussioner under projektets gång. Jag skulle även vilja tacka min examinator Jacob som har hjälp mig väldigt mycket på vägen och som har gett mig möjlighet att få ha varit delaktig i det här projektet.

Linköping, Augusti 2015 Tomas Johansson

(12)
(13)

Innehåll

Notation xi

1 Inledning 1

1.1 Bakgrund . . . 1

1.2 Syfte och frågeställning . . . 2

1.3 Avgränsningar . . . 3

2 Teori 5 2.1 Dopplereffekten . . . 5

2.2 Uppmätning av blodflöde . . . 6

2.3 Ultraljudsmätning . . . 7

2.3.1 Cook-Swartz doppler flow probe . . . 9

2.4 NFC (Near Field Communication) . . . 10

2.4.1 NFC-modulen PN532 . . . 11

2.5 Raspberry Pi . . . 12

2.6 FIR-Filter . . . 13

2.6.1 Designa filter med fönstermetoden . . . 15

2.7 Automatic gain control . . . 17

2.8 Sammanfattning . . . 18 3 Metod 19 3.1 Avläsning av blodflöde . . . 19 3.2 Implementering av FIR-filter . . . 20 3.2.1 Glidande medelvärde . . . 21 3.2.2 Fönstermetoden . . . 22 3.3 Simulerad insignal . . . 23 3.4 Implementering av AGC . . . 25 3.5 Presentation av flödet . . . 26 3.5.1 Grafisk presentation . . . 27 3.6 Diskussion . . . 27 3.7 Sammanfattning . . . 28 4 Resultat 29 ix

(14)

4.4 Sammanfattning . . . 33 5 Diskussion 35 5.1 Resultat . . . 35 5.2 Metod . . . 35 5.3 Vidareutveckling . . . 36 6 Slutsats 37 6.1 Översikt . . . 37 6.2 Variation av blodkärl . . . 38 6.3 Fönsterjämförelse . . . 38 6.4 Funktionen av AGC:n . . . 39 A Appendix 43 A.1 Rasperry Pi-koden . . . 43

A.2 Körhandledning . . . 51

A.3 Mätresultat . . . 52 A.3.1 Utsignaler för insignal variant 1, brytningesfrekvens 0,1Hz 52 A.3.2 Utsignaler för insignal variant 1, brytningesfrekvens 10Hz 54 A.3.3 Utsignaler för insignal variant 1, brytningesfrekvens 40Hz 56 A.3.4 Utsignaler för insignal variant 1, brytningesfrekvens 160Hz 58 A.3.5 Utsignaler för insignal variant 2, brytningesfrekvens 0,1Hz 60 A.3.6 Utsignaler för insignal variant 2, brytningesfrekvens 10Hz 62 A.3.7 Utsignaler för insignal variant 2, brytningesfrekvens 40Hz 64 A.3.8 Utsignaler för insignal variant 2, brytningesfrekvens 160Hz 66

(15)

Notation

Förkortningar

Förkortning Betydelse

NFC Near Field Communication RFID Radio-Frequency IDentification HDMI High-Definition Multimedia Interface

GPIO General-Purpose Input/Output USB Universal Serial Bus

SPI Serial Peripheral Interface

UART Universal Asynchronous Receiver/Transmitter I2C Inter-Integrated Circuit

FIR Finite Impulse Response IIR Infinite Impulse Response

RPi Raspberry Pi

AGC Automatic Gain Control LED Light-Emitting Diode

RMS Root Mean Square

(16)
(17)

1

Inledning

I inledningen behandlas bakgrunden till examensarbetet samt även syfte och frå-geställning. Det kommer även nämnas vilka avgränsningar som har gjorts.

1.1

Bakgrund

Det här examensarbetet är en uppföljning av ett tidigare examensarbete som har gjorts på ISY(institutionen för systemteknik). Det började med att jag kom i kon-takt med Jacob Wikner som har hand om en del examensarbeten på ISY som hade ett intressant projekt på gång. Det gick ut på att mäta upp blodflöde för att sedan skicka vidare informationen med hjälp av NFC(Near Field Communication) till en smartphone eller surfplatta.

Jag tyckte det lät intressant och beslöt mig ganska snart för att hoppa på pro-jektet. Eftersom det var en uppföljning av ett tidigare examensarbete var själva uppkoppling redan gjord men det var mycket som kunde förbättras och snyggas till när det gällde kod och filter.

Så själva bakgrunden till hela det här projektet, även om jag bara ska göra en liten del, är att det inom plastikkirurgin har utvecklats nya metoder vid operationer som gör det är möjligt att låna vävnad från friska delar av kroppen och helt enkelt flytta den till området som behöver och saknar vävnad. För att det ska fungera och för att vävnaden ska överleva måste den nya vävnaden försörjas med syrerikt blod, via en artär, och därefter måste blodet kunna ta sig till ven. Kirurgen måste alltså ansluta dessa kärl till vävnaden. Efter en sådan operation finns det en risk att blodflödet till vävnaden plötsligt kan minska på grund av olika orsaker. Då är det viktigt att man övervakar patienten och dennes nyopererade vävnad så att man snabbt kan göra åtgärder genom en ny operation.

(18)

t.ex. ultraljudsvågor studsar mot de röda blodkropparna i blodet och en mottaga-re samlar upp vågorna. Med hjälp av fmottaga-rekvensskillnaden i signalen går det att få ett värde på blodets hastighet.

De system som används idag bygger på att man har en Doppler-prob som sätts direkt på blodkärlet som kommunicerar med en extern analyslåda via en kabel. Den kabeln som används gör att patientens möjlighet att röra sig minskar och att ryck i kabeln kan ge störningar på signalen. Så om det vore möjligt att på något sätt överföra den signalen trådlöst skulle problemen försvinna.

I dagens teknik och med de framsteg som har gjorts inom mikroelektroniken har det gjorts möjligt att tillverka ultraljudssändare respektive mottagare, styrelekt-ronik och antenner i tillräckligt liten storlek så att de skulle kunna integreras i en prob som kan fästas vid blodkärlet. Då kom idén att man skulle kunna använ-da sig av NFC för att säkert kunna skicka information på korta avstånd. Då de flesta nya smartphones och surfplattor har NFC möjliggörs trådlös kommunika-tion. Genom att föra en smartphone eller surfplatta nära probens styrelektronik kan man läsa av blodflödet. Då undviks kabeln och analyslådan samt att proben kommer kunna sitta kvar resten av patientens liv.

1.2

Syfte och frågeställning

Syftet med det här examensarbetet är att fortsätta på den påbörjade konstruktio-nen som finns. Det slutliga målet är att det ska gå att skicka rätt och tydlig in-formation om blodflödet trådlöst till en smartphone eller surfplatta. Den redan påbörjade konstruktionen kan skicka data trådlöst men signalbehandlingen kan göras bättre. För att signalen ska bli tydligare och inte vara felaktig är filtrering en viktig del, så att bara den information som efterfrågas skickas och inte annat irrelevant som kan störa signalen. För att få mätdatan (blodflödet) att inte göra så snabba skiftningar ska en medelvärdesberäkning göras. Då kommer det bli en jämnare utsignal som även beror på tidigare värden och uppfattas som mindre ryckig.

I konstruktionen finns det tre stycken probar där alla tre är olika känsliga, vilket betyder att någon av de okänsliga probarna inte ger något utslag alls när någon av de känsligare gör det. Den färdiga konstruktionen ska klara av att hundra pro-cent på varje prob motsvarar lika stort utslag och att deras olika känslighet inte ska påverkar resultatet.

Mina frågeställningar är följande:

• Eftersom ett blodkärl kan variera i form, både i längd och tjocklek, hur kommer mätresultatet att påverkas av variationerna av olika blodkärl?

(19)

1.3 Avgränsningar 3

• Det är viktigt att det är rätt information när blodflödet visas, så att det inte är felaktigt på grund av störningar på signalen. Hur kan man implementera filter för att minska risken att skicka irrelevant data om blodflödet?

• Hur ska man åstadkomma att probarnas känslighet inte spelar någon roll, utan att maximalt utslag på alla probar ger lika stor utsignal?

De nämnda punkterna ovanför beskriver vad det här examensarbetet ska besvara för att föra den här prototypen närmre det slutliga målet.

Figur 1.1:Systemskiss över prototypen med koppling mellan olika delar. Många av de delar som syns i systemskissen 1.1 är redan färdigkopplade, men det som ska göras kommer att infalla mellan Raspberry Pi och innan det ska skickas vidare, antingen till en smartphone eller till en datorskärm för att enkelt kunna verifiera resultatet.

1.3

Avgränsningar

Några avgränsningar som har gjorts är att jag ska fortsätta på den redan påbörja-de prototypen som finns tillgänglig. Jag ska ta vid där påbörja-de som gjorpåbörja-de examensar-betet innan mig slutade, vilket inte är konstigt med tanke på att det annars vore bortkastad med tid. Detta innebär att många av kopplingarna redan är virade och klara. En annan avgränsning är såklart tiden för hela arbetet som är beräknat att ta elva effektivt räknade veckor.

En avgränsning som har gjorts är att hålla filtren ganska små med tanke på att det i slutändan är tänkt att all elektronik ska vara inopererad i patienter, samt att det håller kostnaderna nere.

(20)

variationer av blodkärl bara kommer diskuteras teoretiskt och inte utföras prak-tiskt.

Diskussioner om etiska och samhälleliga aspekter kommer också avgränsas då jag anser att arbetet saknar relevant koppling och för att detta är en rent teknisk rapport.

(21)

2

Teori

För att göra det möjligt att svara på frågeställningen måste först och främst teo-ri om Dopplereffekten studeras, detta för att förstå hur sensorerna som använts fungerar. Därefter presenteras och diskuteras studier om hur blodkärl och blod-flödesmätning fungerar rent fysikaliskt. Tidigare studier kommer också att jäm-föras med relaterad forskning. Även teorin om hårdvaran som har använts i pro-jektet presenteras för att ge en bättre bild om hur prototypen var uppbyggd samt hur den trådlösa kommunikationen NFC går till. Slutligen kommer filterteori att studeras för att kunna jämföra olika filter och hur de kan konstrueras.

2.1

Dopplereffekten

Dopplereffekten är ett fysikaliskt fenomen som först upptäcktes av Christian Doppler i mitten av 1800-talet. Det vanligaste exemplet som de flesta har upp-levt är när en bil med en siren närmar sig en så låter sirenen på ett sätt och när bilen har passerad uppfattas ljudet från sirenen annorlunda. Det kan förklaras genom att när bilen närmar sig pressas ljudvågorna ihop och blir tätare, man kan säga att bilen försöker jaga ikapp ljudvågorna. Men när bilen har passerat blir det tvärtom och ljudvågorna blir glesare och då uppfattas ljudet som lite mörka-re/lägre ton.

fm= fsv − vm

v − vs

(2.1) I formel (2.1) beskrivs dopplereffekten där fmär mottagarens frekvens, fs är sän-darens frekvens, v är ljudets hastighet i mediet och där vmoch vsär mottagarens respektive sändarens hastighet.

Sedan finns det ett samband mellan en vågs våglängd, våghastighet och frekvens. Där våghastigheten är v = f ∗ λ. Så med hjälp av dopplereffekten går det att

(22)

Figur 2.1:Sändaren och mottagarens riktning är definierade att vara åt hö-ger, annars ändras tecknet på vmoch vsi formeln 2.1.

mäta upp hastigheter genom att mäta upp frekvensskillnaden mellan en sända-re och mottagasända-re, där skillnaden är proportionerlig mot hastigheten. Det brukar användas t.ex. av polisen i deras fartkameror. I det här projektet kommer dopp-lereffekten användas för att mäta upp hastigheten på blodet i ett blodkärl och på så sätt få reda på blodflödet [Jönsson, 2013].

2.2

Uppmätning av blodflöde

När man ska mäta upp blodflöde används samma fysikaliska lagar som om man skulle mäta upp vilket flöde som helst samt att det beter sig i enlighet med Ohms lag. Ohms lag innebär att strömmen är lika med spänningsskillnaden dividerat med resistansen. I det här fallet är spänningsskillnaden tryckskillnaden och resi-stansen är resiresi-stansen för just det blodkärlet medans flödet motsvarar strömmen [Klabunde, 2007].

F =P R =

(PAPV)

R (2.2)

Ett blodkärls resistans beror på tre olika faktorer vilka är blodkärlets längd, blod-kärlets radie och blodets viskositet. Av de tre så har radien på blodkärlet väldigt stor påverkan för blodflödet. Ett blodkärls resistans kan skrivas som:

R = 8ηL

πr4 (2.3)

Om längden på kärlet fördubblas, fördubblas även resistansen om viskositeten och radien hålls konstanta. Om radien däremot skulle ökas med det dubbla så skulle resistansen för kärlet minska 16 gånger. Tryckskillnaden som betecknas

PAoch PV är trycket för två punkter på ett blodkärl. Men för att beskriva blodflö-det till ett organ är PAtrycket artären har och PV trycket venen har. Med andra ord, trycket det syrerika blodet har som är från hjärtat ut till organen och det syre-fattiga blodet som är på väg tillbaka från organen tillbaka till hjärtat. Så om man kombinerar båda formlerna får man ett uttryck som beskriver blodflödet som be-ror på blodkärlets utformning, tryckskillnaden och blodets viskositet [Klabunde, 2008].

F = π∆P r 4

(23)

2.3 Ultraljudsmätning 7

Ett blodkärls längd varierar inte så mycket och brukar ofta kunna ses som en konstant. Samma sak är det med blodets viskositet som inte heller varierar sär-skilt mycket så de två stora faktorerna som påverkar blodflödet är tryckskillna-den men framförallt radien på blodkärlet. Den vanligaste dödsorsaken i Sverige 2013 var hjärt- och kärlsjukdomar som utgjorde ca 38 procent [Sjukv and Publi-cerings, 2015]. Av hjärt- och kärlsjukdomarna är den vanligaste dödsorsaken hjär-tinfarkt[Hjärt-Lungfonden, 2015]. Den vanligaste orsaken till just hjärtinfarkt är åderförkalkning vilket är att artärernas väggar blir tjockare och förlorar rörlig-het vilket gör att blodet får svårare att passera. Om man betraktar formeln för blodflöde där både längden och viskositeten är konstanta och om radien på blod-kärlet minskar så måste tryckskillnaden öka för att det ska vara möjligt att få samma blodflöde. Det gör att hjärtat får jobba mycket hårdare och leder till högt blodtryck vilket på sikt kan leda till både hjärtinfarkt och stroke [1177.se, 2013].

2.3

Ultraljudsmätning

Det finns två huvudtyper när man pratar om ultraljudsmätning. Båda metoderna kan mäta ett flöde utan att de måste vara ”inuti” röret, utan man placerar helt en-kelt sensorn runt röret. I det här fallet är det ett blodkärl som motsvarar ett rör. Den ena metoden går ut på att man använder sig av en sändare och en mottagare. Då sänder sändaren ut pulserande ultraljudsvågor i en viss frekvens som är för-utbestämd av tillverkaren. Mottagaren som sitter på andra sidan röret tar emot signalen och då kan man mäta tiden det tar för vågen att ta sig från sändaren till mottagaren.

(24)

Figur 2.2:Ultraljudsmätning där hastigheten beräknas med användning av en sändare och en mottagare, se formel 2.5 för beräkning av hastigheten.

v = t2−t1 t2∗t1 ∗ L 2 cos(Φ) (2.5) I formeln 2.5 är: t1=Sändningstiden nedströms (s) t2=Sändningstiden uppströms (s) L=Avståndet mellan sensorerna (m) v=Flödets hastighet (m/s)

Φ=Vinkeln mellan ultraljusstrålen och flödets riktning

Den andra metoden använder sig av dopplereffekten för att beräkna hastigheten för flödet. För att det ska fungera krävs det att partiklar i vätskan har tillräcklig hög densitet som gör att vågorna kan studsa tillbaka. När det används för att mäta blodflödet i ett blodkärl studsar vågorna mot röda blodkroppar och det går då att använda sig av dopplereffekten. Det går att få reda på hastigheten genom att mäta upp frekvensskillnaden på ultraljudvågen när den sänds ut och när den kommer tillbaka igen [Baker, 1970, Brown et al., 1989].

(25)

2.3 Ultraljudsmätning 9

Figur 2.3:Ultraljudsmätning där hastigheten beräknas i en vätska med par-tiklar som har hög densitet då ultraljudsvågorna studsar tillbaka mot sän-daren med en frekvensskillnad. Det är den metoden som används i detta projektet och se formel 2.6 för beräkning av hastigheten.

v = c ∗ frft ft∗2 cos(Φ) (2.6) I formeln 2.6 är: fr=Mottagsfrekvensen ft=Sändningsfrekvensen

c=Hastigheten för ljud i vätskan v=Flödeshastigheten

Φ=Vinkeln mellan ultraljusstrålen och flödets riktning

2.3.1

Cook-Swartz doppler flow probe

I det här projektet användes en ultraljudsprob som är framtagen av Cook Medical. Den fungerar så att den placeras direkt på det blodkärlet som är intressant att mäta flödet på. Detta görs utan att få störningar från närliggande blodkärl och vävnader. Därefter skickas pulser på 20 MHz, alltså små vibrationer, som i sin tur studsar mot röda blodkroppar och med dopplereffekten mäts blodflödet [Cook Medical, 2011].

(26)

Figur 2.4:De tre ultraljudsprobarna från Cook-Swartz

2.4

NFC (Near Field Communication)

NFC är en teknik som erbjuder trådlös kommunikation mellan elektroniska en-heter, likt bluetooth och Wi-Fi som gör det möjligt att skicka data mellan t.ex. smartphones. Den stora skillnaden på NFC är att det använder sig av magnetisk induktion genom att sända ut en liten ström som skapar ett magnetiskt fält. Pre-cis som namnet, Near Field Communication, påstår fungerar det bara för korta avstånd. De elektroniska enheterna måste vara ungefär inom 10 cm eller närmare varandra för att NFC ska fungera, så att data kan skickas emellan enheterna[APC Magazine, 2011].

NFC är en vidareutveckling på RFID (Radio Frequency IDentification) som är en relativt gammal teknik som har används sedan 80-talet[Roberti, 2005]. Det fungerar ungefär på samma sätt som NFC med skillnaden att RFID kan kommu-nicera för avstånd upp till 200 m. RFID har inte heller tvåvägskommunikation vilket NFC har, detta gör det möjligt att både läsa data och skicka data. NFC används just nu i många människors vardag, några av användningsområden är buss/tågkort, passerkort, logga in på datorn, använda skrivaren och betala notan. Då används oftast en NFC-läsare och användaren håller ett tillhörande kort emot läsaren och då t.ex. registreras din bussresa eller låser upp datorn.

På senare år har mobiltillverkarna börjat utrusta sina telefoner med NFC och år 2014 hade 50 procent av alla smartphones NFC [Chandler, 2015]. Det har gjort det möjligt att använda sig av sin smartphone istället för ett speciellt kort. Det går bland annat att koppla sitt bankkort till sin smartphone och därefter använda sin smartphone som en elektronisk plånbok och betala genom att föra sin

(27)

smartp-2.4 NFC (Near Field Communication) 11

hone nära en läsare.

Det finns något som heter ”smart poster” som helt enkelt är en vanlig reklam-skylt men där det finns en NFC-tag på eller i reklam-skylten. En tag är oftast en liten plastbricka som det går att läsa av med en NFC-läsare, t.ex. en telefon med NFC. Taggen kan innehålla en direktlänk till företagets hemsida eller att man kan välja att följa företaget på sociala medier för att kunna få mer information[Rapidnfc, 2013].

Figur 2.5:Tänkbara användningsområden för NFC.

2.4.1

NFC-modulen PN532

I det här projektet används en NFC-modul som heter PN532 som i princip kan göra allt man kan tänka sig inom NFC. Den kan både läsa av och skriva till bå-de taggar och kort samt att bå-den kan kommunicera med telefoner. Den kan alltså både användas som en läsare eller en skrivare. I det här fallet kommer PN532 att användas som en skrivare som kommer ligga i passivt läge tills en mobil med NFC aktiverat kommer tillräckligt nära. Då är det tänkt att den ska skicka över data till telefonen som ska ha en speciell app installerad som ska visa upp resul-tatet grafiskt.

Som figuren 2.7 visar, demonstrerar den hur dataöverföring mellan PN532 och en smartphone går till. PN532 ligger i passivt läge och väntar hela tiden tills en smartphone kommer tillräckligt nära för att överföring med NFC ska fungera. Då går PN532 in i aktivt läge och skickar över data som behandlas i mottagarens smartphone.

(28)

Figur 2.6:NFC-modulen PN532 som användes i projektet.

Figur 2.7:Överföring med NFC mellan PN532 och en smartphone.

2.5

Raspberry Pi

I projektet används en Raspberry Pi som är en enkortsdator som är lika stor som ett kreditkort. Det finns olika modeller och den som funnits tillgänglig under pro-jektet gång har varit en Raspberry Pi modell B. Den har diverse in- och utgångar, bland annat 2 USB-portar, ethernet-anslutningsport, HDMI-utgång och 3,5mm ljudutgång. Det finns även ett GPIO-stift (General Purpose Input/Output) med 26 stycken pinnar som det går att koppla in tilläggsmoduler på. De är till för att användas till egen programmering eller för att t.ex. få indata.

Det finns även några av de 26 pinnarna som har färdigt stöd för SPI, UART och

I2C som alla tre kan användas för kommunikation mellan Raspberry Pi och

and-ra enheter. Det finns pinnar som kan användas som spänningskälla på både 3,3 volt och 5 volt. När man använder en GPIO-pinne som en utsignal är det lätt att veta om den är hög eller låg då utspänningen är antingen 0 volt eller 3,3 volt [Upton and Halfacree, 2014].

Operativsystemet på Raspberry Pi brukar oftast vara Linux. Det finns flera Rasp-berry Pi optimerade operativsystem som passar olika bra beroende vad du ska

(29)

2.6 FIR-Filter 13

använda din Raspberry Pi till. Det vanligaste är Raspbian som är ett operativsy-stem som är baserat på Debian som är ett fritt operativsyoperativsy-stem till Linux [Raspbi-an, 2015]. Det är användarvänligt och man känner igen skrivbordet, fönster och filhanteringen som de flesta användare är vana vid.

Figur 2.8:Raspberry Pi Modell B

2.6

FIR-Filter

Digitala filter kan delas upp i två klasser, FIR(Finite-length Impulse Response) och IIR(Infinite-length Impulse Response). Fördelen med FIR-filter är att de kan göras så de garanterat är stabila samt ha linjärt fassvar. Linjär fas är önskvärt för att då är filtret en linjär funktion av frekvensen vilket betyder att fördröjningen är densamma för alla frekvenser. Ett FIR-filter måste inte ha linjär fas men det har det om och bara om filterkoefficienterna är symmetriska eller antisymmetriska kring mittenkoefficienten [Wanhammar and Johansson, 2013].

Det finns olika sätt att göra ett filter, ett vanlig sätt är att man gör ett filter som ska uppfylla en viss specifikation av magnitude response. Därefter tar man fram impulssvaret för att kunna använda sig av formeln 2.7.

y(n) = N X k=0 h(k) ∗ x(n − k) (2.7) I formeln 2.7 är: y(n)=utsignalen h(k)=filterkoefficienterna x(n)=insignalen N =filterordning

För att förklara figuren 2.10 så för varje nytt samplevärde som kommer in, x(n), flyttar sig samplevärdet ett steg i schemat och tar sig förbi en kvadrat med Z−1.

(30)

Figur 2.9: Ett exempel på ett impulssvar som är symmetrisk kring mitten där varje punkt motsvarar en filterkoefficient

Figur 2.10:Exempel på hur ett FIR-filter kan se ut i ett blockdiagram.

Varje samplevärde multipliceras med en konstant, hN som i sin tur adderas ihop och blir resulterande utsignal, y(n).

Det finns något som heter glidande medelvärde som är ett mycket lätt exempel på ett FIR-filter. Det används för att minska bruset i en signal och går till så enkelt att de N senaste samplevärdena summeras ihop och divideras med antalet samples, precis som formeln 2.8 nedanför visar [Wanhammar and Johansson, 2013].

y(n) = 1 N N X k=0 x(n − k) (2.8)

Det som syns på figuren 2.11 är två signaler, en väldigt brusig sinussignal som är den blåa linjen i figuren, och så finns den röda signalen som är samma som den blåa fast ett glidande medelvärde har använts. Den röda signalen är fortfarande lite brusig, men är betydligt jämnare än den blåa. Det beror på att den röda sig-nalen inte bara beror på det aktuella samplevärdet utan även på tidigare värden. Den röda signalen blir då mindre känslig för hastig förändring och beter sig mer

(31)

2.6 FIR-Filter 15

Figur 2.11:Ett exempel där ett glidande medelvärde har använts på en bru-sig sinusbru-signal.

jämnare.

2.6.1

Designa filter med fönstermetoden

En av de äldsta och enklaste metoderna för att designa ett FIR-filter är fönstring. Det kan göras relativt snabbt och i vilken filterordning som helst, med både lin-jär eller ickelinlin-jär fas. Det finns mängder av olika fönster och det som nämndes ovan med glidande medelvärde är det simplaste av dem alla, det är ett rektangu-lärt fönster. När fönstring ska användas definieras det enligt formeln 2.9 nedan [Wanhammar and Johansson, 2013].

h(n) = w(n)hi(n) (2.9)

I formeln 2.9 är:

h(n)=impulssvaret w(n)=fönstersekvens hi(n)=idealt impulssvar

Med ett ideal impulssvar menas att det är impulssvaret för t.ex. ett idealt lågpass-filter. Ett idealt lågpassfilter kan ses i figur 2.12 nedanför.

(32)

Figur 2.12:Ett idealt lågpassfilter. Det som gör det idealt är att det inte finns finns någon avstånd mellan passband och stoppband vilket i praktiken är orealistiskt. Det släpper helt enkelt igenom lågfrekventa signaler och spärrar alla signaler över brytningsfrekvensen, det finns inget mellanläge.

Det finns som sagt flera olika fönstertyper med olika egenskaper och nedanför i figur 2.13 syns några av de som finns. Det finns betydligt flera men detta är några av de som finns[Harris, 1978].

(33)

2.7 Automatic gain control 17

Figur 2.13:Fönstertyper med olika egenskaper för att kunna användas i oli-ka situationer och önskemål .

2.7

Automatic gain control

Automatic gain control, eller AGC, är en gammal teknik som togs fram för radi-oteknik. Det går ut på att ett system ska få ut en någorlunda jämn utsignal även om insignalen varierar. Om man tar exemplet med radion så ska ljudet ut från en radio vara lika högt oberoende av om radiosignalen är stark eller svag. Ett annat exempel då AGC används är i gatubelysning, där används ljuset i omgivningen som en referens om lamporna ska lysa starkt eller svagt. Så om det är mörkt ute görs en större förstärkning och om det är ljust görs en liten förstärkning eller ingen alls [Rosu, 2015].

(34)

(a)Insignal (b)Utsignal

Figur 2.14:En simulerad insignal med varierande amplitud och dess utsig-nal efter att en AGC har applicerats.

Figuren 2.14 ovan visar ett exempel när AGC har använts. Den vänstra figuren 2.14a är en sinusformad insignal, vars amplitud ändras efter en viss tid. Den hög-ra figuren 2.14b är tillhöhög-rande utsignal. Det intressanta är vad som händer med utsignalen i figuren 2.14b när amplituden i insignalen i figuren 2.14a ändras. Det första som händer innan insignalens amplitud ändras är att utsignalen sakta börjar inta ett konstant värde. När sedan insignalens amplitud minskar drastiskt, minskar även utsignalens amplitud men sen jobbar den sig sakta upp mot samma nivå som uppnåddes innan trots att insignalens amplitud inte ökar. Efter ytterli-gare en tid ökar amplituden på insignalen och samma sak händer med utsignalen som tidigare. Den ökar också hastigt först, för att därefter stabiliseras på samma konstanta nivå som tidigare. Det som uppnås är en konstant utsignal som inte beror på amplituden på insignalen.

2.8

Sammanfattning

Teorin visar hur det går att använda dopplereffekten för uppmätning av hastig-heten för flöden, t.ex. blodflöden. Det gör det möjligt att med hjälp av att Cook-Swartz probarna placeras direkt på ett blodkärl. Probarna skickar i sin tur ut pulser och med dopplereffekten mäts blodflödet.

Vidare visar teorin hur man kan designa och använda sig av filter för att kunna filtrera bort störningar på en signal. Att designa filter med fönstermetoden visar sig vara en enkel metod för att ta fram ett FIR-filter. Det finns många olika typer av fönster beroende på önskat resultat.

Slutligen visas en teknik som kan användas för att få varierad förstärkning, Au-tomatic gain control. Den möjliggör att kunna få ut en jämn utsignal oberoende av insignalen.

(35)

3

Metod

För att besvara frågeställningen utfördes ett antal moment. Inledningsvis använ-des dioder för avläsning av blodflödet. Vidare implementeraanvän-des flera filter som genererades med hjälp av MATLAB för att sedan kodas in till Raspberry Pi. Där-efter togs en AGC fram genom att beräkna energin på insignalen för att få fram rätt förstärkning. För att kunna presentera flödet och andra resultat på skärmen programmerades Raspberry Pi så att användaren kan använda flaggor för olika funktioner.

3.1

Avläsning av blodflöde

Det första som gjordes var att använda sig av 10 dioder som fanns på analyslådan som indikerade det aktuella blodflödet. Alla dioder kopplades vidare till Raspber-ry Pi med varsin kabel så det var möjligt att läsa in värdet för varje diod. Det var digitala signaler som skickades, antingen var signalen låg, alltså en ’0’, eller så var signalen hög, alltså en ’1’, så genom att läsa av de tio olika signalerna kunde antalet lysande dioder räknas ut.

Så blodflödet kunde inta 11 olika värden, 0-10. Då gjorde jag ett program skrivet i C till Raspberry Pi som läste av GPIO-pinnarna för att få reda på om värdet från dioderna var hög eller låg. Detta gjordes med en samplingsfrekvens på 1000 Hz.

(36)

Figur 3.1:Analyslådan med de 10 dioderna som indikerar det aktuella blod-flödet samt kablarna som är vidarekopplade till GPIO på Raspberry Pi.

3.2

Implementering av FIR-filter

För att implementera FIR-filter användes MATLAB som har bra funktioner för att just göra filter. Det som skulle göras var ett lågpassfilter vilket betyder att låg-frekventa signaler släpps igenom medan höglåg-frekventa signaler dämpas. För att veta vilken brytningsfrekvens lågpassfiltret skulle ha testades lite olika varianter. I laborationssalen där examensarbetet utfördes finns ett instrument som mäter upp just flöden. Detta instrument har tyvärr inte kunnat användas under arbe-tets gång, men är tänkt att användas i framtiden. Instrumentet har redan färdiga lågpassfilter inbyggda med fyra olika brytningsfrekvenser så det kändes lämpligt att välja samma brytningsfrekvenser.

(37)

3.2 Implementering av FIR-filter 21

(a)Brytningsfrekvens 0,1 Hz (b)Brytningsfrekvens 10 Hz

(c)Brytningsfrekvens 40 Hz (d)Brytningsfrekvens 160 Hz Figur 3.2:Lågpassfiltrerna med olika brytningsfrekvenser.

3.2.1

Glidande medelvärde

Jag testade även att göra den enklaste typen av FIR-filter där man helt enkelt tar de N senaste samplevärdena och summerar ihop och delar på antalet samples.

Samplevärde Glidande medelvärde

0 0 0 y(n)=0+0+03 x(0) 0 0 y(n)=x(0)+0+03 x(1) x(0) 0 y(n)=x(1)+x(0)+03 x(2) x(1) x(0) y(n)=x(2)+x(1)+x(0)3 x(3) x(2) x(1) y(n)=x(3)+x(2)+x(1)3 ... ... ... ... x(n) x(n-1) x(n-2) y(n)=x(n)+x(n−1)+x(n−2)3

(38)

3.2.2

Fönstermetoden

Precis som med glidande medelvärdet kan man svepa olika fönster framåt eller bakåt i tiden. Det är för att få ett sorts värde som inte bara beror på det nuvarande värdet utan också beror på tidigare värden för att få en mindre ryckig utsignal.

(a)Rektangulärt fönster (b)Triangulärt fönster

(c)Hamming fönster (d)Rätvinklig triangulärt fönster Figur 3.3:De fyra valda fönster som testades i projektet.

(39)

3.3 Simulerad insignal 23

3.3

Simulerad insignal

För att läsa in en simulerad insignal gjordes två olika varianter. Det finns nämli-gen en sensor på analyslådan som gör så att det blir utslag på dioderna om man rör den med ett finger. Den första varianten var att försöka dra till med fingret för att efterlikna ett hjärtslag och få som pulser, ungefär en gång i sekunden. Den andra var att försöka ha en konstant signal, likt ett konstant lågt brus.

Figur 3.4:Så här såg sensorn ut som gjorde det möjligt att simulera en insig-nal med hjälp av fingret.

För att ordna detta gjordes en inläsning av 10 000 värden som varade i 10 sekun-der. Då lästes alltså 1000 värden in i sekunden som sparades över i filer för att därefter analyseras.

(40)

(a)Insignal variant 1

(b)Insignal variant 2

Figur 3.5: De simulerade insignalerna. Det syns i 3.5a att det finns spikar som når upp till 9 medans i 3.5b håller sig signalen mellan 3 och 5 och någon enstaka gång är den uppe på 6

(41)

3.4 Implementering av AGC 25

3.4

Implementering av AGC

För att få systemet att fungera lika bra med de olika probarna och deras vari-erande känslighet implementerades en AGC. Som nämndes tidigare om AGC i teoriavsnittet gör funktionen att utsignalen ska hamna på en konstant nivå oav-sett amplituden på insignalen.

Figur 3.6:Signalflödet från insignal till utsignal. Först sker det en sampling för att läsa in ett samplevärde för att därefter gå vidare till AGC:n för att få rätt förstärkning. Efter AGC:n sker filtrering innan utsignalen uppnås.

Det går att åstadkomma genom att man har en algoritm med en skalningsfaktor som i sin tur beror på signalen som kommer in. Det som jag använde mig av var att kolla på energin på signalen som kom in över ett visst antal samples. Jag räknade ut RMS-värdet för insignalen enligt formeln nedan.

skalningsf aktor(n) = xrms(n) = v u t 1 N N X n=0 x(n)2 (3.1)

Så för varje nytt samplevärde som kommer in räknas det ut en ny skalningsfaktor som beror på de N senaste samplevärdena. För att därefter få till rätt förstärkning och en konstant utsignal användes formeln nedanför.

y(n) = x(n) α

 + skalningsf aktor(n) (3.2)

I formeln 3.2 finns  som en konstant i nämnaren som finns för att om skalnings-faktorn skulle vara 0 skulle ekvationen sakna lösning. Den andra konstanten, α, används för att bestämma hur stor förstärkningen ska vara.

Om insignalen har hög energi blir det en stor skalningsfaktor vilket gör att det blir en låg förstärkning eftersom enligt formeln 3.2 blir då nämnaren stor vilket gör att kvoten blir mindre. Om det är tvärtom, och det är en insignal med låg energi blir skalningsfaktorn mindre som gör så att kvoten i formeln 3.2 blir stor och förstärkningen blir större. Resultatet blir alltså att beroende på insignalen ändras förstärkningen och det blir en konstant utsignal.

(42)

Figur 3.7:Överblick över AGC-blockets funktion. En skalningsfaktor räk-nas ut varje gång ett samplevärde kommer in för att sedan användas för att bestämma hur stor förstärkningen blir

Den här AGC-funktionen implementerades i Raspberry Pi i C-kod och studerar man formeln 3.1 så ska skalningsfaktorn räknas så fort ett nytt samplevärde kom-mer in. Det kan enkelt räknas ut med en simpel for-loop, men det är en ineffektiv lösning som är onödigt krävande. Därför använder jag en annan lösning som går ut på att hålla koll på det samplevärdet som puttas ut och det nya värdet som kommer in. Den formeln motsvarar 3.1 och syns här nedanför.

skalningsf aktor(n) =

r

skalningsf aktor(n − 1)2∗N − x(N + 1)2+ x(n)2 N

(3.3) Då slipper man använda sig av en for-loop som är krävande och löser det med en ekvation istället. Ekvationen använder sig av den tidigare skalningsfaktorn och subtraherar bort det samplevärdet som puttas ut, alltså x(N + 1), och adderar in det nya samplevärdet x(n)

3.5

Presentation av flödet

Koden som är skriven till Raspberry Pi ger användaren tre olika alternativ för hur programmet ska köras. Med hjälp av olika flaggor som skrivs i terminalen när användaren ska starta programmet bestäms vad som ska göras. Det går att med hjälp av flaggan-g få en grafisk presentation av det aktuella flödet.

(43)

3.6 Diskussion 27

skärmen. Då skrivs medelvärdet ut över ett visst antal samples, utsignalen ef-ter AGC:n och hur stor skalningsfaktorn för varje nytt samplevärde som kommer in. Det sista alternativet är att spara värden till filer och för att göra det används flaggan-d. Då kommer 10 000 samplade värden att läsas in och spara över

insig-nalens, utsignalens och skalningsfaktorns värden i tre filer.

3.5.1

Grafisk presentation

För att visa det aktuella blodflödet efter inläsning av dioderna använder jag mig av ett bibliotek som heter ncurses. Det tillåter användaren att placera textsträng-ar på en specifik yta. Det fungertextsträng-ar som ett stort koordinatsystem med en x-axel och en y-axel. Eftersom inläsningen av dioderna sker i en frekvens på 1 kHz an-vänds en fördröjning på 300 ms efter varje inläsning för att få en lagom snabb uppdatering av blodflödet som visas i realtid på skärmen. För att inte riskera att datan ska hamna utanför skärmens storlek, sker en återställning när x-koordinaten har nått 75 och börjar om från början.

Figur 3.8:Den grafiska presentationen. Längst till vänster är det en skala på tänkbara värden och sen blir det staplar som representerar det aktuella blodflödet. Efter varje inläsning skrivs det ut en ny stapel.

3.6

Diskussion

Valet att implementera en AGC i projektet är inte bara för att det ska fungera för de tre olika probarna som fanns tillgängliga. I slutändan i det här projektet är det tänkt att användas på riktiga blodkärl och ska då fungera för alla kärl, oberoende av kärlets egenskaper.

Avläsningen som gjordes med en samplingsfrekvens 1 kHz valdes för att få till-räckligt många värden men inte alldeles för många för att kunna jobba vidare

(44)

3.7

Sammanfattning

Metoden visar hur avläsningen av blodflödet gick till. Då använde jag mig av 10 dioder som indikerade det aktuella blodflödet. Det blev som 10 digitala signaler som kunde sparas vidare i Raspberry Pi och bearbetas. Därefter användes olika lågpassfilter med olika brytningsfrekvenser och typ av fönster för att undersöka och hitta den optimala lösningen. En AGC implementerades och allt detta pre-senterades på en datorskärm som Raspberry Pi var kopplad till, där det gick att se båda grafisk presentation och presentation i text.

(45)

4

Resultat

Under arbetets gång genomfördes att antal olika mätningar för att kunna testa olika delar av systemet och tillslut hela mätkedjan med alla delar tillsammans. Den första delen kommer att presentera hur lågpassfilterna blev med olika föns-ter och brytningsfrekvenser. Alla filföns-ter har tagits fram med hjälp av MATLAB och resultatet presenteras i plottar som visar frekvenssvaren. Det har även gjorts mätningar för att testa AGC:n som också är framtagen med hjälp av MATLAB som presenteras i plottar. Slutligen gjordes mätningar på hela mätkedjan, från insignal till utsignal genom alla delar av systemet.

4.1

FIR-filter med olika fönster

Resultatet av alla fönster som syns i figuren 3.3 med olika brytningsfrekvens. Brytningsfrekvenserna var samma som nämnts tidigare, de som fanns förvalda i det instrumentet som fanns i laborationssalen.

(46)

Figur 4.1: Frekvenssvaret för de fyra fönsterna med brytningsfrekvensen 0.1Hz.

Figur 4.2: Frekvenssvaret för de fyra fönsterna med brytningsfrekvensen 10Hz.

(47)

4.1 FIR-filter med olika fönster 31

Figur 4.3: Frekvenssvaret för de fyra fönsterna med brytningsfrekvensen 40Hz.

Figur 4.4: Frekvenssvaret för de fyra fönsterna med brytningsfrekvensen 160Hz.

(48)

som beskrivs i metodkapitlet i figur 3.5. Inget filter har används, utan bara insig-nalerna, AGC:n och plottat hur utsignalen ser ut.

(a)Utsignal efter AGC, variant 1

(b)Utsignal efter AGC, variant 2

(49)

4.3 Mätresultat 33

4.3

Mätresultat

Mätresultatet som har tagits fram finns som bilder i appendix A.3. Det är bilder på hur utsignalen såg ut efter att insignalen har passerat AGC:n och filtreringen. Eftersom jag har gjort två olika varianter på insignalen och fyra lågpassfilter med olika brytningsfrekvens med fyra olika fönster, vilket ger 32 bilder som syns i ap-pendixet.

4.4

Sammanfattning

Sammanfattningsvis visar resultatet att topparna och dalarna blir större ju högre brytningsfrekvens som används samt mindre i de som har filter än de utan filter.

(50)
(51)

5

Diskussion

5.1

Resultat

Mätresultatet på hela mätkedjan när utsignalen har plottats med filter med olika brytningsfrekvenser och olika insignaler (som går att se i appendix A.3) skiljer sig inte så mycket mot varandra. Det som går att se som är gemensamt för alla typer av filter är att topparna och dalarna blir större ju högre brytningsfrekvens är. Det går också att se om man jämför utsignalen med filter och utan filter (figu-rerna som syns appendix A.3 och i figur 4.5a och 4.5b) att topparna och dalarna är mindre i de som har filter än de som inte har. Detta är väntat då tanken är att signalen ska vara mindre känslig för förändring och beror också på tidigare värden.

5.2

Metod

Vid designen av filter använde jag mig av fönstring som är en enkel och gam-mal metod för att designa FIR-filter. Det finns flera sätt att designa FIR-filter på, det finns något som t.ex. heter minsta kvadratmetoden". Det som är bra med just fönstring är att det är relativt enkelt och robust, men det är inte ett optimalt fil-ter och filfil-terordningen blir ganska hög. Att filfil-terordningen blir hög är sämre i jämfört med andra metoder, men får man ner filterordningen ökar komplexite-ten. Om man skulle göra om projektet med obegränsat med tid skulle det vara intressant att testa andra metoder än just fönstring för att kunna optimera filtret. Insignalen som ska genereras av blodflödet simulerade jag med hjälp av en sensor som gav utslag på dioderna när man drog lite med fingret. Jag försökte efterlik-na ett hjärtslag med pulser en gång i sekunden. Det är givetvis svårt att få till

(52)

sensorn som fanns tillgänglig för att få till en insignal så att jag hade något jag kunde jobba vidare med.

5.3

Vidareutveckling

I framtiden är det tänkt att produkten ska sitta inne i huden vilket betyder att storleken på hela produkten måste minska rejält. Men det viktiga är att få signa-len att bli ännu säkrare så att det inte riskerar att skicka felaktig information till mottagaren. Med tanke på att en människas hälsa kan drabbas känns det som att många tester måste göras för att verkligen säkerställa att det fungerar som det är tänkt.

Det som först skulle kunna göras för att minska storleken på produkten är att koppla bort frontpanelen till analyslådan där dioderna finns. Det den används till nu är bara dioderna, vilket inte kommer behövas senare till nästkommande projekt. Detta skulle vara en början för att minska storleken.

(53)

6

Slutsats

För att återkoppla till frågeställningarna utvärderas bland annat hur variation av blodkärl påverkar blodflödet. Slutsatser dras även om hur en rad olika filter kan påverka en signal samt vid vilka omständigheter vissa filter med fördel kan väljas.

6.1

Översikt

Den produkt som jag, och de tidigare exjobbare på detta projekt, har kommit fram till syns i figuren 6.1 nedanför. Den visar hela förloppet som börjar med pumpen och slangar som ska simulera blodkärl i ett kretslopp. De blåa kablar-na är de tre proberkablar-na som kopplas vidare till frontpanelen där dioderkablar-na finns. Slutligen kopplas den vidare till Raspberry Pi där all kod finns programmerad.

(54)

Figur 6.1:Mätuppställning för uppmätning av blodflöde med pump, slang-ar, frontpanelen och Raspberry Pi.

6.2

Variation av blodkärl

Att variationen av ett blodkärl kommer påverka blodflödet är uppenbart. Det be-kräftades inte minst i avsnittet 2.2 där det efter studerande framgick tydligt att det var så. Utrustningen som fanns tillgänglig som skulle simulera ett blodkärl var redan inkopplad när det här projektet drog igång och eftersom det skulle va-ra väldigt tidskrävande att koppla om alla probar samt att jag saknar medicinsk kompetens för att utföra detta, testades bara mätningarna för ett och samma si-mulerat blodkärl. Med hjälp av teorin går det dock att dra slutsatsen att variatio-ner av blodkärlet skulle ha gett ett annat mätresultat. Precis som ekvationen 2.3 beskriver så kommer ett blodkärls resistans främst att bero på radien av blodkär-let som kommer ha störst påverkan av flödet som i sin tur är mätresultatet.

6.3

Fönsterjämförelse

Om man ska försöka jämföra de olika fönster som har testats och bestämma vil-ket som är bäst, beror det på vad som ska prioriteras. Om man studerar figurerna 4.1, 4.2, 4.3 och 4.4 där frekvenssvaret visas för alla filter med olika brytningsfre-kvens med olika fönstertyper ser man att det rektangulära fönstret har en smala-re huvudlob än de andra tsmala-re men att sidloberna är smala-relativt höga. Det som skiljer sig mest mot det rektangulära fönstret är hamming fönstret som har vidast hu-vudlob men överlägset lägsta sidlober. Detta stämmer väl överens om man läser på om fönster och deras olika egenskaper, t.ex. i rapporten skriven av Fredric J.Harris där alla tänkbara filter jämförs [Harris, 1978]. Så beroende på vad som ska filtreras bort bör ett visst fönster väljas. Om den signalen som ska filtreras bort ligger väldigt nära den önskade signalen i frekvens så bör ett rektangulärt fönster väljas. Men om den önskade signalen och den som ska filtreras bort

(55)

istäl-6.4 Funktionen av AGC:n 39

let skiljer sig i frekvens bör ett hamming fönster väljas för att inte riskera att den oönskade signalen smiter igenom genom att ha höga sidlober.

Det triangulära fönstret beter sig som ett mellanläge mellan rektangulärt och hamming för de filter med 0.1Hz och 10Hz som brytningsfrekvens. Det går att se i figur 4.1 och 4.2. Däremot i de filter med brytningsfrekvens 40Hz och 160Hz är varken huvudloben smalare än hamming och sidloberna är inte lägre än det rektangulära, vilket går att se i figurerna 4.3 och 4.4.

6.4

Funktionen av AGC:n

Resultatet som presenteras i figurerna 4.5a och 4.5b visar att AGC:n fungerar. Det syns tydligt att efter ett visst antal samples stabiliseras utsignalen till en någorlunda jämn nivå. Det framgår även att 4.5a är något ojämnare vilket inte är så konstigt med tanke på att insignalen var den som skulle efterlikna ett hjärtslag, se figur 3.5a, som var ganska ryckig.

(56)
(57)
(58)
(59)

A

Appendix

Här kommer delar som inte har plats i den flytande texten. Koden som används i Raspberry Pi och körhandledning hur programmet fungerar samt bilder på mä-tresultater.

A.1

Rasperry Pi-koden

Nedanför är koden som användes i Raspberry Pi.

1 # i n c l u d e < s t d i o . h> 2 # i n c l u d e <w i r i n g P i . h> 3 # i n c l u d e < s t d l i b . h> 4 # i n c l u d e <math . h> 5 # i n c l u d e <n c u r s e s . h> 6 # i n c l u d e < s t r i n g . h> 7 8 i n t l e d = 0 ; 9 i n t va lu e = 0 ; 10 i n t ledArray [ 1 0 ] = { 8 , 9 , 7 , 0 , 2 , 3 , 1 , 4 , 5 , 6 } ; 11 i n t valuemax =0; 12 i n t input [ 1 0 0 0 ] = { 0 } ; 13 f l o a t temp =0; 14 f l o a t s c a l i n g f a c t o r = 0 . 0 1 ; 15 f l o a t tempY = 0 . 0 ; 16 17 void s h i f t ( ) ; 18

19 void usage (void) 20 { 21 p r i n t f (" −g Graphic \n ") ; 22 p r i n t f (" − f Text \n ") ; 23 p r i n t f (" −d Save t o f i l e s \n ") ; 24 e x i t ( 8 ) ; 25 } 43

(60)

29 i n t i =0;

30 i f ( w i r i n g P i S e t u p ( ) == −1) 31 r e t u r n 1 ;

32

33 // I n i t i e r a r r a s p b e r r y n v i l k a GPIO−pinnar som anv ä nds 34 f o r ( i = 0 ; i < 1 0 ; ++ i )

35 {

36 pinMode ( ledArray [ i ] , INPUT ) ; // s ä t t e r pinnarna på RPi t i l l i n p u t s 37 pullUpDnControl ( ledArray [ i ] ,PUD_DOWN) ;

38 } 39 r e t u r n 1 ; 40 } 41 42 /* void f i l t e r ( ) 43 { 44 f l o a t yn = 0 ; 45 f i l t e r _ k o e f [ ? ] = ? ? ? ; 46 47 f o r ( i =0; i < s i z e o f ( f i l t e r _ k o e f ; ++ i ) 48 { 49 yn += input [ i ]* f i l t e r _ k o e f [ i ] ; 50 } 51 p r i n t f ( " U t s i g n a l e f t e r f i l t e r : %f \n " , yn ) ; 52 53 }*/ 54 55 void read ( ) 56 { 57 va lu e =0; 58 i n t i =0;

59 // Loopar runt och l ä s e r av 10 l e d 60 f o r ( i = 0 ; i < 1 0 ; ++ i )

61 {

62 //Lä s e r i n pinv ä r d e t

63 l e d = d i g i t a l R e a d ( ledArray [ i ] ) ; 64

65 //Hå l l e r reda på hur må nga l e d d a r som ä r t ända 66 i f ( l e d ==1) 67 { 68 va l ue +=1; 69 // p r i n t f ("======") ; 70 } 71 72 // E f t e r 10 i n l ä s n i n g a r 73 i f( i ==9) 74 {

75 // p r i n t f ( "ANTAL LEDDAR %d \n\n " , v al ue ) ; // s k r i v e r ut hur må nga

l e d d a r som var t ända av 10

76 77 //Hå l l e r rade på maxvä r d e t 78 i f ( v al ue > valuemax ) 79 { 80 valuemax = v al ue ; 81 }

(61)

A.1 Rasperry Pi-koden 45 83 // p r i n t f ( " %d %d\n " , value , valuemax ) ; 84 85 // S h i f t a r i n p u t v e k t o r n 86 s h i f t ( ) ; 87

88 //Lä s e r i n det nya led −vä r d e t 89 input [ 0 ] = v al ue ; 90 } 91 } 92 // 1 ms d e l a y ge r en s a m p l i n g s f r e k v e n s på 1 kHz 93 d e l a y ( 1 ) ; 94 } 95

96 // Fyra o l i k a FIR− f i l t e r , a l l a l å gpass med b r y t n i n g s f r e k v e n s r n a 0 . 1Hz , 10Hz

, 40Hz och 160Hz 97 f l o a t h_1khz_01hz [ 1 0 6 ] ={ 98 0.134131966394113 , 0.00364739544628279 , 0.00367336591391043 , 0.00373584770126958 , 0.00376459096788709 , 0.00383313426250789 , 0.00385304407405279 , 0.00391514071849736 , 0.00392855907502909 , 0.00398631588631362 , 0.00398703415710025 , 0.00404523299776918 , 0.00402012256669290 , 0.00408715210915339 , 0.00405229370234736 , 0.00424478889986649 , 0.00441227091391755 , 0.00421583050483812 , 0.00433912590099408 , 0.00433666388482654 , 0.00440654596568846 , 0.00442760348211482 , 0.00447956732706747 , 0.00450590146117297 , 0.00455020484961602 , 0.00457559140680613 , 0.00461095783122087 , 0.00463382612259669 , 0.00463774111257648 , 0.00466484819213528 , 0.00467198929194029 , 0.00476352005328634 , 0.00477470727327015 , 0.00475438781375756 , 0.00479646307412790 , 0.00479712862563089 , 0.00482878296471065 , 0.00483635720473297 , 0.00486096796819638 , 0.00486991544195831 , 0.00489403684971537 , 0.00489923714974794 , 0.00492809166311842 , 0.00492113758717183 , 0.00491806414421842 , 0.00492584414171132 , 0.00493586564105952 , 0.00497790705999227 , 0.00496026734767840 , 0.00496240890877989 , 0.00496453022970250 , 0.00496369945570732 , 0.00496580727337442 , 0.00496580727337442 , 0.00496369945570732 , 0.00496453022970250 , 0.00496240890877989 , 0.00496026734767840 , 0.00497790705999227 , 0.00493586564105952 , 0.00492584414171132 , 0.00491806414421842 , 0.00492113758717183 , 0.00492809166311842 , 0.00489923714974794 , 0.00489403684971537 , 0.00486991544195831 , 0.00486096796819638 , 0.00483635720473297 , 0.00482878296471065 , 0.00479712862563089 , 0.00479646307412790 , 0.00475438781375756 , 0.00477470727327015 , 0.00476352005328634 , 0.00467198929194029 , 0.00466484819213528 , 0.00463774111257648 , 0.00463382612259669 , 0.00461095783122087 , 0.00457559140680613 , 0.00455020484961602 , 0.00450590146117297 , 0.00447956732706747 , 0.00442760348211482 , 0.00440654596568846 , 0.00433666388482654 , 0.00433912590099408 , 0.00421583050483812 , 0.00441227091391755 , 0.00424478889986649 , 0.00405229370234736 , 0.00408715210915339 , 0.00402012256669290 , 0.00404523299776918 , 0.00398703415710025 , 0.00398631588631362 , 0.00392855907502909 , 0.00391514071849736 , 0.00385304407405279 , 0.00383313426250789 , 0.00376459096788709 , 0.00373584770126958 , 0.00367336591391043 , 0.00364739544628279 , 0.134131966394113}; 99 100 f l o a t h_1khz_10hz [ 1 0 6 ] ={ 101 −0.0860675903844080 , −0.000391674074825918 , −0.000335150956003810 , −0.000218895258611865 , −7.35222708837940 e −05 , 0.000129529084015256 , 0.000361099365345868 ,0.000656130917842099 ,0.000967935759889127 ,0.00134880207778693 ,0.00174250606347928 ,0.00219809361558704

(62)

,0.00837749119260826 ,0.00913525519966048 ,0.00991318585696913 ,0.0106958681499220 ,0.0115025279973706 ,0.0123069081911095 ,0.0131178328455509 ,0.0139314319719974 ,0.0147518002624067 ,0.0155562953479685 ,0.0163820620141611 ,0.0171201431054416 ,0.0179029612930286 ,0.0186748167987290 ,0.0194062148241921 ,0.0201245827747007 ,0.0208106340511351 ,0.0214682770879442 ,0.0221001488788309 ,0.0226887301424463 ,0.0232547838757514 ,0.0237794343802802 ,0.0242523190797436 ,0.0246922579479478 ,0.0250900018786396 ,0.0254385202087622 ,0.0257571312816524 ,0.0259951512238076 ,0.0261955740577605 ,0.0263592606799884 ,0.0264587021521580 ,0.0265137076819039 ,0.0265137076819039 ,0.0264587021521580 ,0.0263592606799884 ,0.0261955740577605 ,0.0259951512238076 ,0.0257571312816524 ,0.0254385202087622 ,0.0250900018786396 ,0.0246922579479478 ,0.0242523190797436 ,0.0237794343802802 ,0.0232547838757514 ,0.0226887301424463 ,0.0221001488788309 ,0.0214682770879442 ,0.0208106340511351 ,0.0201245827747007 ,0.0194062148241921 ,0.0186748167987290 ,0.0179029612930286 ,0.0171201431054416 ,0.0163820620141611 ,0.0155562953479685 ,0.0147518002624067 ,0.0139314319719974 ,0.0131178328455509 ,0.0123069081911095 ,0.0115025279973706 ,0.0106958681499220 ,0.00991318585696913 ,0.00913525519966048 ,0.00837749119260826 ,0.00764233772905561 ,0.00691751981670211 ,0.00623216680837344 ,0.00553410743415839 ,0.00478912574786293 ,0.00437680993799365 ,0.00374529137974500 ,0.00320785325562649 ,0.00267144552458337 ,0.00219809361558704 ,0.00174250606347928 ,0.00134880207778693 ,0.000967935759889127 ,0.000656130917842099 ,0.000361099365345868 ,0.000129529084015256 , −7.35222708837940 e −05 , −0.000218895258611865 , −0.000335150956003810 , −0.000391674074825918 , −0.0860675903844082}; 102 103 f l o a t h_1khz_40hz [ 1 0 6 ] ={ 104 0.0750753466817435 , 0.00179665245784014 , 0.00122188101834787 , 0.000250123712572672 , −0.00101841682000696 , −0.00253829143698835 , −0.00416146338092133 , −0.00582335603087078 , −0.00733844210763128 ,0.00865159977977834 , −0.00958617526437018 , −0.0101200167605585 , −0.0101236396372470 , −0.00965508173098383 , −0.00860984699884013 , −0.00724347127635255 , −0.00523127461175214 , −0.00296436333315374 ,0.000630413308629660 , 0.00180009309037793 , 0.00403158647914009 , 0.00596925913864856 , 0.00740851257213632 , 0.00824469196603135 , 0.00835104404636926 , 0.00769110290414940 , 0.00622825638928386 , 0.00403414590711532 , 0.00119074213269676 , −0.00215216077945025 , −0.00577701681851639 , −0.00949783953252081 , −0.0130632775999085 ,0.0161126479588009 , −0.0184899582088306 , −0.0198791851809304 ,0.0201002706432911 , −0.0189658340353721 , −0.0163833599587667 ,0.0122945699338365 , −0.00675538014018895 , 0.000153888799599752 , 0.00822152792062107 , 0.0172140714245556 , 0.0268307449246835 , 0.0367064693474378 , 0.0464752548841680 , 0.0557744366186889 , 0.0641762340068922 , 0.0713817927505658 , 0.0770716093966299 , 0.0810012269222002 , 0.0830118527794413 , 0.0830118527794413 , 0.0810012269222002 , 0.0770716093966299 , 0.0713817927505658 , 0.0641762340068922 , 0.0557744366186889 , 0.0464752548841680 , 0.0367064693474378 , 0.0268307449246835 , 0.0172140714245556 , 0.00822152792062107 , 0.000153888799599752 , −0.00675538014018895 , −0.0122945699338365 , −0.0163833599587667 , −0.0189658340353721 ,0.0201002706432911 , −0.0198791851809304 , −0.0184899582088306 ,

(63)

A.1 Rasperry Pi-koden 47 −0.0161126479588009 , −0.0130632775999085 , −0.00949783953252081 ,0.00577701681851639 , −0.00215216077945025 , 0.00119074213269676 , 0.00403414590711532 , 0.00622825638928386 , 0.00769110290414940 , 0.00835104404636926 , 0.00824469196603135 , 0.00740851257213632 , 0.00596925913864856 , 0.00403158647914009 , 0.00180009309037793 , −0.000630413308629660 , −0.00296436333315374 , −0.00523127461175214 ,0.00724347127635255 , −0.00860984699884013 , −0.00965508173098383 ,0.0101236396372470 , −0.0101200167605585 , −0.00958617526437018 ,0.00865159977977834 , −0.00733844210763128 ,0.00582335603087078 ,0.00416146338092133 , −0.00253829143698835 , −0.00101841682000696 , 0.000250123712572672 , 0.00122188101834787 , 0.00179665245784014 , 0.0750753466817435}; 105 106 f l o a t h_1khz_160hz [ 1 0 6 ] ={ 107 −0.0284167156414015 , 0.0664078872582807 , 0.0283906316756640 , 0.00990364860532624 , −0.00121520761894961 , −0.00514258174499917 , −0.00183460008632927 , 0.00427501542390626 , 0.00681159858309176 , 0.00292514060877247 , −0.00397370465004492 , −0.00732545571747670 , −0.00365448675729516 , 0.00377822815522018 , 0.00793164331287008 , 0.00451363728445482 , −0.00352821236062033 , −0.00859190550568147 , −0.00551018027357704 , 0.00318066264771145 , 0.00930515935892715 , 0.00663537257329624 , −0.00276553333129935 , −0.0101384594872478 , −0.00801343598147411 , 0.00218206710285855 , 0.0110228214924617 , 0.00959093793053663 , −0.00148642020812226 , −0.0121284783210541 , −0.0115476054492339 , 0.000545033179540466 , 0.0133928539479980 , 0.0140996759463997 , 0.000628225664511040 , −0.0149191583816666 , −0.0173330476198441 , −0.00241913111656431 , 0.0170857469717131 , 0.0219853433326505 , 0.00494314955013921 , −0.0202135607663223 , −0.0290829581130326 , −0.00906400231248103 , 0.0253524397852957 , 0.0415520302556688 , 0.0169456680184316 , −0.0357791405085814 , −0.0701964896320970 , −0.0380790253759788 , 0.0706992962173007 , 0.212025413685468 , 0.311080374531698 , 0.311080374531698 , 0.212025413685468 , 0.0706992962173007 , −0.0380790253759788 , −0.0701964896320970 , −0.0357791405085814 , 0.0169456680184316 , 0.0415520302556688 , 0.0253524397852957 , −0.00906400231248103 , −0.0290829581130326 , −0.0202135607663223 , 0.00494314955013921 , 0.0219853433326505 , 0.0170857469717131 , −0.00241913111656431 , −0.0173330476198441 , −0.0149191583816666 , 0.000628225664511040 , 0.0140996759463997 , 0.0133928539479980 , 0.000545033179540466 , −0.0115476054492339 , −0.0121284783210541 , −0.00148642020812226 , 0.00959093793053663 , 0.0110228214924617 , 0.00218206710285855 , −0.00801343598147411 , −0.0101384594872478 , −0.00276553333129935 , 0.00663537257329624 , 0.00930515935892715 , 0.00318066264771145 , −0.00551018027357704 , −0.00859190550568147 , −0.00352821236062033 , 0.00451363728445482 , 0.00793164331287008 , 0.00377822815522018 , −0.00365448675729516 , −0.00732545571747670 , −0.00397370465004492 , 0.00292514060877247 , 0.00681159858309176 , 0.00427501542390626 , −0.00183460008632927 , −0.00514258174499917 , −0.00121520761894961 , 0.00990364860532624 , 0.0283906316756640 , 0.0664078872582807 , −0.0284167156414015}; 108 109

110 //En f u n k t i o n Som sk ö t e r AGC 111 void agc ( )

112 {

113 i n t N=20;

114 f l o a t e p s i l o n = 0 . 0 1 ; 115 f l o a t alpha0 =0;// − 0 . 0 7 ;

(64)

119 120 // f o r ( i =0; i <N; i ++) 121 // { 122 // s c a l i n g f a c t o r += input [ i ]* input [ i ] ; 123 // } 124 125 // s c a l i n g f a c t o r = s q r t ( s c a l i n g f a c t o r /N) ; 126 127 // Ber ä knar s k a l n i n g s f a k t o r n 128 s c a l i n g f a c t o r = s q r t ( ( ( s c a l i n g f a c t o r* s c a l i n g f a c t o r ) *N − ( input [N] * input [ N] ) + ( input [ 0 ]* input [ 0 ] ) ) /N) ; 129 130 // Ber ä knar u t s i g n a l e n

131 tempY = alpha0 + alpha1 * input [ 0 ] / ( s c a l i n g f a c t o r ) ; 132 133 // S k r i v e r ut u t s i g n a l e n och s k a l n i n g s f a k t o r n 134 // p r i n t f ( " U t s i g n a l e f t e r agc : %f \ n s k a l n i n g s f a k t o r : %f \n " , tempY , s c a l i n g f a c t o r ) ; 135 136 // d e l a y ( 1 0 0 ) ; 137 } 138 139

140 //En f u n k t i o n som anv ä nder FIR− f i l t r e r n a som f i n n s 141 f l o a t f i r (i n t* input , f l o a t* h ) 142 { 143 i n t i =0; 144 f l o a t yn = 0 ; 145 146 f o r ( i =0; i <106; ++ i ) 147 { 148 yn += input [ i ]* h [ i ] ; 149 } 150 p r i n t f (" FIR MEDEL: %f \n ", yn ) ; 151 r e t u r n yn ; 152 } 153 154 // Funktion som sk ö t e r s h i f t n i n g e n av i n s i g n a l e n 155 void s h i f t ( ) 156 { 157 i n t i =0; 158 f o r ( i =1000 −1; i >0; −− i ) 159 { 160 input [ i ]= input [ i − 1 ] ; 161 } 162 } 163 164 void p r i n t a r r a y (i n t * input , i n t l e n g t h ) 165 { 166 i n t i =0; 167 f o r ( i =0; i <l e n g t h ; ++ i ) 168 { 169 p r i n t f ("%d ", input [ i ] ) ; 170 } 171 }

(65)

A.1 Rasperry Pi-koden 49

172

173 // Funktion som r ä knar ut e t t g l i d a n d e medelv ä rde av N a n t a l smaples 174 void avrage ( ) 175 { 176 i n t i =0; 177 f l o a t avrage =0; 178 i n t N=100; 179 180 f o r ( i =0; i <N; ++ i ) 181 { 182 avrage+=input [ i ] ; 183 } 184 p r i n t f (" Medel : %f \n ", avrage /N) ; 185 // r e t u r n ( avrage /N) ; 186 } 187 188

189 i n t main (i n t argc , char * argv [ ] ) 190 {

191 i f ( a r g c != 2 ) 192 {

193 p r i n t f (" Too few arguments ! \ nChoose a f l a g between : \ n ") ; 194 usage ( ) ;

195 r e t u r n ( 0 ) ; 196 }

197 i n i t ( ) ; 198

199 while( ( a r g c > 1 ) && ( argv [ 1 ] [ 0 ] == ’ − ’) ) 200 { 201 s w i t c h( argv [ 1 ] [ 1 ] ) 202 { 203 c a s e ’ g ’: 204 p r i n t f ("%s \n ", &argv [ 1 ] [ 2 ] ) ; 205 i n t x = 1 , y = 1 0 ; 206 i n i t s c r ( ) ; 207 208 i f( h a s _ c o l o r s ( ) == FALSE ) 209 { 210 endwin ( ) ;

211 p r i n t f ("No Support f o r Le Colourz \n ") ; 212 e x i t ( 1 ) ; 213 } 214 215 s t a r t _ c o l o r ( ) ; 216 i n i t _ p a i r ( 1 , COLOR_RED, COLOR_BLACK) ; 217 i n i t _ p a i r ( 2 , COLOR_GREEN, COLOR_BLACK) ; 218 219 noecho ( ) ; 220 c u r s _ s e t ( f a l s e ) ; 221 mvprintw ( y , x ," # ") ; 222 223 i n t f i r s t = 1 ; 224 while( 1 ) 225 { 226 i f( f i r s t == 1 ) 227 { 228 y = 0 ; 229 x = 0 ;

(66)

233 mvprintw ( 0 , 0 ," 10 ") ; 234 mvprintw ( 1 , 0 ," 9 ") ; 235 mvprintw ( 2 , 0 ," 8 ") ; 236 mvprintw ( 3 , 0 ," 7 ") ; 237 mvprintw ( 4 , 0 ," 6 ") ; 238 mvprintw ( 5 , 0 ," 5 ") ; 239 mvprintw ( 6 , 0 ," 4 ") ; 240 mvprintw ( 7 , 0 ," 3 ") ; 241 mvprintw ( 8 , 0 ," 2 ") ; 242 mvprintw ( 9 , 0 ," 1 ") ; 243 mvprintw ( 1 0 , 0 ," 0 ") ; 244 f i r s t = 0 ; 245 a t t r o n (COLOR_PAIR ( 2 ) ) ; 246 } 247 248 r e f r e s h ( ) ; 249 d e l a y ( 3 0 0 ) ; 250 read ( ) ; 251 y = 9 − v al ue ; 252 x ++; 253 254 while( y < 10) 255 { 256 y ++; 257 mvprintw ( y , x , " # ") ; 258 } 259 i f( x == 75) 260 f i r s t = 1 ; 261 } 262 break; 263 c a s e ’ f ’: 264 p r i n t f ("%s \n ", &argv [ 1 ] [ 2 ] ) ; 265 266 while( 1 ) 267 { 268 read ( ) ; 269 avrage ( ) ; 270 agc ( ) ; 271 // S k r i v e r ut u t s i g n a l e n och s k a l n i n g s f a k t o r n 272 p r i n t f (" U t s i g n a l e f t e r agc : %f \ n s k a l n i n g s f a k t o r : %f \n ", tempY , s c a l i n g f a c t o r ) ; 273 p r i n t f (" \n ") ; 274 d e l a y ( 1 0 ) ; 275 } 276 break; 277 c a s e ’ d ’: 278 p r i n t f ("%s \n ", &argv [ 1 ] [ 2 ] ) ;

279 // Skapar f i l e r dä r det gå r a t t s p a r a vä rden 280 FILE* fd=NULL;

281 FILE* f i l _ i n p u t=NULL; 282 FILE* f i l _ s c a l i n g =NULL; 283

284 //Öppnar upp f i l e r n a f ö r s k r i v n i n g 285 fd = fopen ("Y_N=20. dat ", "w") ;

References

Related documents

[r]

Istället för den dikotomisering av det deklarativa långtidsminnet som dis- tinktionen semantisk/episodisk utgör, och som Tulving med flera förespråkar, vill jag föreslå

2-pyridoner inhiberar infektion av coxsackievirus A24 variant och humant coronavirus OC43.

När jag hade gått igenom ett antal intervjuer på detta sätt la jag ihop teman som flera av intervjudeltagarna talade om i en ny mindmap-serie, och skapade efterhand

Del av befintlig väg 588 vid Sävastån övergår till enskild väg, se plankarta 1 00 T 02 30 Del av befintlig väg 585, Färjeleden, vid trafikplats Norra Sunderbyn som inte samman-

Förutom den bebyggelse som ligger inom korridoren behöver hänsyn tas till de bostadsmiljöer som ligger norr om Linghem närmast korridoren och bostäder söder om Stora Vänge..

Översikt, väg 677 genom Sikeå till höger i bild.... Ny pendlarparkering

En betesmark (2/800) med påtagligt naturvärde (objekt 40, NVI 2018) kopplat till flera äldre och grova ekar samt riklig förekomst av stenrösen påverkas av ny enskild väg� Den