Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

filtriranje EKG signala...

[es] :: Elektronika :: Mikrokontroleri :: filtriranje EKG signala...

[ Pregleda: 2372 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

maddog_srb
Cacak

Član broj: 192945
Poruke: 129
*.blueisp.co.yu.



+24 Profil

icon filtriranje EKG signala...01.06.2010. u 18:47 - pre 169 meseci
Da li bi neko mogao da mi "sažvaće" funkciju koja treba da filtrira signal EKG-a???

Kod je preuzet sa www.ti.com i odnosi se na mikrokontroler MSP430FG439. Naime, u pitanju je FIR filtar

Code:

...

int filterlp(int sample)                                     // Lowpass FIR filter for EKG
{   static int buflp[32];                                    // Reserve 32 loactions for circular buffering
    static int offsetlp = 0;
    long z;
    int i;
    buflp[offsetlp] = sample;
    z = mul16(coeffslp[8], buflp[(offsetlp - 8) & 0x1F]);
    for (i = 0;  i < 8;  i++)
    z += mul16(coeffslp[i], buflp[(offsetlp - i) & 0x1F] + buflp[(offsetlp - 16 + i) & 0x1F]);
    offsetlp = (offsetlp + 1) & 0x1F;
    return  z >> 15;                                         // Return filter output
}// int filterlp

...


Ne razumem bas najbolje kako je ovo u stvari realizovano.

mul16 je funkcija za asemblersko množenje, i nalazi se u posebnom fajlu.

Ukoliko bi neko uspeo da mi ovo dočara, bilo bi super... Potrebni fajlovi su priloženi...
Prikačeni fajlovi
 
Odgovor na temu

maddog_srb
Cacak

Član broj: 192945
Poruke: 129
*.blueisp.co.yu.



+24 Profil

icon Re: filtriranje EKG signala...06.06.2010. u 22:01 - pre 168 meseci
Ima li neko neku informaciju,gde bih mogao da potrazim vise informacija o filterima???

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: filtriranje EKG signala...06.06.2010. u 23:13 - pre 168 meseci
imas odlicno objasnjenje na wikipediji? http://en.wikipedia.org/wiki/Finite_impulse_response a imas i linkove tu na razlicite algoritme za implementaciju istog.

sto se "filtera" per se tice .. ima ih koliko oces .. implementiraju se i u hardware-u i software-u .. nekad je isplativije da filter implementiras u hw-u, imas nekoliko aplikacija koje ti pomazu da implementiras razlicite filtere u hardware-u (uglavnom to bude gomila cudno vezanih op-ampova)

http://en.wikipedia.org/wiki/Digital_filter
http://en.wikipedia.org/wiki/Filter_design
http://en.wikipedia.org/wiki/Filter_(signal_processing)
http://en.wikipedia.org/wiki/Digital_biquad_filter

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: filtriranje EKG signala...06.06.2010. u 23:31 - pre 168 meseci
inace sta radi taj kod ..

Code:

    static int buflp[32];                              
    static int offsetlp = 0;


buflp[32] je staticki niz gde se cuvaju u krug semplovane vrednosti
offsetlp je pointer za setanje kroz cirkularni baffer buflp

Code:

    buflp[offsetlp] = sample;


zapamti "novu" semplovanu vrednost

Code:

    z = mul16(coeffslp[8], buflp[(offsetlp - 8) & 0x1F]);
    for (i = 0;  i < 8;  i++) 
       z += mul16(coeffslp[i], buflp[(offsetlp - i) & 0x1F] + buflp[(offsetlp - 16 + i) & 0x1F]);

izracunaj rezultat.

Ovde se ocigledno koristi fir nivoa 8 (filter order), u coeffslp se nalaze koeficijenti za fir filter, verovatno su definisani negde u nekom h fajlu.

Code:

    offsetlp = (offsetlp + 1) & 0x1F;

pomeri pointer na sledece mesto (tako ide u krug - onaj &0x1f sluzi da kada dodje do 32 krene od nule - dakle to je tipa offsetlp++; if (offsetlp==32) offsetlp=0;)

mislim, prilicno je jednostavno .. koji deo ti nije jasan ?
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: filtriranje EKG signala...06.06.2010. u 23:33 - pre 168 meseci
Filter se karakterise impulsnim odzivom. U digitalnoj obradi signala to je neki niz od n brojeva koji predstavljaju ekvidistantne odbirke recimo prenosne karakteristike analognog filtra, ako ti je tako lakse da shvatis.

Kad na ulazu u filter imas neki signal, onda iz tog ulaznog signala i karakteristike filtra mozes dobiti izlazni signal.

Dakle, ulazni signal se predstavlja kao niz brojeva (to je tvoj EKG signal), ali i karakteristika filtra je takodje niz brojeva.
Recimo: EKG signal = [e1 e2 e3 e4 e5 e6 e7 e8 e9 ......]
karakteristika filtra = [f1 f2 f3 f4]
e i f su neki brojevi. e-brojevi se dobijaju tako sto se signal sa elektroda ekg aparata A/D konvertorom pretvori u digitalne brojeve, a f-brojevi su karakteristika filtra, poznati unapred.

Izlazni signal se od ulaznog signala i karakteristike filtra dobija takozvanom operacijom konvolucije, ali ne mogu sad da ti objasnjavam matematiku i teoriju kojom se do toga dolazi (trazi literaturu iz Signala i Sistema i naci ces sve sto ti treba).

Elem, operacija konvolucije podrazumjeva da se npr. vektor filtera ''izvrne unazad" pa se vrsi mnozenje i zbrajanje sa odgovarajucim brojevima iz vektora ulaznog signala da bi se dobio izlazni signal;

Neka je izlazni signal npr. Y = [y1 y2 y3 y4 y5 y6 y7 y8 y9 710......]
Ovi y-oni se dobijaju tako sto se svaki sastoji od zbira cetiri umnoska, a koji se dobijaju ovako:

npr. y5 = f1*e5 + f2*e4 + f3*e3 + f4*e2
npr. y6 = f1*e6 + f2*e5 + f3*e4 + f4*e3
...
......y100 = f1*e100 + f2*e99 + f3*e98 + f4*e97
itd.

Primjeti da odgovarajuci odbirak u izlaznom signalu dobijas tako sto u ulaznom signalu pomnozis isti taj i jos 3 prethodna (ukupno 4) sa odbircima koji karakterisu filter. Kad bi filter bio karakterisan ne sa 4, nego npr. sa 12 brojeva onda bi mnozio 12 brojeva iz ulaznog signala (pocevsi od tog koji je na redu pa dalje u nazad) sa 12 odbiraka filtra.

E sad ovaj tvoj program radi to isto, samo sto je moguce na nekoliko nacina doci do tog izlaznog signala (mislim programski, ne sustinski - jer mozes napraviti nekoliko razlicitih petlji koji ce da urade to mnozenje i sabiranje da bi dobio izlazni signal), ali to ostavljam tebi da vidis kako je u ovoj funkciji sazvakano.

Literatura: http://www.dspguide.com/pdfbook.htm

edit: evo vidim da ti je Bogdan objasnio algoritam programa dok sam ja ovo kucao :)
Pozdrav!
 
Odgovor na temu

maddog_srb
Cacak

Član broj: 192945
Poruke: 129
*.blueisp.co.yu.



+24 Profil

icon Re: filtriranje EKG signala...07.06.2010. u 21:27 - pre 168 meseci
Ljudi, ne znam šta da vam kažem, osim HVALA PUNO :-)

Lepo ste mi to "sažvakali", a sada je na meni da svarim...

Još jednom, hvala...
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: filtriranje EKG signala...

[ Pregleda: 2372 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.