Sunteți pe pagina 1din 112

Universitatea Politehnica Bucureşti

Facultatea de Automatică şi Calculatoare

LUCRARE DE LICENŢĂ

Proiectarea unui sistem avansat pentru cazurile


de urgenţă medicală

COORDONATOR ŞTIINŢIFIC:
Prof. Dr. Ing. Nicolae Constantin

ABSOLVENT:
Mănăilă Marius Octavian

Bucureşti
- 2010 -
Cuprins

1 Telemedicina 1
1.1 Definirea conceptului de Telemedicină . . . . . . . . . . . . . 2
1.2 Clasificare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Conţinut şi caracteristici . . . . . . . . . . . . . . . . . . . . . 5
1.4 Bariere ı̂n telemedicină . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Domenii de dezvoltarea a proiectelor de
telemedicină . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6 Etapele dezvoltării unui proiect de
telemedicină . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.7 Evaluare şi deontologie ı̂n telemedicină . . . . . . . . . . . . . 6

2 Achiziţia şi prelucrarea datelor biomedicale 7


2.1 Monitorizarea şi ı̂nregitrarea testelor medicale . . . . . . . . . 8
2.2 Achiziţie semnal . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Algoritmi de procesare a semnalelor . . . . . . . . . . . . . . 12
2.3.1 Algoritmi de detecţie bazaţi pe amplitudine şi prima
derivată . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4 Compresia semnalelor biomedicale . . . . . . . . . . . . . . . 16

3 Transmisia datelor 22
3.1 Prezentarea generală a sistemului de
telecomunicaţii . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.1.1 Reţele PSTN . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2 Reţele ISDN . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.3 Reţele TCP/IP . . . . . . . . . . . . . . . . . . . . . . 25
3.1.4 Reţele prin fibră optică . . . . . . . . . . . . . . . . . 25
3.1.5 Reţele xDSL . . . . . . . . . . . . . . . . . . . . . . . 26
3.2 Utilizarea reţelelor fără fir . . . . . . . . . . . . . . . . . . . . 26
3.2.1 Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.2 ZigBee . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.3 GSM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.4 UMTS . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.5 WLAN . . . . . . . . . . . . . . . . . . . . . . . . . . 32

i
3.2.6 Comunicatii prin satelit . . . . . . . . . . . . . . . . . 33
3.3 Standardul de comunicaţie şi imagistică medicală . . . . . . . 34
3.4 Arhitectura reţelei unitătilor sanitare fixe . . . . . . . . . . . 34
3.5 Arhitectura unitate sanitară fixă - unitate sani-tară mobilă . 35

4 Securizarea datelor ı̂n telemedicină 38


4.1 Norme de securitate ı̂n telemedicină . . . . . . . . . . . . . . 39
4.2 Modelarea unei arhitecturi de securitate . . . . . . . . . . . . 41
4.3 Tehnici de securizare a sistemului medical . . . . . . . . . . . 46

5 Sistem de telemonitorizare 50
5.1 Implementarea software a sistemului . . . . . . . . . . . . . . 52
5.1.1 Modul server . . . . . . . . . . . . . . . . . . . . . . . 52
5.1.2 Modul client . . . . . . . . . . . . . . . . . . . . . . . 53
5.2 Modul Chat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.3 Modul video . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.4 Modul grafice . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

6 Concluzii 60

Bibliografie 62

Anexe 64

ii
Capitolul 1

Telemedicina

Una dintre cele mai mari provocări cu care se confruntă omenirea ı̂n secolul
21 este aceea de a face asistenţă medicală de ı̂naltă calitate care să fie disponi-
bilă tuturor. O asemenea viziune a fost exprimată de către Organizaţia
Mondială a Sănătăţii (WHO) şi a fost adoptată ca o strategie a secolului
21.[1]
În mod tradiţional, cea mai dificilă parte ı̂n realizarea unui acces echitabil
la asistenţa medicală a fost faptul că prestatorul şi destinatarul trebuie sa
fie prezenţi ı̂n acelaşi loc şi ı̂n acela şi timp. Recentele progrese, care au
avut loc ı̂n domeniul informaticii şi a comunicării, au creat oportunităţi fără
precedent pentru depăşirea acestei probleme, prin creşterea numărului de
modalitaţi ı̂n care asistenţa medicală poate fi asigurată. Aceasta se aplică
atât tărilor ı̂n curs de dezvoltare cu economii slabe sau instabile cât şi ı̂n
ţările industrializate. Posibilităţile de utilizare a noilor tehnologii pot duce
la o ı̂mbunătăţire a furnizării de sănătate (acest domeniu poartă numele de
telemedicină ), iar acest lucru ı̂ncepe să fie recunoscut tot mai mult. WHO
a declarat că va recomanda tuturor membrilor săi să ı̂ncerce să adopte, ı̂n
cel mai scurt timp, o astfel de strategie:

” Integraţi utilizarea telemedicinei ı̂n politica generala. Aceasta


va fi strategia pentru atingerea eficienţei maxime in domeniul
sănătaţii pentru toata populaţia, ı̂ndeplinind astfel o viziune a
unei lumi ı̂n care avantajele ştiinţei, tehnologiei şi dezvoltării
sănătăţii publice sunt facute echitabil pentru a fi disponibile tu-
turor oamenilor de pretutindeni.”[2]

Un astfel de angajament pentru a ı̂mbunataţi serviciul de sănătate, prin


utilizarea tehnologiilor informaţiei şi telecomunicaţiilor,este punctat şi de
Comisia Europeană. Comisia Europeană participă la multe proiecte pentru
a ı̂ncuraja o dezvoltare cât mai rapida şi mai eficientă a telemedicinei. Da-
torită comunicatelor de presă realizate de cele doua organizaţii, la nivel na-
tional şi local, a inceput să apară interesul in dezvoltarea tehnologiilor exis-

1
tente pentru un serviciu de sănătate mai eficient. De exemplu, ı̂n Marea Bri-
tanie, tehnologia informaţiei, inclusiv telemedicina se află ı̂n centrul strate-
giei guvernului de a moderniza şi de a ı̂mbunatăţi Serviciul Sanitar Naţional
(NHS). Telemedicina, zona ı̂n care medicina şi tehnologia informaţiei şi
telecomunicaţiei se ı̂ntrepătrund este parte din această revoluţie care ar
putea avea cel mai mare impact asupra serviciului de sănătate.

1.1 Definirea conceptului de Telemedicină


Definită larg, telemedicina este transferul pe cale electronică a datelor med-
icale, imagini de ı̂nalta definiţie, sunete, transmisii video pe viu, ı̂nregistrări
referitoare la pacient, dintr-un loc ı̂ntr-altul, la mare distanţă.
Acest transfer de date medicale poate utiliza diferite tehnologii, in-
cluzând - ı̂nsă fără să se limiteze la enumerarea următoare - linii telefonice
normale, ISDN, ATM, Internet, Intra-neturi şi sateliţi. Telemedicina este
folosită de furnizori ı̂ntr-un număr din ce ı̂n ce mai mare de specialităţi care
includ dermatologia, oncologia, radiologia, chirurgia, cardiologia şi psihia-
tria. Tendinţele observate se referă la folosirea telemedicinei ı̂n asigurarea
sănătaţii la distanţă, cu respectarea criteriilor de calitate ı̂n serviciile respec-
tive; scopurile urmărite sunt ı̂n creştere şi pot reduce semnificativ timpul şi
costurile de ı̂ngrijire a pacientului, precum şi cele legate de transport.
Un sistem de telemedicină integrează mai multe componente tehnologice
precum: educare şi formare profesională, gestionarea informaţiilor medicale
(numite informatică) şi servicii administrative, astfel formând o infrastruc-
tura comuna. Relaţia dintre aceste componente sunt prezentate ı̂n figura
1.1.

Figura 1.1: Componentele care stau la baza unui sistem de telemedicină

2
Tehnologia utilizată permite aşadar medicilor să efectueze ı̂mpreună cerce-
tări clinice, ı̂n ciuda distanţelor geografice care ı̂i separă, partajând vizionarea
ı̂nregistrărilor pacientului şi a imaginilor de diagnostic.

1.2 Clasificare
Telemedicina pot fi ı̂mpărţită ı̂n trei categorii principale:

• stocarea şi transmiterea ( store-and-forward )

• monitorizarea de la distanţa

• servicii interactive

Stocarea şi transmiterea


Tehnologia stocării şi transmiterii este asincronă şi este folosită pentru
transferul imaginilor digitale de la o locaţie la alta. Imaginea obţinută cu
ajutorul unei camere video digitale este stocată pe suport magnetic şi apoi
transmisă spre destinaţie. Tehnologia se utilizează cu precădere ı̂n cazurile
mai puţin urgente, când diagnosticul şi rezultatul consultaţiei medicale tre-
buie obţinute ı̂n 24-48 de ore. Imaginea digitală poate fi transmisă ı̂ntre
doua puncte din cadrul aceleiaşi clădiri, din clădiri diferite, din localităţi
diferite sau ı̂ntre oricare doua puncte de pe glob. Aplicaţiile care folosesc
preponderent această tehnologie sunt teleradiologia, telepatologia şi teled-
ermatologia.
Teleradiologia este cea mai larg utilizată aplicaţie a telemedicinei, apăru-
tă ı̂n 1950, fiind considerată ”străbunica” aplicaţiilor cu teleimagini [3].
Sistemele teleradiologice sunt compuse din aparate de captareşi afişare a
imaginilor conectate la capetele unei reţele de comunicaţii. Imaginile cu
radiografiile transmise prin reţea sunt afişate la receptor pe un monitor şi
interpretate de o aplicaţie-diagnostic de calitate. După acest proces, imag-
inile vor fi interpretate de un medic specialist radiolog, care va emite di-
agnosticul final.Soluţia tradiţională era dată de transportarea radiografiei
la medicul radiolog sau apelarea la serviciile unui radiolog care venea la
domiciliul pacientului. Datorită teleradiologiei, cheltuielile se limiteaza la
obţinerea frecvenţelor de transmisie digitală şi la achiziţia echipamentelor.
Ultima noutate ı̂n domeniu se referă la integrarea ı̂n tehnologia teleradio-
logica a sistemelor de comunicare şi arhivare a imaginilor.
Momentan, integrarea funcţionează doar pentru aplicaţiile de teleradi-
ologie care se execută la nivelul unei instituţii şi are drept scop sporirea
calităţii şi reducerea costurilor pentru serviciile de diagnosticare teleradio-
logică.

3
Monitorizarea de la distanţă
Monitorizarea de la distanţă, de asemenea, cunoscută sub numele de self-
monitoring/testing, permite personalului medical să monitorizeze un pacient
la distanţă, folosind diverse dispozitive tehnologice. Această metodă este ı̂n
primul rând folosită pentru gestionarea bolilor cronice sau a condiţiilor speci-
fice, cum ar fi boli de inimă, diabet zaharat sau astm. Aceste servicii pot
oferi rezultate comparabile cu cele tradiţionale, medicul putând monitoriza
mai mulţi pacienţi ı̂n acelaşi timp, ceea ce ı̂nseamna o eficienţa mult mai
mare, care va genera o scădere a cheltuielilor.

Servicii interactive
Tehnologia televiziunii interactive bidirecţionale (two-way interactive tele-
vision) este sincronă şi se poate utiliza ı̂n domenii precum: psihiatrie, medici-
nă internă, cardiologie, pediatrie, obstetrică-ginecologie etc. Tehnologia
aduce faţă ı̂n faţă medicul şi pacientul.
Teleradiologia (transmiterea imaginilor radiologice la distanţă, dintr-un
loc ı̂ntr-altul), poate fi folosită ı̂n numeroase scenarii. Un specialist, echipat
cu dispozitive numerice de achizi tionare a datelor pentru imaginile obţinute
cu raze X, poate da consultaţii unor pacienţi situaţi departe de cabinetul
său radiologic. Ea permite chirurgilor să revadă radiografiile de dinaintea
operaţiei şi pe cele obţinute după efectuarea operaţiei, fără să fie nevoie să-şi
vadă pacienţii. Ea oferă disponibilitatea ı̂n timp a imaginilor radiologice şi
interpretarea acestora, atât ı̂n cazuri de urgenţă, cât şi ı̂n cazuri normale
de ı̂ngrijire a sănătăţii ı̂n clinici. Ea permite aşadar medicilor să colecteze
date asupra pacientului, inclusiv radiografii, pentru prezentarea de cazuri
medicilor specialişti prin intermediul unei videoconferinţe, evitând călătorii
inutile pentru pacient şi grăbind terapia.
Un sistem de teleradiologie constă dintr-o secţie de obţinere a imaginii şi
una de afişare şi interpretare a ei, conectate printr-un sistem de comunicaţie
(de pildă, o reţea).
Imaginile se obţin, de obicei, cu ajutorul unui dispozitiv de numerizare
pe film care transformă radiografiile convenţionale ı̂ntr-o formă digitală iar
cele mai noi aparate dispun de această formă digitală, ı̂n vederea transmisiei
lor pe o reţea de telecomunicaţii. Pentru numerizare se folosesc doar tehnici
diferite care utilizează fie lasere, fie charged coupled devices (CCD). Dispozi-
tivele cu laser oferă un foarte bun contrast şi o foarte bună definiţie spaţială,
dar sunt mai scumpe decât dispozitivele de numerizare CCD. Acestea din
urmă oferă o definiţie spaţiala comparabilă, ı̂nsă contrastul lor sau definiţia
tonurilor pe scară de culori gri (de la alb spre negru) este mai puţin bună.
Cu toate acestea, ele sunt mai eficiente din punctul de vedere al costului, au
dimensiuni mai mici şi sunt mai uşor de ı̂ntreţinut .
O alternativă la captarea imaginilor pe un film obiţnuit, urmată de nu-
merizare, este radiografia computerizata (Computed Radiography CR). CR

4
foloseşte plăci de fosfor pentru memorizare, cu scopul de a obţine imagini nu-
merizate şi oferă o dinamică mai largă, deosebit de utilă ı̂n aplicaţii cum ar fi
aparatele portabile de radiografie. Cum CR este astăzi foarte răspândită iar
folosirea ei ı̂n creştere, numerizarea filmului s-ar putea să devină, cu timpul,
ı̂nvechită.
După obţinerea imaginilor, acestea sunt transmise ı̂ntr-un centru de in-
terpretare care foloseşte reţele locale (Local Area Networks LANs) sau reţele
distante (Wide Area Networks WANs). O reţea locală LAN este un mediu
de transmisie partajat de toate staţiile conectate iar zona ei de acoperire se
limitează la o arie locală, fără să traverseze vreo zonă publică. În general,
LANs au un diametru de serviciu de câţiva kilometri şi sunt proprietatea
unei singure organizaţii care le gestionează. În mod tipic, WANs acoperă
regiuni ı̂ntregi, ba chiar ţări.
Unul din principalele scopuri ale telemedicinei, stabilit chiar de la ı̂nceput,
a fost asigurarea consultaţiilor medicale de la distanţă. Tehnologia video
interactivă permite pacientului să fie consultat de la distanţă de medicul
specialist, pacientul putând fi ı̂nsoţit, eventual, de medicul generalist local
(medicul de familie), care să prezinte cazul. Pe lângă discuţia propriu- zisă,
medicului specialist i se pot pune la dispoziţie diverse date despre pacient:
evaluări stetoscopice, oftalmologice, fişe medicale, rezultate de laborator,
examinări endoscopice, radiologice, patologice, cardiologice etc. Singura
limitare a specialistului este aceea că nu poate palpa pacientul. Cu toate
acestea, consultaţiile efectuate ı̂n practică au fost declarate satisfăcătoare,
atât de către pacienţi, cât şi de către medici.

1.3 Conţinut şi caracteristici


Lipsa

1.4 Bariere ı̂n telemedicină


Lipsa

1.5 Domenii de dezvoltarea a proiectelor de


telemedicină
Lipsa

1.6 Etapele dezvoltării unui proiect de


telemedicină
Lipsa

5
1.7 Evaluare şi deontologie ı̂n telemedicină
Creşterea rapidă a numărului de site-uri de e-sănătate şi a volumului de
informa-ţii şi servicii disponibile online pentru consumatori se datorează
parţial inexistenţei unui control riguros asupra informaţiei furnizate pe In-
ternet.
Consumatorii bine informaţi ı̂şi pot asuma acum responsabilitatea pen-
tru multe din deciziile pe care le iau privind ı̂ngrijirea sănătăţii. Pe de
altă parte, nu există nici o organizaţie care să răspundă pentru suprave-
gherea serviciilor şi informaţiilor medicale furnizate online. Pentru a con-
tracara oarecum acest fenomen, unele dintre organizaţiile interesate să asiste
consumatorii ı̂n luarea deciziilor corespunzătoare referitoare la sănătate au
dezvoltat unele direcţii care vizează evaluarea şi normele deontologice din
telemedicină.
Certificările pentru proiectele de telemedicină pot constitui un instru-
ment important pentru profesionişti, pacienţi sau familiile acestora, ı̂n ved-
erea unei selecţii corespunzătoare a site-urilor de e-sănătate. Aceste cer-
tificări sunt proiectate astfel ı̂ncât să asigure existenţa unui nivel garantat
al calităţii site-urilor care subscriu reglementărilor. Unele aspecte privesc
domenii specifice, cum ar fi intimitatea pacientului sau securitatea informaţii-
lor de natură financiară, ı̂n timp ce altele vizează probleme legate de calitatea
informaţiei oferite. Site-urile care respectă anumite reglementări afişează de
obicei un logo, indicând faptul că dezvoltatorul proiectului de telemedicină
garantează aderarea la anumite principii. Pacienţii şi furnizorii de sănătate
pot alege acele site-uri ca parte a procesului de selectare a proiectelor de
e-sănătate corespunzătoarea nevoilor proprii.

6
Capitolul 2

Achiziţia şi prelucrarea


datelor biomedicale

Achiziţia semnalului biomedical şi ı̂nregistrarea acestuia reprezintă dezvolta-


rea investigaţiilor medicale pe parcursul timpului. În mod normal testele
medicale (investigaţiile medicale) se făceau ı̂ntr-un anumit moment ı̂n care
medicul efectiv intra ı̂n contact cu pacientul. Pe lângă testele medicale
doctorul verifică pulsul, ia probe de sânge, verifică tensiunea arterială, ia
probe de urină şi, uneori, măsoară temperatura corpului şi a transpiraţiei.
Toate aceste teste medicale, ı̂mpreună, duceau la un diagnostic sau dacă
nu erau suficiente se cereau investigaţii suplimentare. De cele mai multe
ori investigaţiile suplimentare reprezintă teste funcţionale sau teste pe bază
de imagini. Astfel de teste pot fi radiologii sau analize cu ultrasunete sau
investigaţii endoscopice sau angiografice. Testele funcţionale pot fi elec-
trocardiografice, teste pulmonare sau teste psihologice ce măsoara nivelul
de stres. Toate aceste teste au rezultate destul de generaliste deşi implică
imagini sau teste funcţionale dintr-o perioadă scurtă de timp. Toate aceste
rezultate generaliste sunt folosite pentru a se stabili un diagnostic corect.Pe
baza diagnosticului medicul ı̂ncearcă să prezică schimbările ı̂n timp (de
ex: evoluţia bolii sau consecinţele medicaţiei). Pentru a prezice astfel de
schimbări este nevoie de multe ori de a doua sau chiar a treia serie de analize
după câteva zile sau săptămâni când din nou se obţin rezultate generaliste.
Dar mai nou, datorită aplicaţiilor care s-au dezvoltat, evoluţia bolilor poate
fi anticipată prin simulări. Astfel de procedură medicală implică un număr
de paşi (Figura 2.1).
Prin natura sa, nu se poate trage nicio concluzie ı̂n legătură cu compor-
tamentul dinamic al sistemului fiziologic. A extinde investigaţia medicală
ı̂n mediul fiziologic este, din punct de vedere al timpului medical, princi-
palul scop al biomedicinei sau, din altă perspectivă a timpului, este cumu-
lul analizelor medicale. Prin această abordare se poate obţine o mai bună
ı̂nţelegere ı̂n ceea ce priveşte controlul sistemului fiziologic. Diagnosticurile

7
Figura 2.1: Paşii urmaţi de o procedură medicală

pot fi ı̂mbunătăţite prin o mai bună ı̂nţelegere a acestui sistem.

2.1 Monitorizarea şi ı̂nregitrarea testelor medicale


În timpul ultimelor decenii evaluarea şi monitorizarea testelor medicale a
devenit esenţială ı̂n multe zone ale serviciului medical modern. Asta reflectă
recunoşterea importanţei controlului sistemului fiziologic. Cel mai cunoscut
caz ı̂n ceea ce priveşte monitorizarea ı̂n biomedicină este electrocardiografia
(ECG). ECG-ul are cu siguranţă cel mai vechi statut din istoria monitorizării
şi ı̂nregitrării ı̂n biomedicină pentru că este un semnal intens (amplitudine
aproape de 1mV) dar şi foarte robust.
Electrocardiografia poate fi folosită ı̂n scopul de a obţine un diagnostic
ı̂n cabinetul unui medic generalist cu dispozitive relativ simple şi necostisi-
toare. Poate ı̂nregistra ı̂ntre 6 şi 12 semnale (linii pe achiziţie de date) astfel
cardiologul poate oferi un diagnistic mai precis ı̂n cazul bolnavilor ce suferă
datorită problemelor de inima(de exemplu: semne de ischemie sau atac de
cord). Acestă analiză este privită ca o investigaţie funcţională ce reprezintă
un anumit pas (punct) din şirul lung de investigaţii medicale. În plus, acest
pas din şirul lung de investigaţii bazat pe ECG, poate fi ı̂nregistrat şi pe
perioade mai lungi de timp (ex : 24 ore) pentru a detecta şi, poate, pentru
a explica aritmiile. Perioada de 24 de ore este de obicei aleasă pentru a se
obţine informaţii in legătură cu schimbările circadiene sau schimbările din
timpul somnului faţă de cele din timpul zilei. Unele probleme cardiace pot
interveni doar ı̂n timpul somnului.
Într-o altă categorie complet diferită de investigaţii ECG-ul, aparatul
care monitorizează semnele vitale poate fi folosit ı̂n sala de operaţii sau când
pacientul se află sub anestezie fiind considerat ca cel mai important aparat
ce prezintă starea pacientului şi ghidează medicul. În acest caz monitor-
izarea continuă şi alarmarea medicului este foarte importantă. Diagnosticul
imediat relatat de ECG nu este ı̂nregistrat permanent, acest lucru nefiind
absolut necesar.

8
Figura 2.2: Determinarea complexului QRS

Înregistrarea analizelor biomedicale nu se rezumă doar la ECG (figura


2.2). Mai sunt incluse şi măsurarea tensiunii arteriale, respiraţia, presiunea
pulmonară şi saturaţia de oxigen. În general, biosemnalele derivă fie din
surse electrice cu surse apropiate (nervi, muşchi) fie din traductoare specifice
(presiune, debit, tensiune), care pot fi simple (elemente piezo-electrice) sau,
mai degrabă, semnale sofisticate ale unor sisteme de prelucrare (saturaţie ı̂n
oxigen).
Biosemnalele pot fi monitorizate ı̂n medii dificile, cum este cazul ter-
apiei intensive, sau pot fi ı̂nregistrate (stocată pentru o analiză ulterioară)
ı̂n scopul unei diagnosticări. Aparatura care captează biosemnalele a evoluat
mult ı̂n ultimii ani, astfel ı̂nregistrările digitale au o mai bună calitate şi nu
mai trebuiesc prelucrate ulterior. Aceste ı̂nregistrări se folosesc de regulă
pentru a se obţine un diagnstic ı̂n cardiologie (ECG, tensiunii arteriale)
şi ı̂n neurologie / neurofiziologie (EEG, EMG). Anumite cazuri vor nece-
sita ı̂nregistrarea mai multor biosemnale de la mai multe aparate ı̂n acelaşi
timp(creier, inimă, circulaţie, respiraţie). O astfel de monitorizare este
prezentată ı̂n figura 2.3. Înregistrarea biosemnalelor se poate realiza de
către un asistent, nefiind necesară prezenţa unui medic. Multitudinea de
semnale este stocată sau, după caz, transmisă la un centru care va prelucra
şi va analiza toate datele
Biosemnalele necesită interpretarea atentă a experţilor ı̂n domeniile speci-
fice ale medicinei. Prin urmare adnotările şi experţii ce interpretează rezul-
tatele sunt la fel de importanţi ca şi datele digitale ı̂n sine. Numai prin eval-
uarea adnotărilor poate un utilizator uman sau un algoritm să ı̂nţeleagă şi

9
Figura 2.3: Centru de control/ stocare/ transmitere date medicale

să reproducă semnele specifice. Prin urmare, adnotările şi evaluările vizuale
ale experţilor pot fi considerate cheia pentru următorii paşi ai investigaţiei.
Mai ales ı̂n situaţiile mai grele cum ar fi ı̂n cazul terapiei intensive, ar fi
imposibil de interpretat fără adnotările explicative cu privire la condiţiile de
ı̂nregistrare şi intervenţiile medicale efectuate.

2.2 Achiziţie semnal


În primul rând atenţia va fi mai mare asupra tipului de semnal derivat.
Majoritatea semnalelor sunt de origine electrofiziologică şi sunt electrice prin
natură (de exemplu, ECG, EEG). Aceste semnale au nevoie de amplificare
atentă şi filtrare pentru a le obţine cu un maxim de acurateţe. Alte semnale
au nevoie de traductoare care sunt mai apropiate de variabilele fiziologice
care urmează să fie studiate (debit, forţă, tensiune, mişcare, componente
biochimice). Traductoarele trebuie să aibă o rată mare a semnalului de
zgomot şi să fie eficiente din punct de vedere al consumului de energie.
Dacă este posibil, senzorii nu ar trebui să fie plasaţi ı̂n mod excesiv pe piele.
Acest aspect implică alegerea unor senzori cu multiple utilizări, dar ridică
şi problema sterilizării acestor senzori.

10
Toate semnalele vitale achiziţionate depind de setările amplificatorului
şi de filtrare. Acest lucru determină rata zgomotului alb pentru informaţiile
obti̧nute. În ciuda setărilor similare, semnalele ı̂nregistrate de echipamente
sunt de multe ori diferite. Acest lucru se datorează diferitelor modalităţi
de implementare a senzorilor, amplificatoarelor şi filtrelor de diferiţi pro-
ducători. Raportul semnal-zgomot ı̂n semnale de joasă tensiune, cum ar fi
undele cerebrale, este deosebit de sensibil la punerea ı̂n aplicare a amplifi-
catoarelor şi a circuitelor specifice alese. Prin urmare, datele rezultate sunt
adesea dependente de dispozitiv şi specificaţiile dispozitivului trebuie să fie
bine realizate.
De asemenea, este importantă modalitatea prin care sunt interpretate
semnalele de pe mai multe canale, sincronizarea semnalelor trebuie gândită
ı̂n amănunt atunci când se alege echipamentul de ı̂nregistrare (sau chiar con-
vertoarele analog-digitale) utilizat ı̂n ı̂ntreag studiu. Sincronizare ı̂ntre sem-
nale devine o problemă serioasă atunci când sunt ı̂nregistrate date diferite
utilizând dispozitive diferite cu ceasuri diferite. Asta se ı̂ntamplă ı̂n cazul
ı̂nregistrării de lungă durată a ECG-ului şi ı̂n cazul ı̂nregistrării pe termen
lung a presiunii arteriale. În cazul terapiei intensive este foarte frecventă
ı̂nregistrarea datelor cu dispozitive diferite. Pe lăngă monitorizarea sem-
nelor vitale mai poate exista ventilator, pompe de perfuzie şi un sistem
al managementului lichidelor. Pentru o evaluare corectă trebuie asigurată
pornirea ı̂n acelaşi moment a tuturor dispozitivelor şi corectarea unei erori
de timp a vreunui dispozitiv. Diferenţa de aproximativ un minut pentru
o perioadă de 24 de ore este des ı̂ntâlnită. Pentru serviciul medical nor-
mal acest timp nu este important dar pentru studiile ştiinţifice este foarte
important.
Rata de eşanţionare trebuie aleasă ı̂n aşa fel ı̂ncât semnalele să fie re-
produse cu o calitate suficient de bună astfel ı̂ncât analiza semnalelor să nu
ducă la un rezultat eronat. Aceste atribute sunt specifice terapiei intensive,
cardiologiei şi neurologiei şi sunt prezentate ı̂n tabelul 2.1. Rezoluţia digi-
tală este strâns legată de precizia de măsurare a instrumentelor folosite.
Trebuie să se ia ı̂n considerare faptul că senzorul şi caracteristicile speci-
fice ale traductorului sunt foarte importante ı̂n ı̂nregistrarea respiraţiei ı̂n
cazul ı̂n care se face o analiză ulterioară. Cele mai des ı̂ntâlnite metode con-
stau ı̂n măsurarea cantităţii aerului şi a presiunii esofagiene datorate efor-
tului respirator. Ambele metode provoacă disconfort pacientului şi pentru
ı̂nregistrările de lungă durată sunt preferate metode mai puţin sâcâitoare
şi obositoare. Pentru ı̂nregistrările mişcărilor respiratorii, traductoarelor
piezoelectrice, centurile pneumatice şi traductoare de impedanţă sunt uti-
lizate ca alternative. Undele care rezultă au caracteristici ale semnalelor
complet diferite aşa ı̂ncât nu poate fi realizată o analiză uniformă a respiraţiei.
Pentru fluxul aerului respirat se foloseşte alt tip de termistori, termocupluri
şi senzori pentru presiunea nazală. Senzori de presiune furnizează un sem-
nal care are o relaţie de ordin doi cu fluxul actual al respiraţiei. Acest lucru

11
funcţia semnal frecvenţa rezultatul digi-
ı̂ndeplinită sem- tal
nalului
neurofiziologie electroencefalogramă 200 Hz 0.5 µV /bit
electroniogramă 200 Hz 0.2 µV /bit
aparatul respiraţie nazală 25 Hz -
respirator presiunea esofagiană 100 Hz 0.5 mmHg/bit
saturaţia de oxigen 1 Hz 1%/bit
transcutanarea 1 Hz 0.5 mmHg/bit
sunetul pulmonar 5000 -
Hz
aparatul ECG 250 Hz 10 µV /bit
cardiovascular ritmul cardiac 4 Hz 1 bpm
presiunea sângelui 100 Hz 1 mmHg/bit
aparatura temperatura corpului 1 Hz 0.1o C/bit
auxiliară poziţia corpului 1 Hz -
pH esofagului 1 Hz 0.1 pH/bit

Tabelul 2.1: Tabelul ilustrează câteva dimensiuni ale celor mai importante sem-
nale din acest domeniu.

trebuie corectat ı̂nainte de analiza ulterioară. Ulterior, diferenţele dintre


formele de undă care rezultă sunt mai mici decât diferenţele constatate de
semnale respiratorii colectate .
Pentru dispozitivele ce măsoară saturaţia de oxigen sunt folosite dispos-
itive oximetrice de la diferiţi producători. Oximetrii pulsului folosesc setări
diferite pentru diferitele variaţii ale pulsului şi algoritme diferite când cal-
culează saturaţia de oxigen, bazate pe transmiterea sau reflectarea luminii ı̂n
mai multe lungimi de undă. Semnalul final ı̂nregistrat nu este semnalul brut
folosit de oximetru ci rezultatul unui algoritm care procesează informaţia şi
va fi folosit ca o experienţă ulterioară.

2.3 Algoritmi de procesare a semnalelor


Aplicarea metodelor de procesare a semnalelor şi dezvoltarea unor noi meto-
de este principalul scop al ı̂nregistrării şi evaluării ı̂n biomedicină. Metodele
de procesare a semnalelor au fost dezvoltate pentru a observa ritmul car-
diac prin ECG, pentru a detecta şi a clasifica aritmii şi pentru a obţine
mai mult informaţii despre respiraţie, efort fizic si psihic. Procesarea sem-
nalelor poate ajuta la stabilirea unui diagnostic sau poate ajuta la simpli-
ficarea monitorizării pacientului ı̂n timpul anesteziei dând alarme ı̂n cazul
unor anomalii ale undelor ECG-ului sau ale bătăilor inimii ca rezultat al
unor analize ı̂n timp real. Monitorizarea ı̂n biomedicină este, prin urmare,

12
aplicarea metodelor dezvoltate pentru a analiza seriile de timp, a procesării
semnalelor ı̂n domeniul biologic şi , ı̂n special, ı̂n domeniul medical.
Detecţia complexului QRS este importantă pentru procesarea semnalu-
lui ECG: calcularea intervalului RR, definirea ferestrei de căutare pentru
detecţia undei P şi T, etc. Dintre toate componentele semnalului ECG,
complexul QRS, datorită formei, este cel mai uşor de recunoscut (amplitu-
dine şi pantă mare). Obiectivul detecţiei QRS este acela de a determina
ı̂nceputul(onset) şi sfârsitul(offset) complexului QRS. Dificultatea detecţiei
este crescută datorită prezenţei zgomotului ı̂n semnalul ECG, dar şi a carac-
teristicilor morfologice ale inimii pacientului, ı̂n momentul apariţiei complex-
ului QRS. De asemenea datorită bolilor care afectează ventriculele durata
complexului QRS poate varia. Toate aceste situaţii necesită tehnici robuste
pentru detecţia complexului care să poată face faţă unor situaţii din cele
mai neobişnuite.
Se aplică noi algoritmi derivaţi din statisticile fizice pentru a detecta şi a
caracteriza procesele non-lineare ce stau la baza variaţiilor fiziologice. ECG-
ul reprezintă primul criteriu ı̂n procesarea biosemnalelor, astfel ı̂n continuare
sunt enumeraţi caţiva algoritmi de detecţie a complexului QRS:

• algoritmi bazaţi pe amplitudine şi prima derivată - Amplitude and


First Derivative (AF )

• algoritmi bazaţi pe prima derivată - First Derivative (FD)

• algoritmi bazaţi pe prima şi a doua derivată - First and Second Deriva-
tive (FS )

• algoritmi bazaţi pe filtre digitale - Digital Filters (DF ).

Cu toate că există multiple variante de abordări ı̂n detecţia QRS, metodele
bazate pe amplitudine şi prima derivată sunt cele mai folosite ı̂n aplicaţiile de
timp real sau ı̂n cele care procesează ı̂nregistrări de lungimi mare, deoarece
efortul de calcul este scăzut.

2.3.1 Algoritmi de detecţie bazaţi pe amplitudine şi prima


derivată
Algoritmii care se bazează pe acest tip de metodă au avantajul nesegmentării
datelor. Cu toate acestea s-a arătat ı̂ntr-un studiu comparativ al metodelor
de calcul ı̂n timp real că diminuarea timpilor de calcul provoacă creşterea
erorii de detecţie [12]. Această metoda este o adaptare a algoritmului propus
de către Moriet-Mahoudeaux.
Fie X = (X[0], X[1], . . . , X[n]) un şir de elemente, unde n este lungimea
ı̂nregistrarii ECG. O valoare prag este calculată ca fiind o parte a celei mai
mari valori pozitive a şirului de elemente X.

13
A = 0.3 × max {X[i]} , i = 1...n (2.1)
Pe baza acestui şir X, se calculează prima derivată ı̂n fiecare punct al vec-
torului de elemente

Y [i] = X[i + 1] − X[i − 1], i = 2 . . . n − 1,


Y [1] = Y [n] = 0 (2.2)

Un candidat QRS apare atunci când trei valori consecutive ale primei derivate
a vectorului X, depăşesc o valoare prag pozitivă (pantă crescatoare), şi sunt
urmate ı̂n urmatoarele 100ms de doua valori consecutive care depăsesc o
valoare prag negativă (pantă descrescătoare). De asemenea toate valorile
din semnalul X care corespund valorilor vectorului Y care aparţin inter-
valului dintre panta crescatoare şi sfârşitul pantei descrescâtoare trebuie să
depăsească o valoare prag.

Y [i], Y [i + 1], Y [i + 2] > 0.5 (2.3)

si
Y [j], Y [j − 1] < −0.3, i + 2 < j < i + 25 (2.4)
X[i], X[i + 1], . . . , X[j] > A (2.5)
Un al doilea algoritm prezentat ı̂n acest subcapitol este o adaptare a algorit-
mului propus de către Fraden si Neuman. Ca şi ı̂n cazul primului algoritm, se
calculează o amplitudine prag ca o fracţie din valoarea maximă a vectorului
X.
A = 0.4 ∗ max {X[i]} , i = 1...n (2.6)
Pentru acest algoritm s-a propus rectificarea vectorului X astfel:
(
X[i], dacă X[i] ≥ 0
Y0 [i] = , i = 1...n (2.7)
−X[i], dacă X[i] > 0

Semnalul rectificat este procesat ı̂n continuare astfel:


(
Y0 [i], dacă X[i] ≥ 0
Y1 [i] = , i = 1...n (2.8)
A, dacă X[i] > 0

Se calculeaza prima derivată a semnalului Y1 :

Y2 [i] = Y1 [i + 1] − Y1 [i − 1], i = 2 . . . n − 1,
Y2 [0] = Y2 [n] = 0 (2.9)

Un candidat QRS apare atunci când o valoare din vectorul Y2 depăşeşte o


valoare prag constantă, Y2 [i] > 0.7, i = 1 . . . n. Un al treilea şi ultimul

14
algoritm care se bazează pe amplitudine şi prima derivată se bazează pe
algoritmul propus de Gustafson:

Y [i] = X[i + 1] − X[i − 1], i = 2 . . . n − 1,


Y [0] = Y [n] = 0 (2.10)

În prima derivată, Y, se caută valorile care depăsesc o valoare constantă


aleasă ı̂n urma etapei de acordare a algoritmului:

Y [i] ≥ 0.15, i = 1...n (2.11)

În momentul ı̂n care s-a găsit o valoare care să satisfacă condiţia de mai sus,
se verifică dacă şi următoarele 3 valori depăşesc aceeaşi amplitudine prag:

Y [j] ≥ 0.15, j = i + 1...i + 3 (2.12)

Dacă cele doua condiţii de mai sus sunt ı̂ndeplinite, valoarea poate fi con-
siderată un candidat QRS dacă următoarele două puncte respectă relaţiile
de mai jos:
Y [i + 1]X[i + 1] > 0 (2.13)
Y [i + 2]X[i + 2] > 0 (2.14)
Testarea primului algoritm se face cu semnalul No. 100 pentru a vedea
performanţele algoritmului ı̂n condiţii lipsite de zgomot. În figura de mai
jos sunt prezente ı̂n primul grafic semnalul ECG folosit pentru simulare,
al doilea grafic reprezintă prima derivată, iar cel de-al treilea grafic oferă
o vizualizare a performanţei algoritmului. Linia neagră, din partea de
jos, descrie poziţia complexului validat prelevat din fişierul descarcat din
baza de date PhysioBank, MIT-BIH Arrhythmia Database. Liniile punc-
tate reprezintă valorile maxim admisibile ale complexului QRS corect de-
tectat. Toate complexurile detectate ı̂n afara acestor intervale reprezintă
detecţii fals pozitive. Dacă ı̂ntre două linii punctate succesiv nu există o
line albastră şi există una neagra, atunci avem de-a face cu o detecţie fals
negativă ( atunci când candidatul QRS se află ı̂n afara intervalului dintre
complexul QRS valid şi 88ms ı̂nainte sau după acesta).

15
Figura 2.4: Rezultatele aplicării primului algoritm pentru un semnal ECG

Pentru a stabili performanţele unui electrocardiograf care are imple-


mentat un astfel de algoritm trebuie să mai adăugăm semnalul de test şi
perturbaţii datorate contracţiilor musculare, putând avea un efect nedorit
asupra rezultatelor obţinute, datorită frecvenţelor mari pe care le conţin. S-
a observat că pentru valori de până la 30-40% rezultatele sunt satisfăcătoare,
dacă se creşte peste aceste valori, performanţele se degradează rapid.

Figura 2.5: Rezultatele aplicării primului algoritm pentru un semnal ECG per-
turbat de zgomot

2.4 Compresia semnalelor biomedicale


Metoda propusă, pentru compresia datelor, este bazată pe o modelare para-
metrică a versiunii transformate a semnalului. Aplicând acest principiu

16
parametrilor modelului şi şirurilor de date vom obţine o rată de compre-
sie care este mult ı̂mbunătăţită faţă de majoritatea metodelor existente
AZTEC (Amplitude Zone Time Epoch Coding), CORTES (Coordinate Re-
duction Time Encoding System) sau SAPA (Scan-Along Polygonal Approx-
imation). Principala problemă o ı̂ntâlnită la compresia datelor este mode-
larea amplitudinilor de ı̂naltă şi joasă frecvenţă care va afecta eroarea globală
a criteriului de minimizare a algoritmului. Pentru eficientizarea se separă
regiunea de ı̂naltă amplitudine şi joasă frecvenţă (HALF) şi amplitudine
joasă şi frecvenţă ı̂nalta (LAHF) a semnalului transformat.
Paşii urmaţi de algoritmul propus:

a. etapa de transformare

b. modelare

c. cuantizare

d. recontrucţie.

Figura 2.6: Modelarea şi discretizarea semnalului de intrare ECG

a. Etapa de transformare
Transformata cosinus discretă DCT (Discrete Cosine Transform) a unei
secvenţe date, cu N eşantioane este calculat ca:
−1
1 NX
r
S(0) = s(n) (2.15)
N n=0

17
−1
2 NX
r
(2n + 1)kπ
 
S(k) = s(n) × cos (2.16)
N n=0 2N

,unde S(k) = 0, 1 . . . (N − 1) este secvenţa de ı̂nceput s(n) a semnalului


transformat DCT.

b. Modelare Transformata semnalului S(k) este ı̂mpărţită ı̂n doua secvenţe,


secvenţa HALF, SHALF (k) şi secvenţa LAHF, SLAHF (k). Aceste doua
secvenţe sunt aproximate ca un răspuns la impuls a modelului necunoscut
SHALF (z) şi SLAHF (z).

1 + B1 z −1 + . . . + Bp z −p
SHALF (z) = B0 (2.17)
1 + A1 z −1 + . . . + Ap z −p
, unde B0 este câstigul şi p este ordinul de eşantionare a modelului HALF.

1 + D1 z −1 + . . . + Sp z −p
SLAHF (z) = D0 (2.18)
1 + C1 z −1 + . . . + Cp z −p
unde D0 este câştigul şi q este ordinul de eşantionare a modelului LAHF.
Parametri B0 , B1 , . . . , Bp , A0 , A1 , . . . , Ap , D0 , D1 , . . . , Dp şi C0 , C1 , . . .
, Cp ai modelului SHALF (z) şi SLAHF (z) sunt estimaţi folosind metoda SM
(Steiglitz - McBride).

Criteriul pentru ı̂mpărţirea transformatei DCT


Fie :
SHALF (k) = S(k), k = 0, . . . , m
SLAHF (k) = S(k), k = m + 1, . . . , N − 1
Am gasit empiric că urmatorul creiteriu furnizează rezultate satisfăcătoare.
Alegem cea mai mică valoare m pentru care:

max(|SLAHF (k)|) ≈ 0.1 × max(|SHALF (k)|) (2.19)

O eroare ı̂n estimarea a lui m de până la 20 eşantioane poate fi tolerata.

c. Cuantizarea
Parametrii modelului Ai , Bi , Ci şi Di sunt foarte sensibili la cuantizare putând
da erori. Chiar şi cele mai mici cuantizări ale erorilor ı̂n aceşti parametrii
conduc la foarte mari schimbări a raspunsului ı̂n impuls şi de aici reconsti-
tuirea se realizeaza ı̂n ecuaţiile (2.14) şi (2.15) factorizate pentru a obţine
rădăcinile lor.
În concluzie, câstigul este deasemenea cuantizat şi stocat. Polii şi zer-
ourile se găsesc ı̂n perechi complex conjugate, deci numai o jumătate din ele
necesită a fi stocate. Pentru o reconstrucţie fidelă a formei de undă ECG,
numărul biţilor ceruţi pentru a fi stocate informatiile: zeroul, polul, câstigul
HALF şi LAHF, sunt 24, 22, 14, şi 7 respectiv.

18
d. Reconstrucţie
Diagrama bloc a procesului reconstituit este arătată ı̂n figura 2.7. Răspunsul
la impuls al reconstituirii modelului LAHF este adăugat pentru reconsti-
tuirea modelului HALF. IDCT-ul acestei secvenţe adŭgate ne dau reconsti-
tuirea ECG.

Figura 2.7: Reconstruirea semnalului ECG

Rezultate Pentru a testa eficienţa algoritmului s-a utilizat o ı̂nregistrare


de 10 secunde, având rata de 500 de eşantioane pe secundă, fiecare eşantion
având rezoluţia de 12 biţi .

CAZ I.
În figura 2.8a este prezentat un interval PT al semnalului ECG. Reconsti-
tuirea obţinut prin modelare DCT se poate vedea ı̂n figura 2.8b. În figura
2.8c se vede reconstrucţia intervalului RR obţinut ı̂n urma aplicării algorit-
mului HALF/LAHF. Eroarea este de 3.83%.

19
Figura 2.8: (a) Semnal original , (b) Semnal reconstruit prin metoda DCT ,
(c) Semnal recontruit prin metoda HALF / LAHF

CAZ II.
În acest caz am folosit 4 eşantioane a unui semnal ECG, figura 2.9, şi am
obţinut o eroare de 5,95%, pentru semnalul reconstruit.

Figura 2.9: Semnal format din 4 esantioane recontruit prin metoda HALF /
LAHF

Criteriul folosit pentru evaluarea performanţei algoritmului


Calitatea transmisiei pe Internet a fost evaluată folosind ca parametru obiec-
tiv PRD (percentage root mean square difference suma pătratică medie

20
procentuala), care evaluează distorsiunile semnalului ECG reconstruit:
v
u PN −1
u [s(n) − se(n)]2
P RD = t n=1PN −1 × 100 (2.20)
n=1 s(n)

, unde x(n) este semnalul original, iar x


e(n) este semnalul reconstruit.

21
Capitolul 3

Transmisia datelor

Serviciile medicale şi aplicaţii folosite ı̂n medicină (cum ar fi telemedic-


ina) necesită metode diversificate de acces la diferite resurse ale tehnolo-
giei informaţiei. Acestea ar putea fi baze de date medicale sau site-uri,
ca exemple ale tehnologiilor existente pot enumera camerele video, micro-
foanele, monitoare de ı̂naltă rezoluţie sau alte dispozitive cu fir sau fără fir,
care ajută la monitorizarea şi recuperarea sănătăţii pacientului. În acest
capitol voi prezenta o gamă largă de tehnici de acces care pot fi folosite ı̂n
telemedicină, atât de către medici cât şi de către pacienţi. Practic accesul
este efectuat folosind internetul, dar mai există şi multe alte tehnici care pot
fi aplicate.

3.1 Prezentarea generală a sistemului de


telecomunicaţii
Principalele condiţii impuse de instituţiile medicale atunci când vine vorba
despre schimbul de informaţii, sunt difuzarea şi teleconsultaţiile ı̂ntre diferiţi
utilizatori.
Diferitele opţiuni de acces sunt posibile cu ajutorul dat de companiile de
telecomunicaţii care dispun de o planşă largă de tehnologii precum: reţele de
bandă largă (broadband), reţele de bandă medie (ISDN) sau reţele de bandă
ı̂ngustă cum ar fi liniile telefonice cu comutaţie (GSM, GPRS). S-a constatat
că intensitatea fluxurilor de date de intrare şi de ieşire poate varia de la 10
Mbps la câţiva zeci de Kbps, astfel ı̂ncât, orice utilizatori care accesează o
bază de date medicală prin conexiunile ı̂n bandă ı̂ngustă să poată avea acces.
În plus, tendinţa globală este de a avea acces prin intermediul reţelelor fără
fir astfel utilizatorul va dispune de o mobilitate maximă .O structură de
reţea tipică este prezentată ı̂n figura 3.1.
În cazul ı̂n care o instituţie are mai multe linii si deţine şi intranet de
mare viteză (cum ar fi LAN), aceasta poate fi configurată ca servar. Această
tehnică este adesea folosită, deoarece există multe astfel de reţele şi există

22
Figura 3.1: Arhitectura reţea-internet ı̂n telemedicină

şi mai multe dispozitive de tip IP. Din acest motiv, această metodă este
relativ necostisitoare, astfel ı̂ncât aproape orice spital sau clinică poate de-
cide să se conecteze la Internet. Securizarea şi integritatea ı̂n cadrul reţelele
poate fi realizată prin instalarea de firewall-uri, dispozitive speciale care fil-
trează accesul dupa anumite criterii, sau crearea de aplicaţii specializate
care criptează datele.
În ţările ı̂n curs de dezvoltare nu multe spitale sau clinici ı̂şi pot permite
o conexiune permanentă la Internet sau Intranet. Dar totuşi pentru a avea
eficienţa dorită este nevoie de o conexiune bună la internet. Acesta este
motivul pentru care folosirea conexiunii ISDN pare a fi o soluţie de com-
promis: rata de transmisie bună, conexiune permanentă şi preţuri relativ
scăzute. Există mai multe tehnici diferite utilizate pentru a accesa resursele
medicale, precum:
• reţele de telefonie diginala PSTN (Public Switched Telephone Network
• reţele ISDN (Integrated Services Digital Network )
• reţele WAN/LAN (Wide Area Network / Local Area Network )
• linii ı̂nchiriate
• linii xDSL (Digital Subscriber Line)
• reţele telefonice GSM,UMTS (Groupe Spcial Mobile, Universal Mobile
Telecommunications System)
• dispozitive Bluetooth, ZigBee

23
• comunicaţii satelit

Unele dintre criteriile pentru a decide dacă tehnica de acces este impor-
tantă sau nu, sunt legate de costul, disponibilitate şi de securitatea servici-
ului. Dacă costul de acces este prea mare pentru instituţie, aceasta nu va
putea să-şi permită să folosească un astfel de serviciu. Din acest motiv, un-
ele dintre tehnicile de mai sus deşi sunt eficiente nu au susţinerea materială
pentru a fi utilizate ı̂n prezent. În următoarele paragrafe voi descrie câteva
tehnici care pot fi implementate cu succes ı̂n domeniul telemedicinei.

3.1.1 Reţele PSTN


Public Switched Telephone Network , reprezintă reţea de telefonie bazată pe
comutare de circuite (ciruit-switched telephone network), ı̂n acelaşi fel ı̂n care
Internet-ul face schimbul de pachete prin intermediul protocolului TCP/IP.
La ı̂nceput o reţea de linii analogice, ı̂n prezent PSTN este aproape integral
digitală şi include atât telefoane mobile cât şi telefoane fixe. Această metodă
este una care necesită o investiţie minimă dar are un mare dezavantaj, rata
maximă de transfer este de 56 Kbps, dar ı̂n realitate aceasta este ı̂n jur de
40 Kbps. O astfel de soluţie nu este validă ı̂n cazul de faţă deoarece nu oferă
o siguranţă sporită şi nici nu asigură o viteză mare de transfer a datelor,
care este necesară ı̂n acest domeniu.

3.1.2 Reţele ISDN


Această tehnologie a fost proiectată să permită transmisia de voce şi de date
printr-un cablu de cupru, rezultând o ı̂mbunătăţire dramatică a calităţii şi a
vitezei, ı̂n comparatie cu sistemele analogice existente. ISDN este un set de
protocoale folosite pentru stabilirea şi ı̂ntreruperea conexiunilor telefonice,
cât şi pentru funcţionalităţi complexe pentru utilizatorul serviciului tele-
fonic.
Doua tipuri de conexiuni au fost definite ı̂n cadrul acestui serviciu:

• basic rate interface (BRI) - constă ı̂n doua canale de tip B, fiecare cu
o banda de 64 Kbps, şi un canal D cu o bandă de 16 Kbps. Împreună
aceste trei canale pot fi descrise de notaţia 2B+D

• primary rate interface (PRI) - au un număr mai mare de canale de tip


B precum şi un canal D cu o lăţime a benzii de 64 Kbps. Numărul de
canale B dintr-un PRI variază de la ţară la alta, de exemplu, ı̂n Europa
şi Australia numărul de canale este de 30B+1D, având o bandă totală
de 2.048 Mbps.

Folosind tehnica codării cu marcarea inversărilor, datele apelului telefonic


se transmit pe canale de tip (B), iar canalele de tip (D) sunt folosite pentru
stabilirea apelului şi administrarea legăturii create. După ce o comunicaţie

24
a fost stabilită, ı̂ntre cele doua părţi există o legătură sincronă bidirecţională
de 64 Kbps care este menţinută până la terminarea transmisiei. Numărul
apelurilor simultane este direct proporţional cu numărul canalelor de date.

3.1.3 Reţele TCP/IP


Unele unităţi medicale pot realiza accesul la internet folosind o reţea de cal-
culatoare. Avantajul utilizării unei astfel de conexiuni este larga răspândire
a reţelelor de acest tip, costurile de conectare şi de mentenanţă sunt foarte
mici, astfel orice unitate medicală ı̂şi va permite să achiziţioneze un servici
de tip Internet. Acest mod de conectare este foarte indicat dar există şi un
risc destul de ridicat ca reţeau să fie penetrată. Din acest motiv sistemul
de securitatea a datelor trebuie să fie principală grijă. Acest lucru poate
fi realizat prin instalarea de firewall-uri, dispozitive speciale, implementate
pentru restricţionarea şi codificarea informaţiilor. Se pare că cea mai bună
soluţie pentru a putea securiza reţeaua unităţilor medicale este folosirea IP
speciale care nu pot fi accesate decât de anumite clase de IP-uri.
Dar spitatele au nevoie şi de conexiuni WAN, pentru a asigura conexiune
la internet ı̂ntr-o anumită zonă. Dacă reţeau va fi prea mare şi la ea vor
avea mulţi doctori acces, cu siguranţă vor apărea probleme de integritate
a datelor. O soluţie plauzibilă ar fi crearea unei camere speciale ı̂n care
medicii să aibă acces la toată baza de date şi de unde să poată să coordoneze,
dacă este cazul, alte puncte de lucru. Acest loc trebuie amplasat cât mai
aproape de server, astfel doctorii să poată dispune de calitate maximă ı̂n
transmiterea şi achiziţionarea datelor, care este o necesitate primordială ı̂n
teleconsultaţii. Pe de altă parte, crearea unui singur loc ı̂n care se vor
stocarea datele, păstrează o mai mare siguranţă asupra integrităţii acestora.

3.1.4 Reţele prin fibră optică


Fibra optică poate fi utilizată ca mediu de telecomunicaţii şi reţele deoarece
este flexibilă şi poate fi strânsă i̧n cabluri. Este deosebit de avantajoasă
pentru comunicaţii pe distanţe mari, deoarece lumina se propagă prin fi-
bra cu atenuare mică ı̂n comparaţie cu cablurile electrice. Aceasta permite
acoperirea de distanţe mari cu doar câteva repetoare. În plus, semnalele lu-
minoase propagate ı̂n fibră pe fiecare canal pot fi modulate la viteze de până
la 111 Gbps. Fiecare fibră poate transmite mai multe canale independente,
fiecare folosind o altă lungime de undă a luminii.
Pe distanţe scurte, cum ar fi reţeaua unei clădiri, fibra optică economiseşte
spaţiu ı̂n conductele de cablu deoarece o singură fibră poate transporta
mai multe date decât un singur cablu electric. Fibra este imună şi la
interferenţele electrice, nu culege zgomote electromagnetice din mediu.
Prin urmare, securitatea este puţin mai mare, ı̂n cazul acesta, atunci
când vorbim de conectarea ı̂ntre o unitate sanitară şi centrul bazei de date.

25
Conexiunea punct-la-punct PPPoE, client-server, este ı̂n momentul de faţă
conexiunea cea mai sigură, utilizatorul trebuind să se autentifice, pentru a
putea accesa baza de date. Accesul se realizează centralizat, fapt ce duce la
un control eficient al traficului, nepermiţând scurgerea de date. O astfel de
conexiune se dovedeşte a fi greu de penetrat.

3.1.5 Reţele xDSL


Tehnologia DSL este o tehnologie de transmisie utilizând cabluri de cupru,
care aduce informaţia din banda largă la staţiile de lucru cu ajutorul sis-
temului telefonic. Clasa de protocoale xDSL se referă generic la mai multe
protocoale de tip DSL cum ar fi ADSL, HDSL, RADSL, SDSL etc. Conex-
iunea DSL oferă teoretic 8.448 Mbps, dar de cele mai multe ori conexiunile
individuale oferă o viteză ı̂ncepând de la 512 Kb şi până la 1544 Mbps
download şi 128 Kbps upload.
Deoarece tehnologia DSL oferă o creştere dramatică de viteză ı̂n comparaţie
cu alte tehnologii, puterea reală a serviciilor bazate pe tehnologie DSL constă
ı̂n oportunităţi conduse de aplicaţii multimedia necesare utilizatorilor actuali
ai reţelei.
Unul din cele mai importante avantaje ale tehnologiei DSL este acela
că permite providerilor de reţea Network Service Provider (NSP) şi utiliza-
torilor deserviţi avantaj deplin al infrastructurii existente. Protocoalele de
nivel 2 şi 3 OSI (cum ar fi Frame Relay, ATM şi IP) şi serviciile fiabile de
reţea au devenit de ı̂ncredere. Suportând tipuri multiple de servicii pe o
singură platformă oferă o importantă protecţie a investiţiilor. Tehnologia
DSL include ambele servicii bazate pe pachete şi celule ca şi ATM, Frame
Relay şi IP, cât şi servicii canalizate sincron.
Următoarea generaţie, arhitectura DSLAM (Digital Subscriber Line Ac-
cess Multiplexer ) care suportă servicii multiple, tehnologie şi transport,
asigură ca investiţiile ı̂n infrastructura existentă să rămână protejate. DSL
poate garanta securitatea unitătilor sanitare, astfel acest serviciu va juca un
rol important ı̂n alegerea unei resurse de internet.

3.2 Utilizarea reţelelor fără fir


Reţeaua făru fir este cea mai noua tehnologie dar şi cea mai dinamică din
domeniul comunicaţiilor. Această tehnologie va fi cea mai răspândită ı̂n
următorii câţiva ani. Dar nu trebuie să uităm că implementarea unui astfel
de mediu ı̂n sistemul sanitar este foarte dificil de realizat de companiile
dezvoltatoare, acest lucru datorându-se reglementărilor foarte drastice care
se impun ı̂n acest caz. Există multe aspecte tehnice care trebuiesc urmărite,
precum : consumul de energie, fiabilitatea, interopabilitatea şi securitatea
care este cel mai important aspect. În momentul de faţă există trei noi

26
tehnologii care sunt ı̂n curs se dezvoltare şi care ar putea să rezolve unele
probleme de comunicare, aceste sunt ZigBee, UMTS şi LMDS.[14]

3.2.1 Bluetooth
Bluetooth-ul este un set de specificaţii bazate pe undele radio, pentru o reţea
wireless personală (PAN - personal area network). Bluetooth-ul creează
o cale prin care se poate face schimb de informaţii ı̂ntre aparate precum
telefoane mobile, laptop-uri, calculatoare personale, imprimante şi camere
video printr-o frecvenţa radio sigură şi de rază mică.
Aparatele bluetooth comunică ı̂ntre ele atunci când acestea se află ı̂n
aceeaşi rază de acţiune. Ele folosesc un sistem de comunicaţii radio aşa că
nu este nevoie să fie aliniate faţă ı̂n faţă pentru a transmite, pot fi chiar
ı̂n camere diferite dacă transmisia este suficient de puternică. Un master
poate utiliza ı̂n comun un canal cu până la 7 dispozitive ”slave” simultan
active, sau ı̂ncă 255 de dispozitive ”slave” dacă acestea sunt ı̂n modul inactiv,
reţeaua formată numindu-se piconet şi este ilustrată ı̂n figura 3.2. Acesta
este un mare avantaj, astfel pe maşina ambulanţei se poate amplasa un
master care va interacţiona cu toate dispozitivele tip ”slave” din interiorul
unitaţii mobile.

Figura 3.2: pico-reţea

În tehnologia Bluetooth, se utilizează o bandă de frecvenţe nelicenţiate


ISM (Industrial Scientific and Medical) ı̂ntre 2.402 GHz şi 2.480 GHz alo-
cată pentru domeniul industrial, ştiinţific, medical şi poate fi folosită astfel
aproape oriunde ı̂n lume. Banda este divizată ı̂n 79 de canale radio, fiecare
canal având o lărgime de bandă de 1 MHz. Deoarece ı̂n această bandă mai
operează şi alte tehnologii de comunicaţie, pentru eliminarea interferenţelor
radio, Bluetooth foloseşte tehnica de ı̂mprăştiere spectrală cu schimbare ı̂n
salturi de frecvenţă, această schimbare de frecvenţă producându-se de 1600
ori pe secundă. Fiecare dispozitiv având o gamă de alegere a 79 de frecvenţe
care se schimbă de 1600 ori pe secundă, fiind puţin probabil ca doua dispozi-
tive să fie pe aceeaşi frecvenţă ı̂n acelaşi moment, iar dacă totuşi interferenţa

27
are loc, ea durează doar o mică fracţiune de secundă.
O caracteristică de bază a tehnologiei Bluetooth este capabilitatea de a
transmite şi recepţiona simultan atât comunicaţiile vocale cât şi comunicaţiile
de date. Bluetooth utilizează simultan 3 canale vocale sincrone sau un canal
care suportă simultan transmisie vocală sincronă şi transmisie de date as-
incronă. Fiecare canal vocal suportă sincron 64 Kbps ı̂n fiecare sens. Un
canal de date asincron poate suporta maxim 723,2 Kbps ı̂n sens direct ı̂n
conexiune asimetrică sau 433,9 Kbps ı̂n conexiune simetrică.
Tehnologia Bluetooth, care nu oferă decât câţiva biţi pe secundă pe o
rază de 10 metri, este dezvoltată ı̂n special pe telefoane mobile şi headset-uri.
Dar de curând grupul industrial Bluetooth SIG a dezvoltat o nouă clasă care
asigură o distanţă mult mai mare, de 100 metri, şi o securitate sporită. Acest
pachet oferă securitate la nivelul conexiunii (prin autentificare şi criptarea
datelor) astfel putem spune că este o tehnologie care poate fi folosită cu
succes ı̂n transmisia de date din cadrul instituţiilor medicale.

3.2.2 ZigBee
ZigBee este un standard ce defineşte un set de protocoale de telecomunicaţii
pentru reţeaua wireless.Standardul ZigBee a fost dezvoltat pentru prima
dată de ZigBee Alliance, organizaţie ce are sute de companii membre. Această
organizaţie a fost fondată ı̂n anul 2002, ca o organizaţie non-profit, deschisă
oricărui doritor să se alăture.
Dispozitivele ce utilizeaza ZigBee operează ı̂n benzile de frecvenţă de
868Mhz, 915Mhz, şi 2,4Ghz. Rata maximă de date este de 250 Kbps. ZigBee
este folosit la aplicaţii ce au ca principale cerinţe rata mică de transfer, preţ
scăzut şi autonomie mare. În multe aplicaţii ZigBee, timpul total ı̂n care
dispozitivul wireless este activ ı̂n aplicaţie este limitat, dispozitivul petrece
mare parte a timpului ı̂n stand-by, cunoscut ca şi modul aşteptare (sleep).
Una dintre aplicaţiile acestei tehnologii este monitorizarea pacientului la
domiciliu [15]. Presiunea sângelui şi tensiunea unui pacient pot fi măsurate
cu dispozitive ce utilizează tehnologia ZigBee. După măsurare datele sunt
transmise wireless la un server local, de exemplu un calculator personal aflat
ı̂n casa pacientului, unde sunt procesate analizele. În final informaţia vitală
este transmisă, pentru analize, la unitatea sanitară prin internet.
Standardul ZigBee ajută la reducerea costurilor implementării prin sim-
plificarea protocoalelor de telecomunicaţii şi reducerea ratei de date. Timpul
de serviciu este perioada de timp ı̂n care dispozitivul este activ, faţă de tim-
pul total. De exemplu dacă un dispozitiv se activează la fiecare minut şi
rămâne activ pentru 60 ms, atunci timpul de serviciu al acestui dipozitiv
este 0.1%. În multe aplicaţii ZigBee, dispozitivele au timpul de serviciu mai
mic de 1% pentru a asigura o durată de viaţă a bateriei de câţiva ani.
ZigBee este un standard radio bine definit, cu caracteristici bogate.
Domeniul de aplicaţie este vast, şi este ideal ı̂n dezvoltarea tehnologiilor

28
ce necesită o rată de transfer scăzută. Unul dintre avantejele importante ale
acestuia ı̂l reprezintă numărul mare de noduri pe care ı̂l poate include ı̂ntr-o
reţea, până la 250. O aplicaţie realizată cu standardul ZigBee este de 2, 3
ori mai ieftină faţă de cea realizată cu Bluetooth. Alte avantaje importante
sunt reprezentate de gradul mare de operabilitate, un nivel de securitate
ridicat şi durata mare de viaţă a bateriei. Toate aceste avantaje ne duc la
concluzia că acest sistem are un raport preţ-calitate foarte bun.

3.2.3 GSM
Global System for Mobile communications, prescurtat GSM, este standardul
de telefonie mobilă cel mai răspândit din lume. Acest sistem este funcţional
ı̂ncepând cu anul 1991. Serviciile de telecomunicaţii oferite de sistemul GSM
se clasifică ı̂n doua categorii principale: servicii suport şi teleservicii. Ser-
viciile suport sunt utilizate la transmisia semnalelor ı̂ntre punctele de acces
ale reţelei, numite, ı̂n standardul GSM, interfeţe utilizator-reţea. Teleser-
viciile asigură cominicaţiile ı̂ntre utilizatori, ı̂n conformitate cu protocoalele
stabilite de operatorii de reţea.
Reţelele GSM operează ı̂n benzile de frecvenţă 890-915/935-960 MHz
prin intermediul a 124 canale radio duplex, fiecare cu o lărgime de bandă
de 200 KHz. Intervalul de frecvenţă dintre aceste doua benzi este de 45
MHz, care este şi lărgimea de bandă dintre frecvenţa de transmisie şi cea
de recepţie a unui terminal GSM (figura 3.3). Se foloseşte o tehnică nu-
mită Time Division Multiple Access (TDMA) pentru a ı̂mpărţi un canal
radio de 200 KHz ı̂n 8 sloturi de timp, fiecare dintre acestea constituind un
canal de semnal vocal separat. Avantajul tehnicii TDMA constă ı̂n reuti-
lizarea frecvenţelor ı̂ntr-o vecinătate apropiată cu o probabilitate mai mică
de interferenţă. Aceasta asigură o eficienţă mult mai mare şi permite de-
servirea mai multor utilizatori.

Figura 3.3: Retea GSM

29
Există trei servicii oferite de companiile care folosesc tehnologia GPS,
pentru a mări substanţial viteza de transmitere a datelor, acestea sunt:
High-Speed Circuit-Switched Data Service (HSCSD), General Packet Radio
Service (GPRS), şi Enhanced Data Rate for Global Evolution (EDGE).

HSCSD este o tehnologie ce permite creşterea substanţială a vitezei de


transfer a datelor ı̂n reţeaua GSM. Viteza de transfer obţinută poate fi de
până la 38,4 Kbps prin folosirea a 4 canale radio de 9,6 Kbps sau de până
la 57,6 Kbps prin utilizarea a 4 canale radio de 14,4 Kbps.
Cele mai importante aplicaţii care folosesc HSCSD sunt: acces inter-
net; acces e-mail; transfer de date FTP (File Transfer Protocol); telemetrie,
care cuprinde monitorizare trafic, controlul de la distanţă al echipamentelor.

GPRS General packet radio service este una dintre cele mai moderne tehno-
logii de transmisii de date care folosesc o adresare de tip IP (Internet Proto-
col). Serviciul GPRS a permis să se asigure: rate de transfer mari, conexiune
permanentă, robustă, suport pentru aplicaţiile de bandă largă şi mecanisme
de securitate.
Serviciul GPRS poate asigura o rată medie de transfer de 115K, dar
aceasta este obţinută doar prin folosirea tuturor celor opt canale tempo-
rale pentru GPRS. În mod curent, echipamentele terminale sunt configurate
pentru a folosi un anumit număr de canale temporale pentru fluxul de date
ascendent şi respectiv descentent. În condiţiile ı̂n care semnalul radio este
foarte bun, dacă se folosesc patru canale temporale pe sensul ascendent şi
unul pe cel descendent, se poate asigura o rată de 80Kbps pe calea descen-
dentă şi respectiv, 20 kbps pe calea ascendentă
Având ı̂n vedere folosirea de către tehnologia GPRS a tehnicii de co-
mutare de pachete, tehnica folosită şi ı̂n internet, la o rată de transfer su-
perioară faţă de soluţiile existente ı̂n GSM, noua tehnologie permite accesul
utilizatorilor la o gamă largă de aplicaţii bazate pe IP, iar rata de transfer
este undeva ı̂n jurul valorii de 172,1 Kbps.

EDGE Enhanced Data rates for Global Evolution este o tehnologie de


evoluţie a reţelei GSM/GPRS care este destinată să aducă o ı̂mbunătăţire
ı̂n calitatea serviciilor de date.Acest serviciu permite conexiuni de date de
trei ori mai rapide decat GPRS (215 Kbps) cu acceaşi clasa multislot.
În consecinţă, EDGE este o ı̂mbunătăţire adusă GPRS-ului şi nu poate
lucra ı̂n mod independent. În concluzie tehnologiile GPRS şi EDGE au per-
mis ca reţelele GSM să ofere utilizatorilor transmisiuni de date performante
care să asigure conectarea la internet cu toata gama de servicii asociate:
e-mail, transfer de fişiere, explorarea paginilor WEB etc, ı̂n condiţii com-
petitive.

30
3.2.4 UMTS
Universal Mobile Telecommunications System este o noua tehnologie de
comunicaţie pentru reţelele de telefonie mobilă care integreaza astăzi pa-
chete de voce s̆i date. Licenţele UMTS sunt deja acordate ı̂n majoritatea
ţărilor europene. Lansarea comercială a serviciului se aşteaptă a avea loc
ı̂n 2001, ı̂n momentul de faţă efectuându-se ı̂n ı̂ntreaga lume testele pen-
tru ı̂mbunătăţirea serviciului de către producătorii de echipamente mobile.
În Europa, gama de frecvenţă alocată pentru reţelele UMTS este cuprinsă
ı̂ntre 1880 MHz şi 1980 MHz. Tehnologia de transmisie folosită este CDMA
( Code Division Multiple Access ) de bandă largă ( Wideband-CDMA - W-
CDMA ) prin care semnalele se transmit simultan, partajând lăţimea de
bandă a spectrului de frecvenţă alocat serviciului. Reţelele mobile din a
treia generaţie denumite ı̂n Europa UMTS ( 3G - Third Generation ) sunt
foarte diferite de reţelele din generaţia precedentă ( 2G - Second Gener-
ation ). Datorită noului mediu multimedia se poate face o clasificare al
funcţionalităţii, precum: aplicaţii cu timp de răspuns scurt (cazul video
telefoniei, videoconferinţei) şi aplicaţii care nu necesită timpi de răspuns
atât de scurti ( transfer de date, acces la Internet ). În tabelul comparativ
alăturat sunt prezentate câteva diferenţe ı̂ntre cele doua tipuri de reţele.
În cazul reţelei UMTS se foloseşte o arhitectură stratificată orizontal,
grupată pe baza nodurilor funcţionale ale reţelei. Aceasta separare ı̂n stra-
turi funcţionale este caracteristică reţelelor moderne de telecomunicaţii. În
ceea ce priveşte reţeaua UMTS, aceasta este impărţită pe trei niveluri.

Nivelul aplicaţie
Este nivelul la care sunt stocate aplicaţiile accesibile utilizatorului. În ma-
joritatea cazurilor aplicaţiile sunt ı̂ncorporate ı̂n terminalele mobile şi ı̂n
serverele de aplicaţii dedicate acestui scop. Operatorii se pot diferenţia unii
faţă de alţii pe baza pachetelor de servicii unice pe care le oferă abonaţilor
la acest nivel. În plus, operatorii pot apela la firme specializate pentru dez-
voltarea, rularea, sau depanarea acestor aplicaţii, ceea ce duce la un număr
foarte mare de aplicaţii posibile oferite abonaţilor reţelei. Nivelul aplicaţie
este conectat la nivelul controlului de reţea prin intermediul unor API-uri
(Application Program Interface).

Nivelul control reţea


Acest nivel include toate funcţiile necesare asigurării unor servicii de cali-
tate superioară pe diferite tipuri de reţele. Diferitele tipuri de reţele pot fi
privite ca şi un set de domenii, fiecare dintre acestea având ı̂n componenţă
servere de control care controlează fiecare tip de reţea ı̂n parte. Serverele
de control administrează apelurile şi sesiunile de comunicaţie ı̂ntre utiliza-
tori, asigură serviciile de securitate, sau ı̂ndeplinesc alte funcţii similare cu
acestea. Nivelul control de reţea conţine şi serverul HSS ( Home Subscriber

31
Server ) care are un rol foarte important, devenind o entitate multidomeniu.
Acesta poate administra autorizări, autentificări şi poate administra locaţii
din toate domeniile prezente ı̂n reţeaua respectivă. Legătura ı̂ntre nivelul
control de reţea şi nivelul conectivitate este realizat cu ajutorul protocoalelor
GCP ( Gateway Control Protocol ).

Nivelul conectivitate
La acest nivel vorbim despre un mecanism de transmisie capabil de trans-
portul oricărui tip de informaţie prin intermediul conexiunilor vocale, de
date sau ale fluxurilor multimedia. Arhitectura acestui nivel ı̂ncorporează
rutere sau comutatoare care direcţionează traficul, precum şi echipamente
care colectează date şi informaţii privind facturarea serviciului şi asigură
garanţii cu privire la asigurarea unei bune calităţi a serviciului ( QoS -
Quality of Service ) oferit abonaţilor. Soluţiile oferite la acest nivel se pot
baza pe transmisii ATM ( Asynchronous Transfer Mode ) sau IP. Este destul
de clar că pe termen lung rolul protocolului ATM, ca şi tehnologie de trans-
port, va scădea considerabil, lăsând din ce ı̂n ce mai mult teren transmisiei
IP ca şi tehnologie predominantă.

3.2.5 WLAN
Wireless Local Area Network WLAN este un sistem de comunicaţii im-
plementat ca extensie, sau ca şi alternativă pentru un LAN cablat, ı̂ntr-o
clădire sau campus, combinând conectivitatea la viteza mare cu mobilitatea
utilizatorilor, ı̂ntr-o configuraţie mult simplificată. Avantaje evidente, cum
ar fi: mobilitate, flexibilitate, simplitate ı̂n instalare, costuri de intreţinere
reduse şi scalabilitate au impus WLAN ca o soluţie tot mai mult utilizată.
WLAN utilizează standardele de comunicaţie din familia IEEE 802.11.
Standardele din familia IEEE 802.11 descriu protocoalele de comunicaţie
aflate la nivelul fizic (PHY) şi la nivelul legăturii de date (MAC) ale unei
reţele locale wireless. Implementările IEEE 802.11 trebuie să primească
pachetele de date de la protocoalele de la nivelul reţelei şi să se ocupe cu
transmiterea lor evitând eventualele coliziuni cu alte staţii wireless din zona.
IEEE 802.11 este compatibil cu Ethernet-ul care este standardizat de IEEE
ı̂n seria de standarde 802.3. Spectrul şi limitările operaţionale nu sunt ace-
leaşi ı̂n ı̂ntreaga lume. În mare parte din Europa este permisă utilizarea a
ı̂ncă 2 canale adiţionale faţă de cele din US. Un aspect care este de multe ori
confundat este acela că Wi-Fi ocupă 5 canale din bandă 2,4 GHz, ı̂n loc de
3 canale ı̂n SUA : 1,6 ,11 şi 4 canale ı̂n Europa: 1,5,9,13. Puterea izotropă
echivalentă radiată ı̂n Europa este limitată la 20 dBm (0.1W). Energia nece-
sară este mai mică decât a celorlate standarde de joasă lărgime de bandă,
ca de exemplu Zigbee sau Bluetooth, având astfel grijă de viaţa bateriei.
Reţele Wi-Fi au arie de acoperire limitată. Un router Wi-Fi normal ce

32
foloseşte standardele 802.11b, 802.11g, cu o antena standard, are o arie de
acoperire de circa 32 de metri ı̂n spaţiu ı̂nchis şi 95 de metri ı̂n spaţiu de-
schis. Aria de acoperire variază ı̂n funcţie de frecvenţa de banda. Pentru
o frecvenţă mai mare (5 GHz) aria de acoperire este puţin mai mică decât
pentru o frecvenţă mai mică (ex. 2.4 GHz). Aria de acoperire ı̂n spaţiu
liber poate fi ı̂mbunătăţită dacă se folosesc antene direcţionale, ajungând
până la caţiva kilometri dacă echipamentele sunt ı̂n linie dreaptă. De aseme-
nea, performanţele Wi-Fi descresc proporţional pe măsură ce distanţa dintre
emiţător şi receptor creşte.
WiMAX (Worldwide Interoperability for Microwave Access) este o nouă
tehnologie fără fir care poate capta datele de şapte ori mai repede şi de o
mie de ori mai departe decât populara tehnologie Wireless Fidelity (Wi-Fi),
utilizând standardul IEEE 802.16. În timp ce reţelele Wi-Fi simple au o rază
de acţiune de 30m - 100m, WiMax utilizează o tehnologie de microunde radio
care măreşte distanţa la aproximativ 50km. Astfel, se pot construi reţele
metropolitane WiMAX. Iar această tehnologie este optimă pentru echiparea
maşinilor de ambulanţă cu asemenea sisteme, astfel este asigurată legătura
cu unităţile sanitare in permanenţă.

3.2.6 Comunicatii prin satelit


Sateliţii de telecomunicaţii ComSat (Communication Satellite) fac posibilă
realizarea unor canale de telecomunicaţii. Sunt ı̂ntrebuinţăţi aproape ı̂n
toate domeniile comunicaţiilor: telefonie, televiziune, radio, internet, trans-
misii de date, videoconferinţe, etc. Sateliţii de telecomunicaţii sunt de doua
tipuri:
• activi - echipaţi cu aparatură de emisie-recepţie, efectuând anumite
modificări asupra semnalului primit

• pasivi - retransmit semnalele primite ı̂n urma reflexiei acestora pe


suprafaţa lor.
Aceste dispozitive au câteva avantaje destul de importante care nu se regăsesc
ı̂n cazul altor reţele de comunicaţii, precum :
• utilizatorii serviciilor convenţionale terestre mobile vor putea comuta
pe serviciul de satelit când se află ı̂n afara ariei de acoperire a reţelei
clasice

• se lucrează cu viteze mari, viteza de transmisie a datelor poate varia


ı̂ntre 1Mbps şi 15Mbps

• ı̂ntârzierea este doar de 10ms

• sistem global multifuncţional asigură interfeţe ı̂ntre toate sistemele


terestre mobile existente: GSM, AMPS, NMT, DCS, IS-95.[18]

33
Aşadar comunicaţiile prin intermediul sateliţilor este o variantă viabilă pen-
tru sistemul sanitar , astfel se asigură semnal pe 99.9% din suprafaţa terestră
şi o bună securitate a datelor, utilizatorii trebuind să se autentifice pentru
a avea acces la un astfel de sistem.

3.3 Standardul de comunicaţie şi imagistică med-


icală
DICOM (Digital Imaging and Communication in Medicine) este un protocol
de reţea la nivelul aplicaţie pentru transmiterea imaginilor medicale, semnale
digitale şi informaţii auxiliare, ce suportă un domeniu larg de imagini si date
medicale pe domeniile radiologie, cardiologie, patologie şi stomatologie.
Scopul standardului DICOM este de a asigura schimbul standardizat
de imagini ı̂ntre sisteme diferite. Standardul a fost dezvoltat cu accent pe
imagistica medicală de diagnosticare, practicată ı̂n radiologie, cardiologie şi
alte domenii legate de acestea, dar este extins la informatii legate sau nu de
imagine, interschimbate ı̂ntre clinici sau alte medii medicale, [21].

3.4 Arhitectura reţelei unitătilor sanitare fixe


Transmiterea datelor ı̂ntre doua părţi medicale reflectă nevoia de a ı̂mpărtăşi
ı̂nregistrările medicale şi confidenţiale atunci când urmează a se face o
teleconsultaţie sau urmează a se stabili un diagnostic. Trebuie să se ţină
cont de faptul că termenul ”unitate sanitară” cuprinde toate părţile medi-
cale implicate ı̂n procesul de ı̂ngrijire a pacientului, nu numai instituţia in
sine. Conexiunea tipică unitate sanitară-unitate sanitară solicită o bandă
largă pentru a asigura transmiterea unui volum mare de date ı̂n orice mo-
ment.
Topologia optimă pentru reţeaua unităţilor sanitare este cea inel-stea
fiind o combinaţie ı̂ntre cele doua topologii (inel - calculatoarele formează o
buclă, iar daca o staţie se defectează semnalul poate merge pe cealaltă parte;
stea - toate calculatoarele sunt conectate la un nod central,având rolul de
server) astfel staţiile sunt conectate printr-un concentrator principal (figura
3.4). Avantajul principal constă ı̂n faptul că, dacă va exista o problemă
fizică pe o parte a inelului, informaţii vor fi transmise pe cealaltă parte,
astfel nu se va bloca transmiterea de informaţii.
Legătura ı̂ntre judeţe va fi o reţea de tip WAN, liniile de transmisie
vor fi de tipul fibră optică şi se va folosi standardul 1000BaseLX. Acest
standard Ethernet cu 1000 Mbps (Gigabit Ethernet) prin fibră de sticlă
mulţi sau monomode la o lungime de undă de 1300nm. Lungimea maximă
a cablului, ı̂n funcţie de tipul şi calitatea fibrei, este ı̂ntre 550m şi 5000m
ı̂ntre distribuitor şi staţia LAN. Convertoarele de mediu speciale pot acoperi
distanţe ı̂ntre 5 km (1300 nm lungime de undă) şi aproximativ 25 km (1310

34
Figura 3.4: Topologia inel - stea

nm lungime de undă), fără a fi nevoie de repetoare. Acest tip de linii oferă


câteva avantaje foarte importante: rezistenţă la zgomote, atenuare scăzută,
securitate sporită.
Reţeaua din interiorul unui judeţ va fi de tipul LAN şi va fi privată. Se
vor folosi atât fibră optică cât şi cabluri UTP Unshielded Twisted Pair sau
STP (Shielded Twisted Pair). Aceste reţele funcţionează la viteze cuprinse
ı̂ntre 10 Mbps şi 10 Gbps, sunt afectate de zgomot dar pentru un buget
redus sunt recomandate.
Pentru a asigura o securitate cât mai bună, va trebui unilizat un set
de servicii impuse de organismul internaţional numit IANA (Internet As-
signed Numbers Authority). Reţeaua va fi configurată static, ı̂n server se
vor introduce MAC-rile (Media Access Control) calculatoarelor reţelei, ast-
fel se va evita penetrarea reţelei. De asemenea, se vor folosi din protocolul
IPv6 clasa A. Este cea mai sigură clasă de adrese IP, astfel matematic, se
pot aloca maxim 127 de adrese de clasa A, fiecare putând aloca un număr
de 16.777.214 adrese gazdă. Intervalul adreselor de clasa A este: 1.0.0.0
− 126.255.255.255, iar conţinutul din primul octet rămâne fix odată ce e
alocat.

3.5 Arhitectura unitate sanitară fixă - unitate sani-


tară mobilă
În acest subcapitol voi prezenta doua scenarii posibile necesare realizării
unei comunicaţii de tip telemedicină ı̂ntre o unitate mobila (de tip prim
ajutor) şi o unitate fixă (spital, centru de e-sănătate) . Unităţile mobile se

35
vor deplasa către zonele ı̂n care sunt solicitate şi apoi vor transmite datele
medicale către spital sau către centrul de monitorizare pentru a fi analizate
de personalul de monitorizare, doctori, ce verifică simptomele existente şi
vor aplica procedura de urgenţă după caz.
O conexiune ı̂ntre cele doua părţi poate fi stabilită pe ı̂ntreaga durată a
monitorizării sau doar pe anumite perioade de timp când aparatura trimte
datele medicale colectate. Aplicaţiile de tele-monitorizare moderne presupun
o mobilitate ı̂n creştere a personalului. În continuare voi prezenta varianta
care este disponibilă la ora actuală şi care nu oferă o mobilitate satisfăcătoare
şi variantă care este puţin mai costisitoare dar dispune de mai multe avan-
taje.
Prima variantă constă ı̂ntr-o conexiune ı̂ntre unitatea mobilă şi spi-
tal prin intermediul unui modul de comunicaţii(spre exemplu modem) am-
plasat pe plafonul maşinii de ambulanţă care asigură o transmisie de tip
GSM, cu ajutorul standardelor GPRS şi EDGE. Toată aparatura aferentă
intervenţiilor de urgenţă este conectată prin Bluetooth, iar camerele video(de
obicei doua) sunt conectate prin cablu UTP. Un astfel de sistem intâmpină
câteva probleme precum:
• portabilitate scăzută - tehnologia bluetooth permite transmiterea date-
lor la o distanţă de 10m ı̂ntre dinspozitive, astfel pacientul va trebui să
fie transportat până la unitatea mobilă, astfel se pierde timp şi poate
scădea şi şansele de supravieţuire, ı̂n unele cazuri
• semnal slab - datorită reliefului tării noastre, munţii şi dealurile ocupă
aproximativ 45% din teritoriu, există şanse destul de mari ca semnalul
GSM să nu aibă puterea necesară, sau chiar să nu fie disponibil ı̂n
anumite zone, astfel se periclitează comunicaţia
• viteză mică - datorită specificaţiilor tehnice componentelor utilizate
ı̂n acest sistem, viteza de transmitere a datelor este una medie, dacă
pentru a transmite date avem nevoie de câtiva Kbps, pentru a trans-
mite video va fi necesară o viteza care variază ı̂ntre 178 şi 340 Kbps
(ı̂n funcţie de calitatea echipamentului folosit), existând risculul ca la
centru să fie primite doar frame-uri.
Cea de-a doua variantă presupune o conexiune de tip ZigBee ı̂ntre echipa-
mentele cu care este dotată o unitatea sanitară, astfel vom rezolva problema
de portabilitate, iar preţul echipamentului este cu 5% mai mic decât ı̂n cazul
mai sus prezentat.
Iar pentru a realiza legătura ı̂ntre unitatea sanitară fixă şi cea mobilă
propun utilizarea unei tehnologii WiMAX folosind protocolul IEE 802.16e.
Astfel va trebui să realizăm o reţea formată din celule radio. Reţelele celu-
lare oferă un număr de avantaje faţă de alte soluţii alternative, precum:
capacitate crescuţa, consum energetic redus, arie largă de acoperire şi grad
de interferentă scăzut.

36
Figura 3.5: Comparaţie ı̂ntre standardul Bluetooh si ZigBee

În alegerea modului ı̂n care vor fi poziţionate antenele trebuie avute
ı̂n vedere caracteristicile mediului geografic( latitudine, longitudine, cote,
etc). Alegerea coordonatelor antenelor se va face cu ajutorul unui algoritm
genetic ce va minimiza o funcţie de cost aleasă astfel ı̂ncat să ne conducă
la o poziţionare cât mai buna a antenelor. Algoritmii genetici reprezintă
o metodă de căutare a unei soluţii la o problemă dată prin trecerea de
la o populaţie de cromozomi (soluţii potenţiale ale problemei de rezolvat)
la o noua populaţie, apelând la operatori de inspiraţie genetică: selecţia
(reprezintă pasul de supravieţuire a celor mai buni indivizi), mutaţia (creşte-
rea varietătii populaţiei) şi ı̂ncrucisarea (parcurgerea paşilor care duc la o
noua populaţie).

37
Capitolul 4

Securizarea datelor ı̂n


telemedicină

Agenţiile şi organizaţiile guvernamentale ale mai multor naţiuni au dezoltat


numeroase criterii pentru securitatea tehnologiei computerizate. În SUA,
documentul ı̂n cauză se numeşte ”Criteriul de securitate al sistemelor com-
puterizate” sau TCSEC ”Trusted Computer System Security Evaluation
Criteria,”. Comisia europeană a publicat ”Criteriul securităţii tehnlogiei
informaţiei” cunoscut şi ca ITSEC (Information Technology Security Eval-
uation Criteria) iar guvernul canadian a publicat ”Criteriul de securitate
al produselor computerizate canadiene” sau CTCPEC (Canadian Trusted
Computer Product Evaluation Criteria). În 1996, aceste iniţiative au fost
oficial reunite ı̂n documentul cunoscut sub numele Criteriul Comun CC. În
1999 acest document a fost aprobat ca fiind un standard de către Organizaţia
Internaţională de Standardizare IOS. Această iniţiativă deschide calea către
o recunoaşterea reciprocă a rezultatelor la nivel mondial de evaluare a pro-
duselor.
Nevoia industriei medicale de a fi sigură, nevoia confidenţialităţii schim-
bului de informaţii, ı̂ntre pacient şi medic, ı̂n sprijinul portabilităţii asigurării
medicale, sprijinirea firmelor de asigurări de sănătate, toate acestea au avut
ca rezultat un document numit ”The Health Insurance Portability and Ac-
countability Act of 1996” (HIPAA). Pentru a susţine confidenţialitate şi
schimbul electronic de informaţii ı̂n domeniul sănătaţii, departamentul de
sănătate şi serviciu uman din SUA a elaborat reglementări ce susţin şi
ı̂ntăresc securitatea şi confidenţialitatea HIPAA. Aceste reglementări pre-
supun o atenţie sporită atât ı̂n manevrarea documentelor scrise de mână cât
şi acelora electronice. Documentele protejate care sunt stocate ı̂n sistemul e-
medical de informaţii prezintă permanent riscul modificărilor sau accesărilor
inadecvate. Acestea din urmă sunt considerate un abuz.
O arhitectură de securitatea asemănătoare, dar cu un domeniu de apli-
cabilitate mai larg va trebui dezvoltat de agenţia guvernamentală a ţării

38
noastre. Această strategie a fost elaborată deja, de exemplu, de către gu-
vernul britanic. Acest document vizează organismele implicate ı̂n procurarea
şi furnizarea de servicii electronice pentru guvern, inclusiv departamentele
guvernului central, sectorul cu organisme publice non-departamentale, au-
torităţile locale şi alte organisme guvernamentale locale responsabile cu
furnizarea de servicii electronice pentru guvern. Aceasta cuprinde, de aseme-
nea, organismele de reglementare responsabile cu auditarea şi controlul adec-
vat al bunurilor publice şi bunurilor informatice. Alte arhitecturi de securi-
tate pot fi găsite, de exemplu, ı̂n [19].
Acest capitol arată cum se poate securiza un sistem e-medical folosind
tehnologia şi mecanismele digitale de securitate la o scară largă.

4.1 Norme de securitate ı̂n telemedicină


Securitatea HIPPA stabileşte următoarele reguli de siguranţă: ”Asigurarea
confidenţialităţii, integrităţii şi disponibilităţii tuturor informaţiilor electron-
ice despre protejarea sănătăţii (PHI) pe care entitatea subiectului(pacientului)
le crează, le primeşte, le păstrează şi le transmite.” Principalele obiective ale
sistemului de securitate sunt:

• asigurare medicală pentru angajaţi

• reducerea fraudelor şi abuzurilor din domeniul medical

• introducerea/implemetarea simplificărilor administrative cu scopul de


a spori eficacitatea şi eficienţa sistemului medical

• protejarea informaţiilor medicale ı̂mpotriva accesului fără consimţământ


sau fără autorizaţie

HIPPA prezintă o triplă provocare furnizorilor de dispozitice medicale şi


celor care produc aplicaţiile:

1. ı̂ncorporarea unei tehnologii de securizare a produselor pentru a proteja


confidenţialitatea informaţiilor medicale generale,

2. reevaluarea şi consolidarea propriile politici, interne şi de formare, pentru


a asigura un tratament sigur şi confidenţial al informaţiilor medicale
expuse ı̂n timpul testării, serviciilor de teren, de evaluare a produsului
şi de cercetare

3. un flux de lucru ce include şi produsele proprii, asigurându-se ı̂n acelaşi


timp că aceste produse incluse ı̂n fluxul de lucru nu impiedică comu-
nicarea clinică sau nu afectează ı̂n mod negativ ı̂ngrijirea pacientului.

39
Furnizorii de dispozitive şi de aplicaţii nu sunt de obicei direct responsabili
pentru politicile şi procedurile organizatorice ale clienţilor lor. Cu toate aces-
tea, propriile lor politici şi proceduri trebuie să protejeze confidenţialitatea
informaţiilor şi produsele lor trebuie dezvoltate pentru a corespunde principi-
ilor HIPAA. Mai exact, HIPPA specifică exact anumite politici şi tehnilogii
de securitate, printre care:

• ID-uri unice pentru utilizatorii autorizaţi

• delogare automată

• audit pentru accesul la anumite tipuri de informaţii protejate

• criptare (opţional)

• semnătura digitală (op̧tional)

• dezvoltare de antivirus

• planuri de recuperare/restaurare a datelor

• planuri pentru a reveni după un eventual dezastru

• program de audit

• programe de testare

• programe de formare profesională

Este necesar de remarcat faptul că soluţiile de securitate necesită mai mult
decât puţină tehnologie. Pentru a fi eficiente, soluţiile de securitate tre-
buie să fie complementate de formare/traninguri, securitatea fizică, core-
spunzătoare celor mai bune practici derivate politicilor de securitate şi con-
figurarea corespunzătoare a sistemelor de operare şi a aplicaţiilor.
Securitatea fizică poate varia de la simplul acces prin autentificare, ajungând
până la supravegherea cu camere video. Provocarea constă ı̂n determinarea
nivelului de securitate necesar, având ı̂n vedere sensibilitatea informaţiilor,
importanţa securităţii tehnice, accesibilitatea personalului uman la mediul
de calcul.

Reţele
Informaţiile, fiind schimbate ı̂ntre sistemele de sănătate, sunt expuse diferitelor
modalităţi de a putea fi interceptate. Securitatea fizică a componentelor de
reţea şi a mediilor de comunicaţii poate fi suficientă ı̂n medii restrânse. În
medii mai largi şi oriunde informaţiile despre sănătate ce trebuie protejate
sunt schimbare printr-o reţea publică, securitatea acestora trebuie asigurată
prin criptare şi tehnologii de securitate.

40
Sisteme de operare
Cele mai moderne sisteme de operare furnizează securitate suficientă pen-
tru protejarea dosarele medicale. Cu toate acestea, sistemul de securitatea
trebuie să fie configurat corect pe baza celor mai bune politici de securitate.
Configurare trebuie să includă ştergerea automată a conturilor neutilizate
şi inutile, precum şi faptul că toate parolele să respecte cele 66 de cerinţe
moderne de securitate. Un sistem de operare securizat ı̂n mod corespunzător
trebuie să includă atât eliminarea automată a lipsurilor de securitate cât şi
politici ce impiedică utilizatorii să creeze astfel de lipsuri.

Application Software
Ca şi ı̂n cazul sistemele de operare, aplicaţiile cele mai moderne au potenţia-
lul de a fi configurate pentru utilizări sigure. Cu toate acestea, ca şi ı̂n cazul
sistemelor de operare , cele mai multe aplicaţii sunt configurate pentru a
avea sisteme de siguranţă foarte slabe sau inexistente(de ex sistemele ı̂n care
lipseşte cu desăvârşire conectarea prin nume-utilizator şi parolă). Fiecare
aplicaţie trebuie să fie configurată pentru utilizări sigure.

Date
Multe tipuri de informaţii pot fi citite de mai multe aplicaţii (de exemplu,
fişiere imagine). Bazându-se exclusiv pe securitatea de bază a aplicaţiilor,
siguranţa informaţiilor poate fi uşor afectată dacă un utilizator schimbă
pur şi simplu aplicaţia pentru a citi acea informaţie. Controlul accesului la
informaţii trebuie aplicat la cel mai de bază nivel(fişiere, bază de date,etc)
ı̂n care acea informaţie este stocată. În plus, ı̂n cazul ı̂n care informaţia este
stocată ı̂n baza de date, securitatea trebuie aplicată pentru nivelul minim
al ı̂nregistrării individuale. În unele cazuri, informaţia din baza de date
necesită să fie protejată prin intermediul controlului accesului din interiorul
ı̂nregistrărilor individuale.

4.2 Modelarea unei arhitecturi de securitate


Criteriul CC prevede o taxonomie a evaluării securităţii funcţionabilă printr-
o serie de cerint̆e funcţionale şi de asigurare. Criteria include 11 cate-
gorii funcţionale : audit de securitate, de comunicare, suport criptografic,
protecţie prin crearea de utilizatori, identificare şi autentificare, gestionarea
funcţiilor de securitate, confidenţialitate, protecţia securităţii funcţionale,
utilizarea resurselor, accesul la componente şi o cale sau un canal de ı̂ncredere.
Aceste 11 categorii funcţionale sunt ı̂mpărţite ı̂n 66 de familii, fiecare conţi-
nând un număr de criterii [20]. Există aproximativ 130 de criterii docu-
mentate ı̂n prezent, cu menţiunea faptului că designeri pot adăuga criterii
suplimentare ı̂n funcţie de proiect. Există un proces oficial prin care se

41
adoptă criterii specifice corpului administrativ al CC.
Guvernele şi grupurile industriale dezvoltă descrieri funcţionale pentru
securitatea reţelelor şi soft-urilor, utilizând CC. Aceste documente, cunos-
cute sub numele de profile de protecţie, descriu grupuri de funcţii de secu-
ritate care sunt adecvate pentru o anumită componentă de securitate sau
tehnologie. Motivaţia principală pentru dezvoltarea profilurilor de protecţie
este motivarea furnizorilor de a distribui produse securizate şi a reduce riscul
ı̂n procurarea infomaţiei tehnologice.
Clasele şi familiile din cadrul Criteriului Comun reprezintă o agregare de
cerinţe. Agregarea reflectă mai mult termeni abstracţi de securitate, precum
operaţiunile criptografice şi protecţia datelor, decât securitate ı̂n contextul
funcţiilor operaţionale IT. O cartografiere rezumată a categoriilor Criteriu-
lui Comun este prevăzută ı̂n tabelul 4.1.

Categorii Clasele Criteriului Comun


funcţionale
Auditul audit, componente de protecţie
Controlul accesului protejarea datelor, protecţia componentelor,
management-ul securităţii, restricţionarea
accesului, suport criptografic, identificare şi
autentificare, canale/linii securizate
Controlul fluxului suport criptografic, protecţia datelor,
protecţia resurselor, sisteme codificate
Acreditare protejarea datelor, protecţia resurselor, sis-
teme de comunicaţii, acces prin autentifi-
care, sisteme incriptate
Soluţii de integritate suport criptografic, protejarea datelor, uti-
lizarea resurselor, management-ul securităţii

Tabelul 4.1: Relaţiile dintre categoriile funcţionale şi clasele Criteriului Comun.

Această structură susţine afirmaţia potrivit căreia cele cinci categorii de-
scrise ı̂n tabelul 4.1 reprezintă un set de procese interdependente sau sub-
sisteme.

Subsistemul auditului de securitate


Subsistemul auditului care se ocupă de securitate este responsabil pentru
captarea, analiza, raportare, arhivare şi ı̂napoierea ı̂nregistrărilor de eveni-
mente, precum şi a condiţiile din interiorul unei sistem server. Conform CC,
cerinţele de securitate pentru un subsistem de audit ar include:

• colectarea datelor de securitate, inclusiv captarea corespunzătoare de


date, transferul sigur al datelor precum şi sincronizarea cronologiilor

42
• protecţia datelor, inclusiv utilizarea etichetelor de timp, semnarea
evenimentelor şi integritatea stocării pentru a preveni pierderea de
date

• analizarea datelor de securitate ale auditului, inclusiv revizuirea, de-


tectarea anomaliilor, analiza erorilor şi analiza atacurilor din afara
reţelei folosind euristica simplă sau complexă

• alarme pe praguri de pierderi, condiţii de avertizare şi evenimente


critice.

Soluţia subsistemului de integritate


Scopul implementării unui subsistem de integritate ı̂ntr-un cadru IT este
de a satisface cerinţele de fiabilitate şi corectitudine ale soluţiei de calcul
pentru a atinge standardele legale şi tehnice ale procesului. Conform Cri-
teriului Comun, accentul pe implementare subsistemului de integritate poate
include:

• integritatea şi fiabilitatea resurselor

• protecţii fizice pentru date, cum ar fi chei criptografice şi componente


fizice, cum ar fi cabluri, hard-uri, etc

• operaţii continue incluzând toleranţa la erori, recuperarea după eşec


şi autotestare

• mecanismele de stocare; module de securitate hardware şi criptografice

• acurateţe maximă ı̂n măsurarea timpului

• alcătuirea unei liste a serviciilor prioritare prin alocarea de resurse sau


cote

• izolare funcţionala utilizând domenii de separare sau monitorizarea


activităţilor

• alarme atunci când un atac fizic sau pasiv este detectat.

Subsistem al controlului de acces


Scopul unui subsistem al controlului de acces ı̂ntr-o soluţie IT este de a spori
politicile de securitate prin separarea accesului, executarea proceselor şi ser-
viciilor conform soluţiilor computerizate folosind identificare, autentificare
şi prin procesele de autorizare, ı̂mpreună cu mecanisme de securitate care
folosesc acreditări şi atribute.Conform CC, un subsistem al controlului de
acces funcţional include:

• contorizare/control acces

• monitorizarea şi ı̂ntărirea accesului ı̂n cazurile de urgenţă

43
• mecanisme de identificare şi autorizare incluzând criptografia (criptare
şi semnare) şi mecanisme de autentificare singulare sau multiple

• mecanismele de autorizare ce includ atribute, privilegii şi permisiuni

• mecaniste ale controlului accesului ce includ controlul accesului bazat


pe atribute, asupra subiectelor, obiectelor şi subiecţilor-utilizatori cu
caracter obligatoriu

• mecanisme de aplicare inclusiv manipularea obiectelor deteriorate, pre-


venirea defecţiunilor, captarea evenimentelor precum şi componente de
decizie şi de ı̂nregistare a rezultatelor.
Controlul nivelului fluxului de informaţii Scopul unui astfel de sub-
sistem ı̂ntr-un cadru IT este de a pune ı̂n aplicare politicile de securitate
prin separarea fluxul de informaţii printr-o soluţie de calcul ce afectează
vizibilitatea informaţiei ı̂n termenii soluţiei de calcul şi asigură integritatea
datelor astfel ı̂mplicând o soluţie de calcul. Conform CC, un subsistem al
controlului fluxului de informaţii include următoarele cerinţe funcţionale:
• monitorizare fluxului datelor şi punerea ı̂n aplicare/executarea

• mediile de transfer: un canal deschis sau de ı̂ncredere, o cale de


ı̂ncredere sau deschisă, conversii media, transferul manual, importul
sau exportul ı̂ntre domenii

• mecanisme de observabilitate: de a bloca criptarea

• mecanismele de depozitare: criptografie şi module de securitate ale


hard-ului

• mecanisme de aplicare: atributele obligatorii de stocare şi active, capta-


rea evenimentelor, componentele de decizie şi de autentificare, moni-
torizare datelor stocate, reducere, protecţia şi distrugerea informaţiilor
reziduale
Subsistem de acreditare sau identificare Scopul unui subsistem de
acreditare sau identificare ı̂ntr-un cadru IT este de a genera, distribui şi
a gestiona date care să transmită identitate şi permisiunea ı̂ntre reţele şi
ı̂ntre platforme, ı̂ntre procese, precum şi subsistemele de securitate ı̂ntr-o
soluţie IT. Conform Criteriului Comun, un subsistem acreditar trebuie să
includă următoarele cerinţe funcţionale:
• mecanisme simple şi/sau complexe, care folosesc sau nu criptarea

• identităţi şi acreditări utilizate pentru a proteja fluxurile de date

• identităţi şi acreditări pentru a fi utilizate ca protecţie a activelor:


integritatea sau neobservabilitate

44
• identităţi şi acreditări pentru a fi utilizate ı̂n controlul accesului: iden-
tificare, autentificare şi controlul accesului ı̂n scopul de a juca rolul
unei coperţi protectoare pentru utilizatori

• acreditări pentru a fi utilizate ı̂n scopuri de identitate din punct de


vedere juridic pentru tranzacţii

• data şi ora la care s-a realizat autentificarea

• ciclului de viaţa al acreditării

• mecanisme anonime

Aspectul obiectivelor de securitate şi soluţia mediului au un rol central ı̂n


selecţia şi enumerarea subsistemelor. Tabelul 4.2 prezintă o posibilă car-
tografiere a obiectivelor de proiectare pentru subsistemele de securitate.
Acesta indică ı̂n care caz un subsistem poate fi necesar (N) sau suplimen-
tar (S) ı̂n a satisface cerinţele de securitate individuală. Selecţia reală a
subsistemelor necesită o documentare raţională.

Proiectarea Audit Integritate Control Control Legitimare


securităţii acces pe nivele Legitimare
Concrolul ac- N N S N N
cesului asupra
sistemului /
proceselor
Controlul accesu- N N N S S
lui la informaţii
Controlul la N N N S N
fiecare nivel al
informaţiilor
Componente via- N S N N N
bile şi funcţionale
Prevenirea / S S S S N
ı̂nlăturarea at-
acurilor
Responsabilizare S S N N S
prin identificare
Prevenirea S S S S S
/ eliminarea
fraudei

Tabelul 4.2: Reprezentarea obiectivelor ı̂n funcţie de subsistemele de securitate.

45
4.3 Tehnici de securizare a sistemului medical
Tehnicile prin care sistemul e-medical devine sigur, ı̂n special cele ce fac
referire la subsisteme sunt ilustrate ı̂n figura 4.1 şi vor fi prezentate mai
amănunţit ı̂n continuare. Acestea vizează trei domenii majore: date şi
aplicaţii, infrastructura sistemului şi reţele.

Figura 4.1: Componentele care stau la baza unui sistem de telemedicină

Cristografie Serviciile informatice de securitate care sunt necesare pentru


a proteja informaţiile electronice se bazează pe o tehnologie numită crip-
tografie. Cele mai multe tehnici de securitate au la bază fie o criptare cu
”algoritm secret, special implementat” fie criptare cu ”algoritm cunoscut”.
Criptarea poate fi implementată folosind fie o singură metodă de codificare
şi decodificare a textului(algoritm simetric) sau o ı̂mbinare de mai mulţi
algoritmi. Fiecare tehnologie de bază necesită un alt set de concepte şi
mecanisme de sprijin.
Certificatele digitale sunt documente ecriptate generate de Autoritatea
de Certificare, care confirmă identitatea proprietarului unei perechi de chei
private sau publice.

Autentificare utilizator
Autentificarea este procesul de verificare a identităţii unui potenţial utiliza-
tor al unui sistem. Cele mai multe mecanisme de autentificare se bazează
pe o combinaţie de una sau mai multe ”parole”, dispozitive de securitate(de
exemplu: card de acces) şi/sau caracteristici fizice(de exemplu: amprente
digitale). O combinaţie comuna̧ (numită uneori ”autentificare ı̂n mai mulţi

46
factori”) este autentificarea bazată pe ceva ce deţii(de exemplu: cardul ban-
car) şi ceva ce cunoşti(de exemplu: codul Pin al cardului bancar). În cea
mai simplă formă a ei, autentificarea se face prin verificarea unui cod de
acces sau a numelui de utilizator şi a parolei introduse de către utilizator
ı̂n momentul ı̂n care doreşte acces la sistem. Mecanismele de autentifi-
care mai sofisticate includ folosirea ”cartelelor inteligente” pentru a stoca
acreditările codificare şi chiar analize biometrice ale amprentelor digitale,
scanarea feţei sau scanarea retinei. Autentificarea proprie nu ı̂nseamnă ac-
ces la orice informaţie sau serviciu specific sistemului; doar verifică, cu un
anumit nivel de certitudine, dacă sunteţi cine pretindeţi a fi.

Autorizarea accesului la informaţii protejate


Control accesului este uneori numit şi autorizare, ı̂n special atunci când se
referă la procesul de a determina dacă un utilizator este autorizat să aibă
acces la un sistem sau o aplicaţie. Accesul la o informaţie poate fi acor-
dat numai ı̂n urma unei autentificări corecte, a unui utilizator autorizat cu
niveluri adecvate de acces (de exemplu, un medic poate avea acces complet
la informaţii despre pacienţii proprii, dar au acces doar la informaţii gen-
erale sau statistici despre pacienţii altor medici).

Responsabilitatea modificărilor infomaţiilor protejate


Utilizatorii informaţiilor protejate din mediul sănătăţii sunt responsabili
pentru toate căile de acces, modificările sau distribuirea informaţiilor prote-
jate. Orice acces neaprobat la informaţiile protejate din mediul sănătăţii tre-
buie raportat. Jurnalele de audit se folosesc pe post de instrumente pentru
ı̂nregistrarea logărilor autorizare şi neautorizate ı̂n aplicaţiile şi/sau serviciile
sistemului, precum şi pentru accesul şi/sau schimbările informaţiilor prote-
jate. Inspecţia periodică a jurnalelor de audit este esenţială pentru a proteja
securitatea sistemului, integritatea informaţiilor protejate şi păstrarea statu-
tului juridiciar al organizaţiei.

Integritatea informaţiilor protejate


Informaţiile protejate din mediul sănătăţii trebuie să fie reprezentate, stocate
şi distribuite astfel ı̂ncât orice ı̂ncercare de a altera informaţiile (ı̂ncercare
autorizată sau nu) să poată fi identificată şi urmarită. Un mecanism cu
sistem independent strâns legat de informaţii(de exemplu: control, CRC,
semnătura digitală) asigură consolidarea, ı̂ntărirea integrităţii informaţiei.

Protejarea informaţiilor
Mecanismele de urmărire a utilizatorilor furnizează dovezi care nu pot fi
combătute ale creării, ştergerii, modificării sau distribuirii de informaţii.
Acest lucru asigură ca nici măcar un utilizator autorizat să nu poată accesa,
modifica sau ı̂mpărtăşi informaţii şi apoi să nege aceste lucruri.

47
Confidenţialitatea informaţiilor protejate
Datele dintr-un singur sistem sau datele schimbate ı̂ntre sistemele unor
unităţi sanitare nu trebuie să fie vizibile de utilizatori sau sisteme neau-
torizate. Utilizatorii neautorizaţi pot obţine informaţii importante despre
datele din sistemul prin crearea unui pod (bridge) ı̂ntre cele doua unităţi.
Informaţiile confidenţiale nu ar trebui să fie stocate ı̂n texte simple
pe un sistem nesigur. În cazul ı̂n care securitatea fizică sau electronică a
unui sistem este suspectă, informaţiile confidenţiale trebuie să fie criptate
folosind chei care nu sunt stocate pe sisteme nesigure. În funcţie de natura
informaţiilor, acestea pot fi stocate ı̂ntr-un fişier text, sau stocate ca fişiere
criptate ı̂n cadrul unei baze de date.
Protejarea datelor care urmează să fie trimise către o altă unitate sani-
tară se realizează prin codificarea acestora. Această criptare se poate realiza
la diferite niveluri ı̂n procesul de comunicare:

• nivelul de criptare al reţelei

• nivelul de criptare al sesiunii

• criptare la nivelul aplicaţiilor

Criptarea nivelului reţelei este de obicei pusă ı̂n aplicare ı̂ntre routerele unei
reţele securizate bazate pe standardul IETF IP. Aceste routere criptează
tot traficul( capacitatea utilă a IP-ului) dintre ele şi ı̂ntre ele şi alte routere
autentificate mutual. În cazul ı̂n care trimiterea şi primirea prin reţelele
locale (LAN) şi asociate sunt sigure, precum şi calea dintre ele este sigură
(de exemplu, să fie configurat ca o reţea virtuală privată folosind nivelul
reţelei de criptare), atunci stratul de criptare al reţelei şi al sesiunii nu este
necesar.
Nivelul de criptare al reţelei constă ı̂n faptul că informaţia este crip-
tată doar ı̂ntre marginile LAN-urilor fiecărei organizaţii. Informaţia se
regăseşte ı̂n text simplu ı̂n cadrul fiecărui LAN şi pe sistemul final al fiecărei
organizaţii. Când nu suntem siguri că reţeaua dintre sistemele de final
este sigură, stratul de criptare al sesiunii poate fi folosit pentru a securiza
informaţia fiind schimbat ı̂ntre sisteme finale independente indiferent dacă
reţeaua ı̂n sine este criptată sau nu. Nivelul de criptare al sesiunii este ade-
sea pus ı̂n aplicare la nivelul socket Secure Sockets Layer (SSL) atunci când
se realizează partea hard a produsului. SSL este folosit pentru tranzacţii
securizate prin Web, aplicaţii de e-mail şi transfer de fişiere.

Monitorizarea accesului atunci când vorbim de informaţii confiden-


ţiale
Fiecare din mecanismele de securitate utilizate pentru a proteja sistemele
sensibile şi informaţiile poate fi ţintă pentru potenţiale atacuri neautorizate.
Pentru a menţine securitatea şi integritatea informaţiilor protejate, discreţia

48
este necesară, nu numai ı̂n selectarea tehnologiei şi punerea ı̂n aplicare a
politicilor, ci şi ı̂n monitorizarea sistemelor pentru a suprinde eventualele
autentificări eşuate, precum şi ı̂ncercărilor suspecte de acces. Monitorizarea
este realizată de către audit care realizează o diagramă a accesărilor, a
alarmelor şi raportează evenimentele dacă este necesar.

49
Capitolul 5

Sistem de telemonitorizare

Tele-asistenţa medicală este ı̂mbinarea mai multor sisteme electronice, teleco-


municaţie şi tehnologia informaţiei(TI), necesare ı̂n a transfera informaţiile
medicale de la un sistem de tip client la altul de tip server. Principalele
probleme la rezolvarea carora telemedicina işi aduce contribuţii majore sunt:

• asistenţă medicală / ingrijirea sănătăţii ı̂n locuri izolate, ı̂n acest caz
timpul putând să fie hotărâtor pentru viaţa pacientului

• asistenţă medicală la domiciliul pacientilor, atât pentru persoanele


greu deplasabile cât şi pentru a micşora costurile prin evitarea spi-
talizării

• asistenţă medicală de ı̂naltă competenţă

• asistenţă medicală ı̂n cooperare - discutarea unui caz medical ı̂n comun
de către mai mulţi specialişti aflaţi ı̂n aceeaşi locaţie

• medicina de urgenţa primeşte un ajutor substanţial, uneori decisiv


pentru salvarea vieţilor ı̂n situaţii critice, din partea sistemelor aflate
ı̂n unităţile mobile

Putem observa că astfel accesul la sistemul de sănătate naţional va fi mai


bun, deşi necesită o investiţie importantă ı̂n faza de implementare a proiectu-
lui, costurile vor fi mult mai mici, pe viitor, ı̂n comparaţie cu cele ı̂nregistrate
ı̂n prezent, şi cel mai important aspect ı̂l reprezintă calitatea care va fi sem-
nificativ ı̂mbunătăţită.
Aplicaţia propusă constă ı̂ntr-un sistem de telemonitorizare (figura 5.1)
bazat pe doua module de transmisie ı̂n timp real a semnelor vitale şi a
imaginilor video prin Internet de la o unitate sanitară secundară către un
centru de monitorizare. Pachetul software dispune şi de un câmp ı̂n care
cele doua instanţe implicate pot schimba păreri fără ca pacientul să poata
vedea acest lucru.

50
Figura 5.1: Fereastra interfetei Server
51
Pentru o utilizare eficientă a aplicaţiei este necesar ca interfaţa să fie
usor de utilizat de către personalul medical.

5.1 Implementarea software a sistemului


Pentru a realiza o implementare software a interfetei Internet cat mai sim-
pla si ieftina, am ales protocol de retea de comunicatii TCP/IP. Pentru a
procesa informatiile, necesare uneu sistem de telemedicina am folosit pro-
gramul Microsoft Visual C# 2008 Express Edition. Schimbul de date se face
prin intermediul unui aplicatii client-server, figura 5.2.

Figura 5.2: Arhitectura client server

Pentru a facilita comunicaţiia ı̂ntre tascuri s-au utilizat fire de execuţie


(Thread ), folosind clasa ’System.Threading’. Firul de execuţie principal
este metodă ’main’ şi atunci când acesta se termina, se incheie şi transmisia.
Aplicaţia poate executa ı̂n paralel doua sau mai multe fire de execuţie, dar
ı̂n realitate un singur fir se execută la un moment dat, comutând controlul
de la un thread la altul.

5.1.1 Modul server


Serverul, ı̂n cazul de faţă, este un program specific care ruleaza ı̂n mod
continuu, cu unicul scop de a primi date de la alte programe. În cadrul
aceastei aplicaţie, trebuie definit modul de comunicare cu clientul şi modul
de interacţiune server - client. Regulile de comunicare pe care trebuie să le
respecte ambele programe sunt implementate ı̂n cadrul protocoalelor.
Atunci când două aplicaţii trebuie să comunice, ele se vor căuta reciproc.
Dacă doua aplicaţii işi recunosc reciproc protocoalele, ele pot crea o conex-
iune. Responsabilitatea este a clientului de a căuta serverul iniţializând o
cerere. Serverul creează un fir pe care ı̂l va utiliza pentru comunicarea cu
clientul şi ı̂şi va transmite propria adresă către aplicaţia client ı̂n primul său
mesaj de raspuns.

52
În figura 5.3 sunt prezentate facilităţile server-ului. În partea de sus a fig-
urii este afisat IP staţiei pe care este utilizată aplicaţia, am folosit clasa ’Tc-
pListener’ utilizând instrucţiunea (new IPEndPoint(IPAddress.Any, port))
pentru a realiza acest lucru. Mai jos se va putea selecta portul pe care
se va produce schimbul de date, câmpul este unul de tip ’TextBox’ iar
instrucţiunea care va realiza conexiunea este ’System.Convert.ToInt32(portStr)’
din clasa mai sus menţionată. In centrul ferestrei se află un camp (ex.: Client
# 1 connected) care va prezenta ı̂n permanenţă starea sistemului.

Figura 5.3: Icon-urile servarului

Utilizatorul are la dispoziţie 4 butoane care ii ofera tot ceea ce are nevoie
pentru a iniţia o conexiune şi pentru a vizualiza datele primite de la un client.
Pentru iniţializarea conexiunii butonul Start Server va deschide un thread
(m mainSocket.BeginAccept (new AsyncCallback (OnClientConnect)), iar
butonul Stop Server va ı̂ntrerupe legatura server-client (CloseSockets();),
ı̂ntrerupând firul de execuţie.
Cele doua butoane de Start şi Stop vor fi utilizate pentru a porni respec-
tiv a ı̂ntrerupe fluxul de date. De exemplu, dacă un pacient va avea nevoie
de o supraveghere pe o durată de timp mai mare, medicul va ı̂ntrerupe (
apas̆ând butonul Stop) fluxul de date, şi ı̂l va reporni ( apas̆ând butonul
Start) atunci când va avea nevoie, astfel se vor evita blocajele.

5.1.2 Modul client


Pentru implementarea aplicaţiei client ı̂n C#, se foloseşte clasa ’TcpClient’
precizând IP-ul (GetIP()) respectiv portul server-ului. Atunci când un client

53
lansează o cerere de conectare ( utilizând butonul Conectare), metoda ’Ac-
ceptTcpClient’ va returna soclul server-ului (un obiect de tip TcpClient),
prin care se va realiza comunicarea dintre cele doua aplicaţii. De asemenea
clientul va verifica dacă legătura a fost realizată corect (CheckForIllegal-
CrossThreadCalls).

Figura 5.4: Fereastra Client

Sincronizarea celor două fire de execuţie este vitală şi previne deadlock-
ul şi bottleneck-urile posibile ı̂n situaţiile de transfer de date. Pentru a
asigura sincronizarea, mediul de dezvoltare pune la dispoziţie metoda ’Syn-
chronize()’, dar server-ul este nucleul funcţionării corecte şi eficiente a arhi-
tecturii propuse.
Aplicaţia se va testa pornind prima dată serverul şi apoi clientul. Pentru
a ı̂ntrerupe conexiunea se va apăsa butonul Deconectare.

5.2 Modul Chat


Am considerat util crearea unui câmp de chat, astfel se va păstra o discreţie
ı̂ntre asistenţi şi pacient. Recomandările medicilor care se află la unitatea
centrală se vor auzi ı̂n difuzoarele ambulanţei, iar pacientul va auzi ce se
ı̂ntampla ı̂n jurul său. Prin utilizarea acestui câmp se vor evita eventualele
neplăceri. Fereasta este prezentată ı̂n figura 5.5.
Utilizatorul va avea accesul la câmpul de jos, acolo va scrie informaţii
care vor fi stransmise, prin apăsarea butonului Trimite (obiectul creeat ’obj-
Data’ va trimite informatia codata bit cu bit ’System.Text. Encoding.ASCII.

54
Figura 5.5: Fereastra Chat

GetBytes (objData.ToString())’ ).
Căsuţa de sus va contine textul primit de la operatorii aflaţi la server
(afisarea este realizata ı̂ntr-o rubrică ’MessageBox.Show (se.Message)’ prin
intermediul instrucţiunii ’richTextBoxReceivedMsg. AppendText (szData)
care tipăreşte string-ul’ ).

5.3 Modul video


Video-conferinţa presupune ca mai mulţi participanţi să poată comunica
sonor şi vizual ı̂ntre ei, ca şi când s-ar afla ı̂n aceeaşi sală. În cazul de faţă
sistemul este configurat pentru o legatură de tipul punct-la-punct (point-to-
point).
Standardele actuale recunoscute pe plan mondial pentru aparatura de
video-conferinţă sunt: H.320 pentru video - conferinţele ISDN şi H.323 pen-
tru video-conferinţele ı̂n cadrul retele TCP/IP. Iar ı̂n ceea ce constă rata de
trasnfer pentru a asigura o calitate satisfăcătoare a imaginii este de 768Kbps,
astfel se obţin 30 de frame-uri pe secunda.
Pentru realizarea acestui tip de comunicaţie s-a utilizat clasa ’WebCam-
Control’ care asigura interfaţa cu utilizatorul. Fereastra care redă imagini
video este ilustrată ı̂n figura care urmează.
În continuare voi descrie succint câteva din instrucţiunile / metodele
folosite, care au o importanţă mai mare:
• FindCaptureDevice() - identifică dispozitivul
• System.Drawing.SizeF (6F, 13F) - metoda setează dimensiunile imag-
inii primite pentru a se potrivi cu fereastra utilizatorului
• GetInterfaces() - preia blocurile de date
• this.mediaEventEx.FreeEventParams (evCode, evParam1, evParam2)
- setează parametrii pentru a evita blocajele de date

55
Figura 5.6: Modul video

• CaptureGraphBuilder.SetStream (this.graphBuilder); - ı̂ncarcă imag-


inile primite de la camera

• this.videoWindow.put Visible(OABool.True) - face ca imaginea să poată


fi afisată

• this.videoWindow.NotifyOwnerMessage(m.HWnd, m.Msg, m.WParam


.ToInt32(), m.LParam.ToInt32()) - metoda SendMessage transmite
mesaje ferestrei de captură. Sunt necesare diferite supraı̂ncarcări ale
metodei SendMessage deoarece mesajele transmise folosesc parametrii
de formate diferite

• ApplicationException - afişează mesaje de eroare ı̂n funcţie de prob-


lemele pe care le ı̂ntampină

Fereastra utilizator conţine un control ’PictureBox’ ı̂n care se afişează cadrele


preluate de la camera web. În clasa ’WebCamControl’ se crează o instantă
a clasei care porneşte şi opreşte fluxul de date.

5.4 Modul grafice


Sistemul realizat va permite monitorizare continuă a semnelor vitale ale
pacientului aflat ı̂n unitatile sanitare mobile sau fixe (de tip client). Fereastra
server-ului conţine 5 grafice care ı̂nglobează semnalele vitale preluate de un
aparat de monitorizare. Pe primul canal este semnalul ECG, pe al doilea
canal este prima derivată a semnalului ECG, pe canalul cu numărul trei

56
Presiunea Arterial, pe canalul patru este Presiunea Pulmonara şi ı̂n cele din
urma pe canalul cinci este redată variaţia ritmului respitator, figura 5.7.
Fişierul folosit este din baza de date MIT-BIH Arrhythmia Database şi
are numarul 246mgh.

Figura 5.7: Semnalele vitale

Pentru configurarea modulului care trasează graficele am folosit biblioteca


’GraphLib’. Graphics.h conţine funcţii care realizeaza iniţializarea acestui
modul, selectarea culorilor şi setarea diferitelor caracteristici ale setului de
date.
Voi prezenta funcţionalitatea interfeţei prin descrierea celor mai impor-
tante instrucţiuni sau metode folosite, astfel:
• FileStream(”date.dat”, FileMode.OpenOrCreate, FileAccess.Read) -
citire fişier de intrare
• display.Refresh() - execută refresh după fiecare unitate
• display.SetDisplayRangeX(0, 220) - fereastra curenta este descrisă de
220 de unităţi
• src.OnRenderYAxisLabel = RenderYLabel ; display.DataSources[j].
OnRenderXAxisLabel += RenderXLabel - face scalarea după axa or-
izontală, respectiv verticală

57
• ApplyColorSchema() - setează culorile
• System.Drawing.Drawing2D.SmoothingMode.AntiAlias - metodă care
autoseteaza calitatea imaginii, apelănd un dll din windows , prin in-
termediul bibliotecii ’Drawing’
• PrecisionTimer - clasa aceasta aliniază toate semnalele
Opţiunea de tipărire a semnalelor
O facilitate importantă care a fost implementată este listarea datelor la
imprimantă. Medicii au nevoie şi de o astfel de facilitate care le va uşura
munca, pentru că nu de fiecare dată au timp să caute imaginile pe care le
doresc.

Figura 5.8: Facilitatea tipărire

Utilizatorul va avea mai multe opţiuni de tipărire a semnalelor, figura 5.9.


Câmpurile sunt de tip select şi check.
a printDoc.PrinterSettings.PaperSizes - din facilităţile softului impri-
mantei se alege un mod de tipărire dintre cele disponibile
b Orientation SelectedIndexChanged - se va selecta printarea pe verti-
cala sau orizontala a imaginilor
c Scale.Display - există trei opţiuni pentru a afişa rezultatele: ı̂n format
original, scalare pe toata dimensiunea paginii şi ı̂ncadrare optima ı̂n
pagină.

58
Figura 5.9: Optiuni tipărire

59
Capitolul 6

Concluzii

Domeniul telemedicinei este unul ı̂n care consumatorul trebuie să acceada
ı̂nca cu grija, identificarea soluţiilor de e-sănătate adecvate nefiind o sarcină
uşoara pentru cei mai multi. Este important de reţinut că, ı̂n timp ce
Internet-ul este un instrument puternic pentru obţinerea de informaţii din
domeniul medicinei, totuşi, el este numai una din diversitatea surselor de
informaţii existente. Profesioniştii şi specialiştii sunt cei chemaţi sa joace
rolul principal ı̂n instruirea si educarea consumatorilor. Instrumentele menţi-
onate ı̂n aceasta lucrare sunt concepute să uşureze procesul de selectie, atât
pentru medic, cât şi pentru pacient.

Monitorizarea şi ı̂nregistrarea datelor ı̂n biomedicină este parte integrată


a diagnosticului medical şi a mecanismului de control al tratamentului.
Abordările moderne ale tehnicii realizării senzorilor, algoritmilor analitici,
algoritmilor de compresie şi ale tehnicii stocării datelor ı̂mping domeniul spre
evoluţie. Această evoluţie va reduce costurile, timpul şi va oferi o soluţie
viabilă pentru tratarea pacienţilor prin serviciul de telemedicină.

Din varietatea tehnicilor fixe sau mobile se poate stabili ce tehnologie trebuie
folosită ı̂n funcţie de criteriile de selecţie. Luând ı̂n considerare atât soluţiile
ı̂n curs de dezvoltare cât şi pe cele existente deja, fiecare parte medicală dar
şi pacienţii trebuie să obţina cât mai multe beneficii.
Când situaţia necesită o prezentare telemetrică a sănătăţii pacientului,
conexiunile GSM /EGDE sau WiMAX pot fi utilizate. Când specialiştii
ı̂n medicină trebuie să susţină o video-conferinţă sau o intervenţie chirur-
gicală ”live” , pot utiliza tehnici cu benzi largi precum xDSL sau retele IP
(LAN/WAN).

Sistemul de telemedicină conţine şi furnizează informaţii care sunt extrem de


sensibile. Divulgarea sau deteriorarea informaţiilor ı̂ntr-un mod neautorizat
poate fi catastrofală, atât pentru organizaţii cât şi pentru pacienţi. Pen-

60
tru a asigura securitatea sistemelor de telemedicină trebuie aplicate politici
adecvate de securitate, proiecte şi mecanisme de securitate. În plus, tre-
buie asigurat un mediu de lucru sigur şi securizat. Regulile referitoare la
ı̂nfiinţarea unui astfel de mediu sunt coordonate de Commun Criteria.
Cel mai bun sistem de telemedicină practicat ar trebui să ı̂ndeplinească
criteriile TCSEC şi ITSEC. A fi ı̂n conformitate cu aceste standarde asigură
atingerea unui sistem de securitate foarte bine protejat.

Sistemul de telemonitorizare va putea fi folosit ı̂n toate situaţiile de maximă


urgenţă, putând astfel salva vieţi. Caracteristici importante sunt modulari-
tatea şi flexibilitatea sistemului, astfel ı̂ncat nucleul său va permite achiziţia
şi monitorizarea biosemnalelor precum şi a imaginilor video. Astfel se vor
deschide noi orizonturi pentru procedurile practicii medicale.
Sistemul poate fi extins cu noi tipuri de intrari de date, ceea ce ar putea
dezvolta semnificativ interfaţa şi interacţiunea om-calculator.
Tehnologia informaţiei şi sistemul de telecomunicaţii, ı̂n cazul nostru
bazată pe conexiune Internet şi sisteme embedded, concura activ şi eficient
la creşterea calitaţii deciziei medicale, mai ales in situaţii ı̂n care lipsa spe-
cialistului, a profesionistului este ı̂nca o realitate ı̂n mileniul trei.
Telemedicina este va fi un instrument la ı̂ndemana medicilor şi nu un
ı̂nlocuitor al acestora.
Consider că viata unui om este mai importanta decât costurile financiare
legate de implementarea unui sistem de telemonitorizare ı̂n Romania.

61
Bibliografie

[1] Richard Wootton, Victor Patterson (2007) Introduction to


Telemedicine, The Royal Society of Medicine Press , (Wiley Company)
, England.

[2] McDowell CA, Challis Lockyer, Adams White (1987) Teleconferincing


CME programs to rural physicians, (CAN. FAM. PHYSICIAN Vol. 33:
JULY 1987).

[3] Anthony Charles Norris (2005) Essentials of telemedicine and telecare,


(Wiley Company) , England .

[4] Marilyn Jane Field (1999) Telemedicine: a guide to assessing telecom-


munications in health care, (Springer Press), Washington .

[5] Marlene M. Maheu, Pamela Whitten, Ace Allen (2001) E-Health, tele-
health, and telemedicine: a guide to start-up and success, (Wiley Com-
pany) , New York .

[6] Rifat Latifi (2008) Current principles and practices of telemedicine and
e-health, (IOS Press) , Amsterdam.

[7] Richard Wootton, Jennifer Batch (2005) Telepediatrics: telemedicine


and child health, London .

[8] Olga Ferrer-Roca, Marcelo C. Sosa-Iudicissa (2003) Handbook of


telemedicine, (IOS Press) , Amsterdam .

[9] Günter Burg (2006) Telemedicine and teledermatology, (Korgen


Agency) , (Karger) , Basel .

[10] Yang Xiao, Hui Chen (2009) Mobile Telemedicine: A Computing and
Networking Perspective, (CRC Press) , USA .

[11] Thomas William Mayo, Thomas Wm. Mayo, American Health Lawyers
Association, Tara E. Kepler (2008) Telemedicine: survey and analysis
of federal and state laws, USA.

62
[12] Krzysztof Zieliński, Mariusz Duplaga, David Ingram (2006) Informa-
tion Technology Solutions for Healthcare, (Springer - Verlag), London
.

[13] Lodewijk Bos (2008) Mobile Telemedicine: A Medical and Care Com-
punetics, Amsterdam.

[14] Ivan Chorbev, Gjorgji Madzarov, Dragan Mihajlov. (2010) Wireless


Telemedicine as Part of an Integrated System for EMedicine, Replubic
of Macedonia.

[15] Vintilă Petrişor (2009) Tehnologia ZigBee, Romania.

[16] Jeffrey Lee, Sanjeev Oghra (2007) Biomedical Telemedicine, (CSCI


E-170, January 11) Quebec.

[17] Upkar Varshney (2006) Using wireless technologies in healthcare, Geor-


gia.

[18] PhysioBank, MIT-BIH database and Software Catalog


http://ecg.mit.edu/dbinfo.html.

[19] Security Architecture for Open Systems Interconnection for CCITT


Applications http://www.itu.int/itudoc/itu-t/rec/x/x500up/x800.html.

[20] G. Pekhteryev, Sa̧hinoğlu, N. Challa (2008) Real-Time and Secure


Wireless Health Monitoring, (Mitsubishi Electric Research Laboratories,
Inc., 2008), USA.

[21] Titu I. Băjenescu (2009) Aspecte Ale Călităţii În E-Service:


Telemedicină, Videoconferinţe, Multimedia şi Aplicaţii de Bandă Largă
, comunicat: La Conversion, Elvetia.

63
Anexe
Anexa 1: Detecţie QRS prin algoritmul bazat pe amplitudine şi
prima derivată.

clear all; close all; clc;


load(’signal100’);

ekg=SigMIT.Samples(1:8192)/SigMIT.ADCGain;
ekg_fft=fft(ekg);

% ekg=ekg-1.5850;
ekg=ekg-abs(fft(ekg(1)));
ekg_fft=fft(ekg);
fvz=250;
ekg=-ekg;
t=1/fvz:1/fvz:length(ekg)/fvz;

%AMPL. ALGORITM 1

prg1=0.01; prg2=-0.05; prah=0.01*max(ekg);

i=2:length(ekg)-1;
Y1(i)=ekg(i+1)-ekg(i-1);

dalsi=0; k=0;
for i=1:length(ekg)-26;
if Y1(i)>prg1&Y1(i+1)>prg1&Y1(i+2)>prg1,
for j=i+2:i+25,
if (Y1(j)<prg2)&(Y1(j+1)<prg2)&
(sum(Y1(i:j+1)>length(Y1(i:j+1))*prah)),
if dalsi<i,
k=k+1;
qrsAF10z(k)=i;
qrsAF10k(k)=i+40;
dalsi=i+180;
end
end
end
end
end

figure;
plot(t,ekg); hold on;
for i=1:k,
plot(qrsAF10z(i)/fvz,-0.2:0.001:0.2,’r’);

64
end

title(’QRS metoda AF1 ’); xlabel(’t [s]’); ylabel(’Ampl. [mV]’);


set(gcf,’Name’,’QRS Ampl. AF1 ’,’NumberTitle’,’off’,’MenuBar’,’none’);
legend(’EKG’,’detectie QRS’);
% saveas(gcf,’QRS_AF1’,’jpg’);

Figura 1: Graficul obţinut prin aplicarea metodei AF1

% AMPL. 2
prah=0.1*max(ekg);

for i=1:length(ekg),
if ekg(i)>prah,
Y1(i)=ekg(i);
else
Y1(i)=prah;
end
end

k=0; dalsi=0;
for i=2:length(ekg)-1,
Y2(i)=Y1(i+1)-Y1(i-1);
if Y2(i)>0.01
if dalsi<i,
k=k+1;
qrsAF20z(k)=i;
qrsAF20k(k)=i+40;
dalsi=i+180;
end
end
end

figure;

65
plot(t,ekg); hold on;
for i=1:k,
plot(qrsAF20z(i)/fvz,-0.2:0.001:0.2,’r’);
end

title(’QRS AF2’); xlabel(’t[s]’); ylabel(’Amplit. [mV]’);


set(gcf,’Name’,’DET QRS AF2’,’NumberTitle’,’off’,’MenuBar’,’none’);
legend(’EKG’,’Det. QRS’);
% saveas(gcf,’QRS_AF2’,’jpg’);

Figura 2: Graficul obţinut prin aplicarea metodei AF2

% AMPL. 3
prah=0.10;
i=2:length(ekg)-1;
Y1(i)=ekg(i+1)-ekg(i-1);

k=0;dalsi=0;
for i=1:length(ekg)-2,
if Y1(i)>prah&Y1(i+1)>prah&Y1(i+2)>prah&Y1(i+2)>prah,
if Y1(i)*ekg(i)>0&Y1(i+1)*ekg(i+1),
if dalsi<i,
k=k+1;
qrsAF30z(k)=i;
qrsAF30k(k)=i+40;
dalsi=i+140;
end
end
end
end

figure;
plot(t,ekg); hold on;
for i=1:k,

66
plot(qrsAF30z(i)/fvz,-0.2:0.001:0.2,’r’);
end

title(’QRS metoda AF3’); xlabel(’t [s]’); ylabel(’Ampl. [mV]’);


set(gcf,’Name’,’DET QRS AF3’,’NumberTitle’,’off’,’MenuBar’,’none’);
legend(’EKG’,’Det QRS’);
% saveas(gcf,’QRS_AF3_1261’,’jpg’);

Figura 3: Graficul obţinut prin aplicarea metodei AF2

67
Anexa 2: Algoritmi de detectie complex qrs.

close all; clear all;

sigfile = {’sigcor1.mat’,’sigmit1.mat’,’sigmit2.mat’,
’goldstandard.mat’};
alg = {’balda’,’okada’,’menard’};

for fileNo = 1:length(sigfile),

% ************ ***********
load(char(sigfile(fileNo)));
sf = SamplingFrequency;
siglen = length(signal);
if (siglen < sf*30)
signal = signal(1:end);
else
signal = signal(1:30*sf);
end
siglen = length(signal);
smed = signal - median(signal);

% ***************** filtrare ******************


sigf = signal;

[B,A] = butter(2,0.3/sf,’high’);
sigf = filter(B,A,sigf);

[B,A] = butter(2,60/sf);
sigf = filter(B,A, sigf);

fd = 50; %
BW = 2; %
w0 = 2*pi*(fd/sf); %
omega = 2*pi*(BW/sf); %

a1 = 2*cos(w0)/(1+tan(omega/2));
a2 = (1-tan(omega/2))/(1+tan(omega/2));
B = [(1+a2)/2 -a1 (1+a2)/2];
A = [1 -a1 a2];

sigf = filter(B,A,sigf);
sfmed = sigf - median(sigf);
%sigf(find(sigf > 60)) = 60;
%sigf(find(sigf < -10)) = -5;
% ************* grafic*********
offs = 2500;
figure;

68
subplot(2,1,1);
plot(signal(offs:end)); %
subplot(2,1,2);
plot(sigf(offs:end)); %
% ************* spectru *************
nb=2^13;
nb2=nb/2;
S = fft(signal(offs:end),nb2);
SF = fft(sigf(offs:end),nb2);
w=((0:nb2-1)/nb2*sf)’;
Sa=abs(S(1:nb2));
SFa=abs(SF(1:nb2));
figure; grid on; zoom on;
subplot(2,1,1);
plot(w,Sa,’b’);
xlabel(’Frekvence (Hz)’);
ylabel(’Magnituda FFT’);
title(’Spectru’);
axis([5 140 min(min(Sa(5:256))) max(max(Sa(5:256)))]);
subplot(2,1,2);
plot(w,SFa,’r’);
xlabel(’Frevcventa (Hz)’);
ylabel(’Mag. FFT’);
title(’Spectru semnal filtrat’);
axis([5 140 min(min(SFa(5:256))) max(max(SFa(5:256)))]);
figure;

for method = 1:length(alg)


subplot(3,1,method);
[xQ, yQ, xR, yR, xS, yS] = qrs_detect(sigf(offs:end), char(alg(method)));
plot(sigf(offs:end));
hold on;
plot(xQ, yQ,’g*’);
plot(xR, yR,’r*’);
plot(xS, yS,’y*’);
title(char(alg(method)));
end

end

69
Anexa 3: Codul aferent aplicatiei.

A. Client-ul
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{

byte[] m_dataBuffer = new byte[10];


IAsyncResult m_result;
public AsyncCallback m_pfnCallBack;
public Socket m_clientSocket;

public Form1()
{
InitializeComponent();
label2.Text = GetIP();
textBox1.Text = GetIP();
textBox2.Text = "8000";
RichTextBox.CheckForIllegalCrossThreadCalls = false;
}

String GetIP()
{
String strHostName = Dns.GetHostName();

IPHostEntry iphostentry = Dns.GetHostByName(strHostName);

String IPStr = "";


foreach (IPAddress ipaddress in iphostentry.AddressList)
{
IPStr = ipaddress.ToString();
return IPStr;
}
return IPStr;
}

70
private void Form1_Load(object sender, EventArgs e)
{

public void WaitForData()


{
try
{
if (m_pfnCallBack == null)
{
m_pfnCallBack = new AsyncCallback(OnDataReceived);
}
SocketPacket theSocPkt = new SocketPacket();
theSocPkt.thisSocket = m_clientSocket;

m_result = m_clientSocket.BeginReceive
(theSocPkt.dataBuffer,
0, theSocPkt.dataBuffer.Length,
SocketFlags.None,
theSocPkt);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}

}
public class SocketPacket
{
public System.Net.Sockets.Socket thisSocket;
public byte[] dataBuffer = new byte[1];
}

public void OnDataReceived(IAsyncResult asyn)


{
try
{
SocketPacket theSockId = (SocketPacket)asyn.AsyncState;
int iRx = theSockId.thisSocket.EndReceive(asyn);
char[] chars = new char[iRx + 1];
System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);
System.String szData = new System.String(chars);
if (richTextRxMessage.Lines.Length > 6)
richTextRxMessage.Text = "";
richTextRxMessage.Text = richTextRxMessage.Text + szData;
WaitForData();

71
}
catch (ObjectDisposedException)
{
System.Diagnostics.Debugger.Log(0, "1",
"\nOnDataReceived: Socket has been closed\n");
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
private void UpdateControls(bool connected)
{
button1.Enabled = !connected;
button2.Enabled = connected;
string connectStatus = connected ? "Connected" : "Not Connected";
textBoxConnectStatus.Text = connectStatus;
}

private void button1_Click(object sender, EventArgs e)


{
if (textBox1.Text == "" || textBox2.Text == "")
{
MessageBox.Show("Introduce-ti IP server si PORT\n");
return;
}
try
{
UpdateControls(false);

m_clientSocket = new Socket(AddressFamily.InterNetwork,


SocketType.Stream, ProtocolType.Tcp);

IPAddress ip = IPAddress.Parse(textBox1.Text);
int iPortNo = System.Convert.ToInt16(textBox2.Text);

IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo);

m_clientSocket.Connect(ipEnd);
if (m_clientSocket.Connected)
{

UpdateControls(true);

WaitForData();
}
}
catch (SocketException se)

72
{
string str;
str = "\nConnection failed,
is the server running?\n" + se.Message;
MessageBox.Show(str);
UpdateControls(false);
}

private void button3_Click(object sender, EventArgs e)


{
try
{
Object objData = richTextTxMessage.Text+"\n";
richTextTxMessage.Text = "";
byte[] byData = System.Text.Encoding.ASCII.GetBytes
(objData.ToString());
if (m_clientSocket != null)
{
m_clientSocket.Send(byData);
}
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}

private void button2_Click(object sender, EventArgs e)


{
try
{
Object objData = "~";

byte[] byData = System.Text.Encoding.ASCII.GetBytes


(objData.ToString());
if (m_clientSocket != null)
{
m_clientSocket.Send(byData);
}
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}

if (m_clientSocket != null)
{

73
m_clientSocket.Close();
m_clientSocket = null;
UpdateControls(false);
}
}
}
}

B. Server-ul
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;

namespace GraficDisplay
{
using GraphLib;
using System.IO;

public partial class MainForm : Form


{

private int NumGraphs = 5;


private String CurExample = "STACKED";
private String CurColorSchema = "GRAY";
private PrecisionTimer.Timer mTimer = null;
private DateTime lastTimerTick = DateTime.Now;
private float[] date = new float[5800];

const int MAX_CLIENTS = 2;

public AsyncCallback pfnWorkerCallBack;


private Socket m_mainSocket;
private Socket[] m_workerSocket = new Socket[10];
private int m_clientCount = 0;

public MainForm()
{
InitializeComponent();
RichTextBox.CheckForIllegalCrossThreadCalls = false;
Label.CheckForIllegalCrossThreadCalls = false;

74
display.Hide();
label2.Text = GetIP();
display.Smoothing = System.Drawing.Drawing2D.
SmoothingMode.AntiAlias;
read_file();

CalcDataGraphs();

display.Refresh();

UpdateGraphCountMenu();

UpdateColorSchemaMenu();

mTimer = new PrecisionTimer.Timer();


mTimer.Period = 40;
mTimer.Tick += new EventHandler(OnTimerTick);
lastTimerTick = DateTime.Now;
mTimer.Start();
}

public class SocketPacket


{
public System.Net.Sockets.Socket m_currentSocket;
public byte[] dataBuffer = new byte[1];
}

private void UpdateControls( bool listening )


{
button3.Enabled = !listening;
button4.Enabled = listening;
}

public void OnClientConnect(IAsyncResult asyn)


{

try
{
m_workerSocket[m_clientCount] =
m_mainSocket.EndAccept(asyn);

WaitForData(m_workerSocket[m_clientCount]);

++m_clientCount;

String str = String.Format


("Client # {0} connected", m_clientCount);
textBoxMsg.Text = str;

75
m_mainSocket.BeginAccept(new AsyncCallback
(OnClientConnect), null);
}
catch (ObjectDisposedException)
{
System.Diagnostics.Debugger.Log(0, "1", "\n
OnClientConnection: Socket has been closed\n");
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}

public void WaitForData(System.Net.Sockets.Socket soc)


{
try
{
if (pfnWorkerCallBack == null)
{

pfnWorkerCallBack = new AsyncCallback


(OnDataReceived);
}
SocketPacket theSocPkt = new SocketPacket();
theSocPkt.m_currentSocket = soc;

soc.BeginReceive(theSocPkt.dataBuffer, 0,
theSocPkt.dataBuffer.Length,
SocketFlags.None,
pfnWorkerCallBack,
theSocPkt);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}

public void OnDataReceived(IAsyncResult asyn)


{
try
{
SocketPacket socketData = (SocketPacket)
asyn.AsyncState;

76
int iRx = 0;

iRx = socketData.m_currentSocket.EndReceive(asyn);
char[] chars = new char[iRx + 1];
System.Text.Decoder d = System.Text.Encoding.
UTF8.GetDecoder();
int charLen = d.GetChars(socketData.dataBuffer,
0, iRx, chars, 0);
System.String szData = new System.String(chars);
if (szData.Contains("~"))
{
m_clientCount--;
display.Hide();
webCamControl21.Hide();

}
if (richTextBoxReceivedMsg.Lines.Length > 6)
richTextBoxReceivedMsg.Text = "";
richTextBoxReceivedMsg.AppendText(szData);

WaitForData(socketData.m_currentSocket);
}
catch (ObjectDisposedException)
{
System.Diagnostics.Debugger.Log(0, "1",
"\nOnDataReceived: Socket has been closed\n");
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}

void ButtonStopListenClick(object sender, System.EventArgs e)


{
CloseSockets();
UpdateControls(false);
}

void CloseSockets()
{
if (m_mainSocket != null)
{
m_mainSocket.Close();
}
for (int i = 0; i < m_clientCount; i++)
{
if (m_workerSocket[i] != null)

77
{
m_workerSocket[i].Close();
m_workerSocket[i] = null;
}
}
}

String GetIP()
{
String strHostName = Dns.GetHostName();

IPHostEntry iphostentry =
Dns.GetHostByName(strHostName);

String IPStr = "";


foreach (IPAddress ipaddress in iphostentry.AddressList)
{
IPStr = ipaddress.ToString();
return IPStr;
}
return IPStr;
}

private void read_file()


{
FileStream file = new FileStream("date.txt",
FileMode.OpenOrCreate, FileAccess.Read);
StreamReader sr = new StreamReader(file);
string s = sr.ReadToEnd();
string[] numere = s.Split(’;’);
int nr = Convert.ToInt32(numere[0]);
for (int i = 0; i < (numere.Length - 1);i++)
date[i] = Convert.ToInt32(numere[i+1]);

int j = 0;
for (int i = nr;i < 5800; i++)
{
if (j == nr)
j = 0;
date[i] = date[j];
j++;

sr.Close();
file.Close();

78
}

protected override void OnClosed(EventArgs e)


{
mTimer.Stop();
mTimer.Dispose();
base.OnClosed(e);
}
private void OnTimerTick(object sender, EventArgs e)
{
if (m_clientCount == 0)
{
display.Hide();
webCamControl21.Hide();
}
if (CurExample == "ANIMATED_AUTO" )
{
try
{
TimeSpan dt = DateTime.Now - lastTimerTick;

}
}
private void RefreshGraph()
{
display.Refresh();
}

protected void CalcTrace(DataSource src, int idx)


{
Random random = new Random();

for (int i = 0; i < src.Length; i++)


{
src.Samples[i].x = i;

if (idx == 0)
{
for (int i = 0; i < src.Length; i++)
{
src.Samples[i].y = date[i];
}
}

79
else if (idx == 1)
{
for (int i = 0; i < src.Length; i++)
{
src.Samples[i].y = date1[i];
}

}
else if (idx == 2)
{
for (int i = 0; i < src.Length; i++)
{
src.Samples[i].y = date2[i];
}

else if (idx == 3)
{
for (int i = 0; i < src.Length; i++)
{
src.Samples[i].y = date3[i];
}

}
else if (idx == 4)
{
for (int i = 0; i < src.Length; i++)
{
src.Samples[i].y = date4[i];
}

src.OnRenderYAxisLabel = RenderYLabel;
}

private void ApplyColorSchema()


{
switch (CurColorSchema)
{
case "DARK_GREEN":
{

80
Color[] cols = { Color.FromArgb(0,255,0),
Color.FromArgb(0,255,0),
Color.FromArgb(0,255,0),
Color.FromArgb(0,255,0),
Color.FromArgb(0,255,0) ,
Color.FromArgb(0,255,0),

for (int j = 0; j < NumGraphs; j++)


{
display.DataSources[j].GraphColor = cols[j % 7];
}

display.BackgroundColorTop =
Color.FromArgb(0, 64, 0);
display.BackgroundColorBot =
olor.FromArgb(0, 64, 0);
display.SolidGridColor = Color.FromArgb(0, 128, 0);
display.DashedGridColor = Color.FromArgb(0, 128, 0);
}
break;
case "WHITE":
{
Color[] cols = { Color.DarkRed,
Color.DarkSlateGray,
Color.DarkCyan,
Color.DarkGreen,
Color.DarkBlue ,
Color.DarkMagenta,
Color.DeepPink };

for (int j = 0; j < NumGraphs; j++)


{
display.DataSources[j].GraphColor = cols[j%7];
}

display.BackgroundColorTop = Color.White;
display.BackgroundColorBot = Color.White;
display.SolidGridColor = Color.LightGray;
display.DashedGridColor = Color.LightGray;
}
break;

case "BLUE":
{
Color[] cols = { Color.Red,
Color.Orange,
Color.Yellow,
Color.LightGreen,
Color.Blue ,

81
Color.DarkSalmon,
Color.LightPink };

for (int j = 0; j < NumGraphs; j++)


{
display.DataSources[j].GraphColor = cols[j%7];
}

display.BackgroundColorTop = Color.Navy;
display.BackgroundColorBot =
Color.FromArgb(0, 0, 64);
display.SolidGridColor = Color.Blue;
display.DashedGridColor = Color.Blue;
}
break;

case "GRAY":
{
Color[] cols = { Color.DarkRed,
Color.DarkSlateGray,
Color.DarkCyan,
Color.DarkGreen,
Color.DarkBlue ,
Color.DarkMagenta,
Color.DeepPink };

for (int j = 0; j < NumGraphs; j++)


{
display.DataSources[j].GraphColor =
cols[j % 7];
}

display.BackgroundColorTop = Color.White;
display.BackgroundColorBot = Color.LightGray;
display.SolidGridColor = Color.LightGray;
display.DashedGridColor = Color.LightGray;
}
break;

case "RED":
{
Color[] cols = { Color.DarkCyan,
Color.Yellow,
Color.DarkCyan,
Color.DarkGreen,
Color.DarkBlue ,
Color.DarkMagenta,
Color.DeepPink };

82
for (int j = 0; j < NumGraphs; j++)
{
display.DataSources[j].GraphColor = cols[j % 7];
}

display.BackgroundColorTop = Color.DarkRed;
display.BackgroundColorBot = Color.Black;
display.SolidGridColor = Color.Red;
display.DashedGridColor = Color.Red;
}
break;

case "LIGHT_BLUE":
{
Color[] cols = { Color.DarkRed,
Color.DarkSlateGray,
Color.DarkCyan,
Color.DarkGreen,
Color.DarkBlue ,
Color.DarkMagenta,
Color.DeepPink };

for (int j = 0; j < NumGraphs; j++)


{
display.DataSources[j].GraphColor = cols[j % 7];
}

display.BackgroundColorTop = Color.White;
display.BackgroundColorBot =
Color.FromArgb(183,183,255);
display.SolidGridColor = Color.Blue;
display.DashedGridColor = Color.Blue;
}
break;

case "BLACK":
{
Color[] cols = { Color.FromArgb(255,0,0),
Color.FromArgb(0,255,0),
Color.FromArgb(255,255,0),
Color.FromArgb(64,64,255),
Color.FromArgb(0,255,255) ,
Color.FromArgb(255,0,255),
Color.FromArgb(255,128,0) };

for (int j = 0; j < NumGraphs; j++)


{
display.DataSources[j].GraphColor =
cols[j % 7];

83
}

display.BackgroundColorTop = Color.Black;
display.BackgroundColorBot = Color.Black;
display.SolidGridColor = Color.DarkGray;
display.DashedGridColor = Color.DarkGray;
}
break;
}

protected void CalcDataGraphs( )


{

this.SuspendLayout();

display.DataSources.Clear();
display.SetDisplayRangeX(0, 220);

for (int j = 0; j < NumGraphs; j++)


{
display.DataSources.Add(new DataSource());

display.DataSources[j].OnRenderXAxisLabel +=
RenderXLabel;

switch (CurExample)
{
case "NORMAL":
this.Text = "Normal Graph";
display.DataSources[j].Length = 5800;
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.NORMAL;
display.DataSources[j].AutoScaleY = false;
display.DataSources[j].SetDisplayRangeY(-300, 300);
display.DataSources[j].SetGridDistanceY(100);
display.DataSources[j].OnRenderYAxisLabel = RenderYLabel;

break;

case "NORMAL_AUTO":
this.Text = "Normal Graph Autoscaled";
display.DataSources[j].Length = 5800;
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.NORMAL;
display.DataSources[j].AutoScaleY = true;
display.DataSources[j].SetDisplayRangeY(-250, 250);
display.DataSources[j].SetGridDistanceY(100);

84
display.DataSources[j].OnRenderYAxisLabel = RenderYLabel;
break;

case "STACKED":
this.Text = "Stacked Graph";
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.STACKED;
display.DataSources[j].Length = 5800;
display.DataSources[j].AutoScaleY = false;
display.DataSources[j].SetDisplayRangeY(-80,80);
display.DataSources[j].SetGridDistanceY(100);

break;

case "VERTICAL_ALIGNED":
this.Text = "Vertical aligned Graph";
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.VERTICAL_ARRANGED;

display.DataSources[j].Length = 5800;
display.DataSources[j].AutoScaleY = false;
display.DataSources[j].SetDisplayRangeY(-300, 300);
display.DataSources[j].SetGridDistanceY(100);

break;

case "VERTICAL_ALIGNED_AUTO":
this.Text = "Vertical aligned Graph autoscaled";
display.PanelLayout = P
display.DataSources[j].Length = 5800;
display.DataSources[j].AutoScaleY = true;
display.DataSources[j].SetDisplayRangeY(-300, 300);
display.DataSources[j].SetGridDistanceY(100);

break;

case "TILED_VERTICAL":
this.Text = "Tiled Graphs (vertical prefered)";
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.TILES_VER;
display.DataSources[j].Length = 5800;
display.DataSources[j].AutoScaleY = false;
display.DataSources[j].SetDisplayRangeY(-300, 600);
display.DataSources[j].SetGridDistanceY(100);

break;

case "TILED_VERTICAL_AUTO":
this.Text = "Tiled Graphs (vertical prefered) autoscaled";

85
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.TILES_VER;
display.DataSources[j].Length = 5800;
display.DataSources[j].AutoScaleY = true;
display.DataSources[j].SetDisplayRangeY(-300, 600);
display.DataSources[j].SetGridDistanceY(100);

break;

case "TILED_HORIZONTAL":
this.Text = "Tiled Graphs (horizontal prefered)";
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.TILES_HOR;
display.DataSources[j].Length = 5800;
display.DataSources[j].AutoScaleY = false;
display.DataSources[j].SetDisplayRangeY(-300, 600);
display.DataSources[j].SetGridDistanceY(100);

break;

case "TILED_HORIZONTAL_AUTO":
this.Text = "Tiled Graphs (horizontal prefered) autoscaled";
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.TILES_HOR;
display.DataSources[j].Length = 5800;
display.DataSources[j].AutoScaleY = true;
display.DataSources[j].SetDisplayRangeY(-300, 600);
display.DataSources[j].SetGridDistanceY(100);

break;

case "ANIMATED_AUTO":

this.Text = "Animated graphs fixed x range";


display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.TILES_HOR;
display.DataSources[j].Length = 402;
display.DataSources[j].AutoScaleY = false;
display.DataSources[j].AutoScaleX = true;
display.DataSources[j].SetDisplayRangeY(-300, 500);
display.DataSources[j].SetGridDistanceY(100);
display.DataSources[j].XAutoScaleOffset = 50;

display.DataSources[j].OnRenderYAxisLabel = RenderYLabel;
break;
}
}

display.DataSources[0].Name = "I";

86
display.DataSources[1].Name = "II" ;
display.DataSources[2].Name = "III" ;
display.DataSources[3].Name = "IV" ;
display.DataSources[4].Name = "V";
ApplyColorSchema();

this.ResumeLayout();
display.Refresh();

private String RenderXLabel(DataSource s, int idx)


{
if (s.AutoScaleX)
{
//if (idx % 2 == 0)
{
int Value = (int)(s.Samples[idx].x );
return "" + Value;
}
return "";
}
else
{
int Value = (int)(s.Samples[idx].x / 200);
String Label = "" + Value + "\"";
return Label;
}
}

private String RenderYLabel(DataSource s, float value)


{
return String.Format("{0:0.0}", value);
}

protected override void OnClosing(CancelEventArgs e)


{
display.Dispose();

base.OnClosing(e);
}

private void stackedToolStripMenuItem_Click


(object sender, EventArgs e)
{
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.NORMAL;
}

87
private void verticalALignedToolStripMenuItem_Click
(object sender, EventArgs e)
{
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.VERTICAL_ARRANGED;
}

private void tiledVerticallyToolStripMenuItem_Click


(object sender, EventArgs e)
{
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.TILES_VER;
}

private void tiledHorizontalyToolStripMenuItem_Click


(object sender, EventArgs e)
{
display.PanelLayout =
PlotterGraphPaneEx.LayoutMode.TILES_HOR;
}

private void noneToolStripMenuItem_Click


(object sender, EventArgs e)
{
display.Smoothing =
System.Drawing.Drawing2D.SmoothingMode.None;
}

private void antiAliasedToolStripMenuItem_Click


(object sender, EventArgs e)
{
display.Smoothing =
System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
}

private void highSpeedToolStripMenuItem_Click


(object sender, EventArgs e)
{
display.Smoothing =
System.Drawing.Drawing2D.SmoothingMode.HighQuality;
}

private void highQualityToolStripMenuItem_Click


(object sender, EventArgs e)
{
display.Smoothing =
System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
}

88
private void normalToolStripMenuItem_Click
(object sender, EventArgs e)
{
CurExample = "NORMAL";
CalcDataGraphs();
}

private void normalAutoscaledToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurExample = "NORMAL_AUTO";
CalcDataGraphs();
}

private void stackedToolStripMenuItem_Click_1


(object sender, EventArgs e)
{
CurExample = "STACKED";
CalcDataGraphs();
}

private void verticallyAlignedToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurExample = "VERTICAL_ALIGNED";
CalcDataGraphs();
}

private void
verticallyAlignedAutoscaledToolStripMenuItem_Click
(object sender, EventArgs e)
{
CurExample = "VERTICAL_ALIGNED_AUTO";
CalcDataGraphs();
}

private void tiledVerticalToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurExample = "TILED_VERTICAL";
CalcDataGraphs();
}

private void
tiledVerticalAutoscaledToolStripMenuItem_Click
(object sender, EventArgs e)
{
CurExample = "TILED_VERTICAL_AUTO";
CalcDataGraphs();

89
}

private void tiledHorizontalToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurExample = "TILED_HORIZONTAL";
CalcDataGraphs();
}

private void tiledHorizontalAutoscaledToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurExample = "TILED_HORIZONTAL_AUTO";
CalcDataGraphs();
}

private void animatedGraphDemoToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurExample = "ANIMATED_AUTO";
CalcDataGraphs();
}

private void blueToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurColorSchema = "BLUE";
CalcDataGraphs();
UpdateColorSchemaMenu();
}

private void whiteToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurColorSchema = "WHITE";
CalcDataGraphs();
UpdateColorSchemaMenu();
}

private void grayToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurColorSchema = "GRAY";
CalcDataGraphs();
UpdateColorSchemaMenu();
}

private void lightBlueToolStripMenuItem_Click

90
(object sender, EventArgs e)
{
CurColorSchema = "LIGHT_BLUE";
CalcDataGraphs();
UpdateColorSchemaMenu();

private void blackToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurColorSchema = "BLACK";
CalcDataGraphs();
UpdateColorSchemaMenu();
}

private void redToolStripMenuItem_Click


(object sender, EventArgs e)
{
CurColorSchema = "RED";
CalcDataGraphs();
UpdateColorSchemaMenu();
}

private void UpdateColorSchemaMenu()


{
blueToolStripMenuItem.Checked = false;
whiteToolStripMenuItem.Checked = false;
grayToolStripMenuItem.Checked = false;
lightBlueToolStripMenuItem.Checked = false;
blackToolStripMenuItem.Checked = false;
redToolStripMenuItem.Checked = false;

if (CurColorSchema == "WHITE")
whiteToolStripMenuItem.Checked = true;
if (CurColorSchema == "BLUE")
blueToolStripMenuItem.Checked = true;
if (CurColorSchema == "GRAY")
grayToolStripMenuItem.Checked = true;
if (CurColorSchema == "LIGHT_BLUE")
lightBlueToolStripMenuItem.Checked = true;
if (CurColorSchema == "BLACK")
blackToolStripMenuItem.Checked = true;
if (CurColorSchema == "RED")
redToolStripMenuItem.Checked = true;
}

private void UpdateGraphCountMenu()

91
{
toolStripMenuItem2.Checked = false;
toolStripMenuItem3.Checked = false;
toolStripMenuItem4.Checked = false;
toolStripMenuItem5.Checked = false;
toolStripMenuItem6.Checked = false;

switch (NumGraphs)
{
case 1: toolStripMenuItem2.Checked = true; break;
case 2: toolStripMenuItem3.Checked = true; break;
case 3: toolStripMenuItem4.Checked = true; break;
case 4: toolStripMenuItem5.Checked = true; break;
case 5: toolStripMenuItem6.Checked = true; break;

}
}
private void toolStripMenuItem2_Click
(object sender, EventArgs e)
{
NumGraphs = 1;
CalcDataGraphs();
UpdateGraphCountMenu();
}

private void toolStripMenuItem3_Click


(object sender, EventArgs e)
{
NumGraphs = 2;
CalcDataGraphs();
UpdateGraphCountMenu();
}

private void toolStripMenuItem4_Click


(object sender, EventArgs e)
{
NumGraphs = 3;
CalcDataGraphs();
UpdateGraphCountMenu();
}

private void toolStripMenuItem5_Click


(object sender, EventArgs e)
{
NumGraphs = 4;
CalcDataGraphs();
UpdateGraphCountMenu();

92
}

private void toolStripMenuItem6_Click


(object sender, EventArgs e)
{
NumGraphs = 5;
CalcDataGraphs();
UpdateGraphCountMenu();
}

private void display_Load(object sender, EventArgs e)


{

private void button1_Click(object sender, EventArgs e)


{
if (m_clientCount > 0)
{
webCamControl21.Show();
display.Show();

display.Start();

}
else
MessageBox.Show("Nici un client conectat!");

private void button2_Click(object sender, EventArgs e)


{

private void MainForm_Load(object sender, EventArgs e)


{

private void button3_Click(object sender, EventArgs e)


{
try
{

if (textBoxPort.Text == "")
{

93
MessageBox.Show("Please enter a Port Number");
return;
}
string portStr = textBoxPort.Text;
int port = System.Convert.ToInt32(portStr);
// Create the listening socket...
m_mainSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, port);

m_mainSocket.Bind(ipLocal);

m_mainSocket.Listen(4);

m_mainSocket.BeginAccept
(new AsyncCallback(OnClientConnect), null);

UpdateControls(true);

}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}

private void button4_Click(object sender, EventArgs e)


{

CloseSockets();
UpdateControls(false);

private void button5_Click(object sender, EventArgs e)


{
try
{
Object objData = richTextBox1.Text+ "\n";
richTextBox1.Text = "";
byte[] byData = System.Text.Encoding.ASCII.GetBytes
(objData.ToString());
for (int i = 0; i < m_clientCount; i++)
{
if (m_workerSocket[i] != null)
{
if (m_workerSocket[i].Connected)
{

94
m_workerSocket[i].Send(byData);
}
}
}

}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}

private void richTextBox1_KeyDown


(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
button5_Click(sender, e);
}
}

}
}

C. WebCam
using System;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using DirectShowLib;
using System.Runtime.InteropServices.ComTypes;

namespace WebCamControl
{

public partial class WebCamControl : UserControl


{
public enum PlayState : int
{
Stopped,
Paused,
Running,
Init
}

private PlayState CurrentState = PlayState.Stopped;


private int WM_GRAPHNOTIFY = Convert.ToInt32("0X8000", 16) + 1;

95
private IVideoWindow videoWindow = null;
private IMediaControl mediaControl = null;
private IMediaEventEx mediaEventEx = null;
private IGraphBuilder graphBuilder = null;
private ICaptureGraphBuilder captureGraphBuilder = null;

public WebCamControl2()
{
InitializeComponent();
}

private void WebCamControl_Load


(object sender, System.EventArgs e)
{
this.Resize += new
System.EventHandler(WebCamControl_Resize);
CaptureVideo();
}

private void InitializeComponent()


{
this.SuspendLayout();
//
// WebCamControl2
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Name = "WebCamControl2";
this.Size = new System.Drawing.Size(176, 165);
this.Load += new System.EventHandler(this.WebCamControl_Load);
this.ResumeLayout(false);

private void CaptureVideo()


{
int hr = 0;
IBaseFilter sourceFilter = null;
try
{
GetInterfaces();

hr = this.captureGraphBuilder.SetFiltergraph
(this.graphBuilder);
DsError.ThrowExceptionForHR(hr);

sourceFilter = FindCaptureDevice();

hr = this.graphBuilder.AddFilter

96
(sourceFilter, "WebCamControl Video");
DsError.ThrowExceptionForHR(hr);

hr = this.captureGraphBuilder.RenderStream
(PinCategory.Preview, MediaType.Video, sourceFilter, null, null);
Debug.WriteLine(DsError.GetErrorText(hr));
DsError.ThrowExceptionForHR(hr);

Marshal.ReleaseComObject(sourceFilter);

SetupVideoWindow();

hr = this.mediaControl.Run();
DsError.ThrowExceptionForHR(hr);

this.CurrentState = PlayState.Running;
}
catch (Exception ex)
{
MessageBox.Show("An unrecoverable error has
occurred.\r\n" + ex.ToString());
}
}

private void GetInterfaces()


{
this.graphBuilder = (IGraphBuilder)(new FilterGraph());
this.captureGraphBuilder = (ICaptureGraphBuilder2)
(new CaptureGraphBuilder2());
this.mediaControl = (IMediaControl)this.graphBuilder;
this.videoWindow = (IVideoWindow)this.graphBuilder;
this.mediaEventEx = (IMediaEventEx)this.graphBuilder
int hr = this.mediaEventEx.SetNotifyWindow
(this.Handle, WM_GRAPHNOTIFY, IntPtr.Zero);

DsError.ThrowExceptionForHR(hr);
}

private IBaseFilter FindCaptureDevice()


{
UCOMIEnumMoniker classEnum = null;
UCOMIMoniker[] moniker = new UCOMIMoniker[1];
object source = null;

ICreateDevEnum devEnum =
(ICreateDevEnum)(new CreateDevEnum());
int hr = devEnum.CreateClassEnumerator
(FilterCategory.VideoInputDevice, out classEnum, CDef.None);
DsError.ThrowExceptionForHR(hr);

97
Marshal.ReleaseComObject(devEnum);

int none = 0;

if (classEnum.Next(moniker.Length, moniker, out none) == 0)


{
Guid iid = typeof(IBaseFilter).GUID;
moniker[0].BindToObject(null, null, ref iid, out source);
}
else
{
throw new ApplicationException
("Unable to access video capture device!");
}

Marshal.ReleaseComObject(moniker[0]);
Marshal.ReleaseComObject(classEnum);

return (IBaseFilter)source;
}

private void SetupVideoWindow()


{
int hr = 0;

hr = this.videoWindow.put_Owner(this.Handle);
DsError.ThrowExceptionForHR(hr);

hr = this.videoWindow.put_WindowStyle
(WindowStyle.Child | WindowStyle.ClipChildren);
DsError.ThrowExceptionForHR(hr);
WebCamControl_Resize(this, null);
hr = this.videoWindow.put_Visible(OABool.True);
DsError.ThrowExceptionForHR(hr);
}

protected override void WndProc(ref Message m)


{
if (m.Msg == WM_GRAPHNOTIFY)
{
HandleGraphEvent();
}
if (this.videoWindow != null)
{
m.WParam.ToInt32() = m.LParam.ToInt32();
}
base.WndProc(ref m);
}

98
private void HandleGraphEvent()
{
int hr = 0;
EventCode evCode = 0;
int evParam1 = 0;
int evParam2 = 0;

while (this.mediaEventEx != null &&


this.mediaEventEx.GetEvent
(out evCode, out evParam1, out evParam2, 0) == 0)
{
hr = this.mediaEventEx.FreeEventParams
(evCode, evParam1, evParam2);
DsError.ThrowExceptionForHR(hr);
}
}

private void ReleaseInterfaces()


{
if (this.mediaControl != null)
this.mediaControl.StopWhenReady();

this.CurrentState = PlayState.Stopped;

if (this.mediaEventEx != null)
this.mediaEventEx.SetNotifyWindow
(IntPtr.Zero, WM_GRAPHNOTIFY, IntPtr.Zero);

if (this.videoWindow != null)
{
this.videoWindow.put_Visible(OABool.False);
this.videoWindow.put_Owner(IntPtr.Zero);
}

Marshal.ReleaseComObject(this.mediaControl);
this.mediaControl = null;

Marshal.ReleaseComObject(this.mediaEventEx);
this.mediaEventEx = null;

Marshal.ReleaseComObject(this.videoWindow);
this.videoWindow = null;

Marshal.ReleaseComObject(this.graphBuilder);
this.graphBuilder = null;

99
Marshal.ReleaseComObject(this.captureGraphBuilder);
this.captureGraphBuilder = null;
}

private void WebCamControl_Resize(object sender, System.EventArgs e)


{

if (this.videoWindow != null)
this.videoWindow.SetWindowPosition
(0, 0, this.Width, this.ClientSize.Height);
}
}
}

C. Facilitatea printare

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;

namespace GraphLib
{
public partial class PrintPreviewForm : Form
{
private PrintDocument printDoc = new PrintDocument();
private PlotterGraphPaneEx gpane = null;
private String strDefaultPrinter = String.Empty;

private bool bBestScale = false;


private bool bPageScale = false;
private bool bUnscaled = false;
private bool bLandscape = false;
private int selPrinterIndex = -1;

public PrintPreviewForm()
{
InitializeComponent();

printPreviewCtrl.Zoom = 1;
rb_BestFit.Checked = true;
rb_Scale.Checked = false;
rb_Unscaled.Checked = false;
cb_Orientation.SelectedIndex = 0;

100
printDoc.PrintPage += new
PrintPageEventHandler(printDoc_PrintPage);
this.VisibleChanged +=
new EventHandler(OnVisibleChanged);
FormClosing +=
new FormClosingEventHandler(OnFormClosing);
}

void FillInInstalledPrinters()
{
strDefaultPrinter =
printDoc.PrinterSettings.PrinterName;
cb_Printer.Items.Clear();
foreach (String strPrinter in
PrinterSettings.InstalledPrinters)
{
cb_Printer.Items.Add(strPrinter);

if (strPrinter == strDefaultPrinter)
{
cb_Printer.SelectedIndex =
cb_Printer.Items.IndexOf(strPrinter);
}
}
}

void OnVisibleChanged(object sender, EventArgs e)


{
if (this.Visible)
{
bLandscape = cb_Orientation.SelectedIndex == 1;

FillInInstalledPrinters();

FillInPaperSizes();

UpdateScaleRadioButtons();

InvalidatePrintPreview();
}
else
{

}
}

void OnFormClosing(object sender, FormClosingEventArgs e)


{
this.Hide();

101
e.Cancel = true;
}

void UpdateScaleRadioButtons()
{
bBestScale = rb_BestFit.Checked;
bPageScale = rb_Scale.Checked;
bUnscaled = rb_Unscaled.Checked;
}

double AutoZoomPreview()
{
float zoom = 1.0f;
float step = 0.05f;

float PaperWidth =
printDoc.DefaultPageSettings.PaperSize.Width;
float PaperHeight =
printDoc.DefaultPageSettings.PaperSize.Height;

if (bLandscape)
{
PaperHeight =
printDoc.DefaultPageSettings.PaperSize.Width * zoom;
PaperWidth =
printDoc.DefaultPageSettings.PaperSize.Height * zoom;
}

while (zoom > 0.1f)


{
double CurW = PaperWidth * zoom;
double CurH = PaperHeight * zoom;

if (splitContainer1.Panel1.Width < (CurW+10)


|| splitContainer1.Panel1.Height < (CurH+10))
{
zoom -= step;
}
else
{
break;
}
}

return zoom;
}

void FillInPaperSizes()
{

102
cb_PaperSize.Items.Clear();

foreach (PaperSize s in
printDoc.PrinterSettings.PaperSizes)
{
cb_PaperSize.Items.Add(s.PaperName.ToString());
}

if (cb_PaperSize.SelectedIndex == -1 ||
cb_PaperSize.SelectedIndex >= cb_PaperSize.Items.Count)
{
int idx = cb_PaperSize.Items.IndexOf
(printDoc.DefaultPageSettings.PaperSize.PaperName);

if (idx >= 0 && idx < cb_PaperSize.Items.Count)


{
cb_PaperSize.SelectedIndex = idx;
}
else
{
cb_PaperSize.SelectedIndex = 0;
}
}
}

void InvalidatePrintPreview()
{
printDoc.DefaultPageSettings.Landscape = bLandscape;
printPreviewCtrl.Document = printDoc;
printPreviewCtrl.Document.DocumentName = "Preview";
printPreviewCtrl.Zoom = AutoZoomPreview();
printPreviewCtrl.InvalidatePreview();
}

public PlotterGraphPaneEx GraphPanel


{
set
{
gpane = value;
}
}

private void AutoScaleDocument


(ref float w, ref float h, ref float x, ref float y)
{
float CurGraphWidth = gpane.Width;
float CurGraphHeight = gpane.Height;
float CurPaperWidth =

103
printDoc.DefaultPageSettings.PaperSize.Width;
float CurPaperHeight =
printDoc.DefaultPageSettings.PaperSize.Height;

if (bLandscape)
{
CurPaperWidth =
printDoc.DefaultPageSettings.PaperSize.Height;
CurPaperHeight =
printDoc.DefaultPageSettings.PaperSize.Width;
}

if (bPageScale)
{
CurGraphWidth = CurPaperWidth;
CurGraphHeight = CurPaperHeight;
}

if (bBestScale)
{
float zoom = 1.0f;
float step = 0.05f;

if (CurGraphWidth > (CurPaperWidth ) ||


CurGraphHeight > (CurPaperHeight ))
{
// scale down
while ((zoom * gpane.Width > CurPaperWidth ||
zoom * gpane.Height > CurPaperHeight) && zoom > step)
{
zoom -= step;
}
zoom -= step;

}
else if (CurGraphWidth < CurPaperWidth &&
CurGraphHeight < CurPaperHeight)
{

while (((zoom+step) * gpane.Width <


CurPaperWidth && (zoom+step) * gpane.Height <
CurPaperHeight) && zoom > step)
{
zoom += step;
}

}
CurGraphWidth = zoom * gpane.Width;

104
CurGraphHeight = zoom * gpane.Height;
}

w = CurGraphWidth;
h = CurGraphHeight;

// center print
x = (CurPaperWidth - w) / 2.0f;
y = (CurPaperHeight - h) / 2.0f;
}

private void printDoc_PrintPage


(object sender, PrintPageEventArgs e)
{
if (gpane != null)
{
float x=0, y=0, w=gpane.Width, h=gpane.Height;

AutoScaleDocument(ref w, ref h, ref x, ref y);


e.Graphics.SmoothingMode =
System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
gpane.PaintControl(e.Graphics, w, h, x, y, false);
}
}

private void bt_print_Click(object sender, EventArgs e)


{
if (printDoc != null)
{
printDoc.Print();
this.Hide();
}
}

private void bt_Cancel_Click(object sender, EventArgs e)


{
this.Hide();
}

private void cb_PaperSize_SelectedIndexChanged


(object sender, EventArgs e)
{
if (cb_PaperSize.SelectedIndex >= 0 &&
cb_PaperSize.SelectedIndex < cb_PaperSize.Items.Count)
{

foreach (PaperSize s in
printDoc.PrinterSettings.PaperSizes)
{

105
if (s.PaperName ==
(string)cb_PaperSize.Items[cb_PaperSize.SelectedIndex])
{
printDoc.DefaultPageSettings.PaperSize = s;
InvalidatePrintPreview();
}
}
}
}

private void rb_BestFit_CheckedChanged


(object sender, EventArgs e)
{
if (rb_BestFit.Checked)
{
rb_Scale.Checked = !rb_BestFit.Checked;
rb_Unscaled.Checked = !rb_BestFit.Checked;
}

UpdateScaleRadioButtons();
InvalidatePrintPreview();
}

private void rb_Scale_CheckedChanged


(object sender, EventArgs e)
{
if (rb_Scale.Checked)
{
rb_BestFit.Checked = !rb_Scale.Checked;
rb_Unscaled.Checked = !rb_Scale.Checked;
}

UpdateScaleRadioButtons();
InvalidatePrintPreview();
}

private void rb_Unscaled_CheckedChanged


(object sender, EventArgs e)
{
if (rb_Unscaled.Checked)
{
rb_Scale.Checked = !rb_Unscaled.Checked;
rb_BestFit.Checked = !rb_Unscaled.Checked;
}

UpdateScaleRadioButtons();
InvalidatePrintPreview();
}

106
private void cb_Printer_SelectedIndexChanged
(object sender, EventArgs e)
{
selPrinterIndex = cb_Printer.SelectedIndex;

if (selPrinterIndex >= 0 && selPrinterIndex <


cb_Printer.Items.Count)
{
printDoc.PrinterSettings.PrinterName =
(string)cb_Printer.Items[selPrinterIndex];
this.Text = "Print Preview - " +
printDoc.PrinterSettings.PrinterName;
}

FillInPaperSizes();

InvalidatePrintPreview();
}

private void cb_Orientation_SelectedIndexChanged


(object sender, EventArgs e)
{
if (cb_Orientation.SelectedIndex == 0)
{
bLandscape = false;
}
else
{
bLandscape = true;
}

InvalidatePrintPreview();
}

private void cb_PrintBackground_CheckedChanged


(object sender, EventArgs e)
{
InvalidatePrintPreview();
}

private void printPreviewCtrl_Click


(object sender, EventArgs e)
{

}
private void groupBox1_Enter
(object sender, EventArgs e)
}

107
}

108

S-ar putea să vă placă și