EKG-mätare

Planering och tankar kring eventuella framtida projekt.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

EKG-mätare

Inlägg av jesse »

Hej. Jens heter jag och är ny på forumet !

Jag hamnade på sjukhus för ett tag sen då jag blev liggandes där ett par veckor uppkopplad mot en ekg-mätare. Jag hade arytmi.
Väl hemma vill jag ju givetvis titta på mitt EKG när jag vill för att se hur det står till.

Efter att ha funderat ett tag så köpte jag ett par st. instrumentförstärkare av typen INA 126

Bild

Jag har inte råd att köpa dyra program eller kort för analoga mätningar för PC så jag funderar på att koppla kretsen till mikrofoningången eller line-in på datorn.

Har lyckats göra ett program i BASIC (!) som faktiskt lyckas visa kurvan på skärmen men nu till några praktiska problem:

1) tror ni det duger med INA 126 om man kopplar de båda ingångarna till var sin arm och jorden till höger ben (standard ekg mäter spänningsskillnaden mellan handlederna). Signalen ligger på ca 1 mV. Hur ska jag bygga / inte bygga för att eliminera störningar (50Hz).

2) jag vill driva kretsen med ett 9V-batteri och helst ha optisk isolering mellan kretsen och datorn. Men alla optokopplare är väl binära? eller går det att få en någorlunda analog signal genom en optokopplare (den måste ju inte vara helt linjär - det kan jag justera i programmet sen)

3) det är ju ganska låga frekvenser det handlar om. Undrar om man alls kan använda mic-ingången. Jag är inte så noga med exakt återgivning men de traditionella pucklarna måste ju synas.

Jag gjorde en ritning som jag dessvärre tappat bort, men den är extremt enkel. typ 100 Mohm motstånd på ingången för att skydda kretsen, ett par kondingar och en trimpot på utgången. Återkommer med mer info...

(Det var längesen jag höll på med elektronik nu, så jag har övat mig lite genom att göra en stereomikrofonförstärkare för kondensatormikrofon med vanliga OP-förstärkare och den fungerar ju fint. :) )
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Välkommen till forumet!

När jag byggde min EKG-mätare så byggde jag upp min med diskreta OP. INA126 bör fungera ännu bättre då den har lasertrimmade resistorer.

För att filtrera ut 50Hz hade jag ett notchfilter efter instrumentförstärkaren. Så här i efterhand hade det nog varit bättre med ett bandpassfilter. Frekvensen från handlederna verkar ligga runt 10-30 Hz.

Bilden nedan visar signalen från handlederna från instrumentförstärkaren. Notera att detta varierar kraftigt från person till person. Mäter jag tex. på mig själv är denna signal indränkt i brus.

Bild



Denna bild visar signalen efter filtrering.

Bild
Användarvisningsbild
grym
EF Sponsor
Inlägg: 17580
Blev medlem: 16 november 2003, 12:22:57
Ort: i det mörka småland

Inlägg av grym »

det finns analoga optokopplare men även en med kapacitiv överföring, kolla i elfa, kommer inte ihåg vad den heter men klarar ungefär +-10v och 40 khz

dom kostar dock en slant

vilket program hadde du hittat för att visa via basic?
Användarvisningsbild
JimmyAndersson
Inlägg: 26571
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Är precis som föregående skrivare nyfiken på basic-programmet. :)

Vad använde du/ni som EKG-elektrod? Eller körde ni med mikrofon?
Användarvisningsbild
grym
EF Sponsor
Inlägg: 17580
Blev medlem: 16 november 2003, 12:22:57
Ort: i det mörka småland

Inlägg av grym »

iso122 heter en av isolationskretsarna
Användarvisningsbild
JimmyAndersson
Inlägg: 26571
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Ska det inte vara en nolla på slutet? Dvs ISO1220 ?
Isåfall är det en bekant krets från ett visst mätprojekt. :D

edit: Nepp, det skulle det inte. :oops:
peter555
Inlägg: 6047
Blev medlem: 12 februari 2006, 10:02:22

Inlägg av peter555 »

Du ska använda aktiv jord, den jorden du ansluter till kroppen är störningen åtrmatad i motfas. Principen är samma som för EEG.

http://openeeg.sourceforge.net/doc/mode ... esign.html

Tänk också på att använda batterier eller nätaggregat som är godkänt för medicinska tillämpningar.
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Ja, alltid - även om du bara leker - ta ett EN60601-1 aggregat och optoisolera innan du kopplar signalen till någon dator - Fuska inte med det! Med fuktiga elektroder så tål man nästan ingenting - jordströmmen hos ett vanligt nätaggregat kan vara tillräcklig för att ge problem och att bara jorda är inte helt säkert det heller. Godkänt aggregat eller batterier - alltid.....
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

Hej igen och tack för all respons.
Jag ska kolla in isoleringskretsen och jag ska vara noga med det. Enbart ett 9v-batteri ska driva instrumentförstärkaren. Och jag ska inte köra 9V genom kroppen!

Grunden till basicprogrammet hittade jag på internet - någon hade gjort ett förenklat oscilloskop som ritade kurvan på insignalen med hjälp av DLL-filen FMOD. Jag har modifierat programmet en del, men har absolut inte gjort något EKG-program av det, jag har bara testat så att jag kan lagra den data jag får in med väldigt låg samplingshastighet (då 44100 Hz är lite onödigt för en EKG-kurva!) samtidigt som jag visar inkommande data i realtid på skärmen.

Nu var det ett tag sen jag pysslade med det programmet - projektet har legat nere ett par månader (mycket jobb och familj) och jag upptäckte att jag gjort några olika versioner och minns inte vilken som är vad (jag orkar inte boota Windows nu där jag har min freebasic)

Så här ser det i alla fall ut, skrivet i FreeBASIC:
' Catching waveform direct from microphone or line-in
' I have a much better example here...
' M a t t h e w H a r t
' modified by Jens Hallgren


OPTION EXPLICIT
#INCLUDE ONCE "fmod.bi"

' Init constants for FMOD
CONST FALSE = 0
CONST BUFFERSIZE = 2^14
CONST BUFFERBYTES = BUFFERSIZE * 2
CONST SAMP = 11025 ' 44100 original

IF( FSOUND_Init(SAMP, 32, 0) = FALSE ) THEN
PRINT "Can't initialize FMOD"
END 1
END IF

DIM AS INTEGER Rec_Buffer

' for sample lock
DIM s_ptr1 AS SHORT PTR
DIM s_ptr2 AS SHORT PTR
DIM offset AS INTEGER
DIM length AS INTEGER
DIM s_len1 AS UNSIGNED INTEGER
DIM s_len2 AS UNSIGNED INTEGER

DIM i AS INTEGER
DIM c AS INTEGER
DIM x AS INTEGER

DIM AS INTEGER itr,cycles
DIM AS DOUBLE t

DIM j AS DOUBLE
DIM y AS INTEGER

' nya
DIM max AS DOUBLE
DIM mmax AS DOUBLE
DIM medel AS DOUBLE
DIM s AS INTEGER ' position på skärmen från 75 till 640
DIM amp AS DOUBLE

' This is the amount of bytes behind the
' record cursor that we want to lock.
' Each sample is 2 bytes, so we want
' to get twice the width of the screen
' in bytes.

length = 128

' set screen resolution
SCREENRES 640,480,8,1

' create the palette
FOR i = 0 TO 255
IF i > 127 THEN c = i*2
IF i < 32 AND i>1 THEN c=64-i
IF i > 192 THEN x = i * 1.7
PALETTE i,i,c,x
NEXT i

' start the record buffer
Rec_Buffer = FSOUND_SAMPLE_Alloc (FSOUND_UNMANAGED, _
BUFFERSIZE, FSOUND_NORMAL, SAMP, 255, _
128, 255)
FSOUND_Record_StartSample ( Rec_Buffer, 1)


t = TIMER
itr = 0
s = length/2+10

DO
max=0
IF TIMER > (t + 1) THEN
t = TIMER
cycles = itr
itr = 0
LINE (s,y-10)-(s,y),255
END IF
itr += 1

offset = (FSOUND_Record_GetPosition() * 2) - length
IF offset < 0 THEN offset += (BUFFERBYTES)

IF FSOUND_Sample_Lock (Rec_Buffer, offset, _
length, @s_ptr1, @s_ptr2, @s_len1, _
@s_len2) = 1 THEN

SCREENLOCK
' plot buffer contents

LINE (0,0)-(length/2+1,479),0,bf
PSET (-1,y),255
x = 0
y = 240

FOR i = 0 TO (s_len1 SHR 1) -1


j = ((s_ptr1)*.002)+y
IF abs(j-y)>max THEN max=abs(j-y)
LINE -(x,j),255
x+=1
IF x > 640 THEN x = 0:y += 150: PSET (-1,y),200

NEXT i

' if the buffer has wrapped then get the
' second chunk (at the start of the buffer)

IF s_ptr2 THEN
LOCATE 3,1: COLOR 200: PRINT "Wrapped!"
FOR i = 0 TO (s_len2 SHR 1) -1
j = ((s_ptr2)*.002)+y
IF ABS(j-y)>max THEN max=ABS(j-y)
LINE -(x,j),200
x+=1
IF x > 640 THEN x = 0:y += 150: PSET (-1,y),200
NEXT i
END IF

LOCATE 1,3: COLOR 255: PRINT "Real-Time Audio Data Capture ";
IF max>mmax THEN mmax=max
medel=(medel*100+max)/101
mmax*=.99

IF mmax<0 THEN mmax=0
s +=1
IF s>640 THEN
s=length/2+10
'LINE (0,0)-(639,479),0,bf
END IF
PRINT "Cycles per second: = "; cycles ;" max = ";INT(mmax*500);INT(medel *500)
amp=3
LINE (s+1,12)-(s,479),0
LINE (s,y+mmax*amp)- (s,y-mmax*amp),(mmax*2 AND 255)+10
LINE (s,y+medel*amp)- (s,y-medel*amp),s/5+50
LINE (s,y)- (s,y-max*amp),s/6+90
pset (s,y),255

SCREENUNLOCK

FSOUND_Sample_UnLock (Rec_Buffer, @s_ptr1, @s_ptr2, s_len1, s_len2)
ELSE
PRINT "Something CRAZY just happened!"
END IF
SLEEP 1
LOOP WHILE INKEY$ = ""

FSOUND_Record_Stop
FSOUND_Sample_Free(Rec_Buffer)
FSOUND_Close
SLEEP

END



Readme-fil:

Caption
program för att fånga insignalen från mic eller line-in
---
Av Jens Hallgren ( tack till Matthew Hart )
skapad med Freebasic och JellyFish Pro Editor
---
installation:

lägg programmet (capture.exe) samt filen fmod.dll i samma mapp
starta genom att dubbelklicka på capture.exe
avsluta genom tangenttryckning
en gång - ger stillbild
en andra gång - stänger programmet

capture.bas är källkoden i Free-basic
---
felsökning:

" hittar ej fmod.dll" - prova att lägga fmod.dll i mappen C:\windows\
slät linje / ingen signal - gå in i volymkontrollen (högerklicka på högtalaren i windows)
välj "öppna volymkontroller" - alternativ - egenskaper
välj inspelning - (tryck OK) - justera volymkontroller för inspelning
kolla att "ljud av" inte är markerat
---
skärmbild:

fältet till vänster visar vågformen momentant
kurvan till höger är uppdelad i tre fält som alla visar volym.
avståndet mellan två vita linjer motsvarar en sekund förfluten tid

1) momentant värde
2) medelvärde under de senaste sekunderna
3) maxvärde som sjunker logaristmiskt med tiden.
---
utdata
- data till fil - ej klart
[/quote]

och en screenshot på en variant av programmet som visar bla. medelvärde av insignalen... (skulle användas i ett annat sammanhang)

Bild
en variant av programmet

Bild
en annan variant (mest lik koden ovan)[/quote]

EDIT: jag vet inte varför bilderna inte visas, men här är en länk:
screendump
Anenkefali
Inlägg: 24
Blev medlem: 6 november 2006, 23:29:19

Inlägg av Anenkefali »

Nu är jag långt ifrån expert på det här området, men borde ett ljudkort rimligtvis inte ha någon form av filtrering som tar bort komponenter som ligger utanför det "hörbara området" (ca 20-20000 Hz) ?

Isf, hur har du tänkt att frekvenskomponenterna för en vanlig hjärtrytm (som jag antar ligger mellan 1-2 Hz) skall kunna passera?

Eller har du tänkt att först modulera din mätsignal (exempelvis via AM) för att först flytta upp frekvensbandet från runt 1-2 Hz till kanske 1 khz, låta signalen passera genom ljudkortet och sedan demodulera via software på PC'n?

Projektet är för övrigt mycket intressant. Jag har själv ibland haft tankar på att bygga någon form av EEG-mätare för att kunna studera och i slutändan förbättra mina kaotiska sömnvanor (främst för att kunna mäta och studera de olika cyklerna och sedan hitta någon form av optimal sömntid så att jag vet hur jag skall ställa väckarklockan).
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

Du ska använda aktiv jord, den jorden du ansluter till kroppen är störningen åtrmatad i motfas.
OK, jag antar att jag kan göra det genom att dela på Rg (motståndet som bestämmer förstärkningen på INA 126) i två och ta ut den signalen via en OP-amp så som de gjort på EEG-apparaten (ska studera den och se om jag fattar... :? ) Jag tänkte också använda två kanaler (då kan man få en tvådimensionell bild av riktningen på strömmarna inne i hjärtat vilket är viktigt om man ska kunna avgöra varifrån i hjärtat vissa rytmstörningar kommer)
peter555
Inlägg: 6047
Blev medlem: 12 februari 2006, 10:02:22

Inlägg av peter555 »

Jag gjorde en labb i skolan med EKG-förstärkare för ett antal år sedan, jag minns att det var klockrena signaler. Det var bara ett par OPar så det bör inte vara så komplicerat.
Användarvisningsbild
JimmyAndersson
Inlägg: 26571
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Anankefali:
Bra fråga. Såhär ligger det till:
Frekvensen, dvs hur ofta hjärtpulsen kommer är mycket riktigt låg, men däremot så är frekvensen i själva ljudet ganska bredbandig (innehåller ljud i ett stort frekvensområde) tack vare att kroppen fungerar som resonanslåda. Så det är inga problem att ta emot med ett vanligt ljudkort.
Anenkefali
Inlägg: 24
Blev medlem: 6 november 2006, 23:29:19

Inlägg av Anenkefali »

Jojo, det lär givetvis finnas fler komponenter i signalen än bara de < 10 Hz men det är väl just dessa (<10) som är de intressanta? openEEG-projektet verkar konstatera samma sak, att ljudkortet inte är bra nog < 10-20 Hz för att använda till EEG/ECG.

Annars har väl datorn flera portar. Joystick-ingången som brukar finnas på just ljudkort lär knappast (??) ha något filter (DC) som på mikrofoningången.

Eller så modulerar han helt enkelt (hehe, i teorin iaf) signalen med hårdvara, skickar in den i datorn (via ljudkortet) och demodulerar i software. Då går det ju dessutom att skicka flera kanaler (1 per carrier) på samma sladd. Iden med att just använda ljudkortet är ju väldigt enkel och praktiskt om man bara får det att fungera, och det går ju dessutom att lagra längre inspelningar (under nätter etc) på en vanlig bandspelare för senare analys.

Det framgick inte om du själv hade testat och fått det att fungera på annat sätt, så ursäkta om jag verkar negativ :)
Användarvisningsbild
JimmyAndersson
Inlägg: 26571
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Jag tycker du har mycket bra idéer. Som sagt, man måste ju inte använda ljudkortet. Schmitt-triggar man ljudet så går signalen att stoppa in i de flesta datorportar. :)


"Jojo, det lär givetvis finnas fler komponenter i signalen än bara de < 10 Hz men det är väl just dessa (<10) som är de intressanta?"

Nja, man kan lika gärna lyssna efter högre frekvenser. Det är ju inte själva hjärtljudet som är intressant utan *när* ljudet kommer. Då förutsätter jag förstås att man byggt bra så att man inte får ljud från muskler, snarkningar, osv.


Att skicka fler kanaler på samma sladd var en mycket intressant idé. :)

edit: Sedan bör man nästan undvika att använda ljudkortets mikrofoningång. Det finns alltid massa brus och skräp där oavsett hur bra ljudkortet är. En dator skickar ut alla möjliga störningar från hårddiskar mm och det tar en intern mikrofonförstärkare upp hur lätt som helst.
Om man ändå vill använda mikrofoningången så bör man jorda hårddiskarna i nätdelens chassi.
Skriv svar