Sunteți pe pagina 1din 5

Etapa 3

Determinarea parametrilor semnificativi a semnalelor achizitionate:


- Determinarea parametrilor semnificativi (explicatia acestora) – detectie ritm cardiac
(bpm) si linie isometrica
- Calculul unor parametri derivati (descrierea metodei de calcul)

Detectia ritmului cardiac (bpm)

Ritmul cardiac este alcatuit din grupuri de unde P,Q,R,S,T periodice. Ritmul general al unei persoane se
incadreaza intre valorile 60 si 70 bpm.

[fname, fpath] = uigetfile ('*.txt', 'Select EKG ...');


fid = fopen (strcat (fpath, fname),'r'); %deschid fisierul pt citire
s = fscanf(fid, '%f', inf); %citeste toate val pana la capatul fisierului
s = s-mean(s);%elimina offset-ul din semnal

fs=200; %frecventa de esantionare de valoare 200 Hz/cu cat se face achizitia


len = length(s); %lungimea semnalului achizitionat
t = [0 : len-1] / fs; %generare vector timp cu pas de 0.005

figure(1);subplot(211);plot (t,s); title ('Semnal EKG intrare');

%Calculam functia de autocorelatie pt 900 valori


N = 900;
step = 1; % 1sec= 200 valori => din secunda in secunda calculeaza ritmul cardiac
j = 1;
for win = 1 : step: len-N+1
x = s(win : win+N-1);%fereastra curenta de N esantioane
Cxx = zeros(1,N); %toate val din Cxx sunt egale cu 0
for k = 0 : N-1
for n = 1 : N-k
Cxx(k+1)= Cxx(k+1)+ x(n)* x(n+k); %calculam functia de autocorelatie
end
end
figure(1); subplot (212); plot (Cxx); title ('F-ctie autocorelatie');

%cautam maximul doar intre 60 si 300 (bpm=[40,200]de la Tmin= 60/200= 0.3s


*fs=
%60 esant si Tmax=60/40= 1.5s*fs=30es)

Tmin = 60/200*fs; %perioada minima


Tmax = 60/40*fs; %perioada maxima
[val,poz] = max(Cxx(Tmin:Tmax)); %functia din Matlab ce calcueaza maximul lui
Cxx
poz = poz + Tmin-1; %pozitionare in semnalul initial
bpm(j)= 60/(poz/fs); %calcul ritm cardiac: impart 1 min=60sec la pozitia
maxima pe care a gasit-o impartita la fs
j=j+1; %se incrementeaza variabila j

figure(1);subplot(311);plot (t,s); title ('Semnal EKG intrare');


hold on; plot (t(win:win+N-1), x, 'r'); hold off; %apare cu rosu portiune pt
care s-a calculat

figure(1); subplot (312); plot (Cxx); title ('F-ctie autocorelatie');


hold on; %nu sterge graficul si il mentine
plot(poz,val,'or'); % 'or'- o e cerculet si r e pt red
hold off;
% pause(0.5);
end
figure(1); subplot(313); plot(bpm); axis([1 j 0 max(bpm)*1.1]); %mai las un 10% in
plus ca sa nu fie lipita marginea de sus

Detectia liniei isometrice

Linia isometrica reprezinta linia pe care este pozitionat semnalul EKG si cu ajutorul ei se pot detecta
undele P,Q,R,S,T ale semnalului EKG.

[fname, fpath] = uigetfile ('*.txt', 'Select EKG ...');


fid = fopen (strcat (fpath, fname),'r'); % deschide fisierul pentru citire
s = fscanf(fid, '%f', inf); %citeste toate val pana la capatul fisierului
fclose(fid); %elibereaza fisierul deschis in modul read

fs=200; %frecventa de esantionare de valoare 200 Hz/cu cat se face achizitia


len = length(s); %lungimea semnalului achizitionat
t = [0 : len-1] / fs; %generare vector timp cu pas de 0.005

%s=filter(ones(1,9), [1 zeros(1,7)],s); %filtru digital

figure(1);subplot(211);plot (t,s); title ('Semnal EKG intrare'); %afisare semnal


EKG de intrare

%Calcul histograma
s_min = min(s); %calculare valoare minima din semnal (amplitudine)
s_max = max(s); %calculare valoare maxima din semnal(amplitudine)
n_interv = 100; %nr de intervale, cu cat este mai mare,cu atat precizia este mai
mare
delta = (s_max - s_min)/n_interv; %durata unui interval din cele 100 definite de
n_interv

h = zeros(1,n_interv); %toate cele 100 de elemente sunt 0


for i = 1 : len
poz = floor((s(i) - s_min)/delta)+1; % rezulta un nr in virgula mobila
%pt rotunjire se fol floor; mai pun +1 pt ca in C primul elem al
%vectorului este 0,iar in matlab este 1
if s(i)== s_max, poz = n_interv; end %cand se atinge val max a semnalului,
pozitia ia valoarea 100 (n_interv)
h(poz) = h(poz)+1; %se incrementeaza h(poz)
end
interv= [1 : n_interv] * delta - delta/2 + s_min;
figure(1); subplot(212); plot(interv,h); title('Histograma semnal integrat');
axis tight;
% derivata este cea care ne spune despre panta daca este crescatoare
% sau descrescatoare (derivata pozitiva=> panta cresc, panta neg=>
% panta descr)

%Determinare maxim histograma


h_max= h(1); poz_max = 1; %pornesc din conditii initiale cu pp ca h_max este h(1)
si implicit poz_max este 1
for i = 2 : n_interv
if h_max < h(i), h_max = h(i); poz_max = i; end %se cauta maximul din
histograma prin comparatii succesive
end
%[h_max, poz_max] = max(h); %functie din Matlab care calculeaza maximul
i=poz_max; %i ia valoarea poz_max
poz_linie = (h(i) * i + h(i-1) * (i-1) + h(i+1) * (i+1)) / (h(i)+ h(i-1)+
h(i+1)); %determina pozitia liniei isometrice
isoline = poz_linie * delta-delta/2 + s_min;%determina linia isometrica
figure(1); subplot(212); hold on; plot(interv(poz_max), h_max, 'or'); hold off;

figure(1); subplot(211); hold on; line([t(1) t(len)] , [isoline isoline], 'Color',


'r','LineWidth' , 2); hold off;
Tabel valori (durate) intervale din semnalul EKG

Unda P are in mod normal durata cuprinsa intre 0.06-0.10s.


Segmentul PR are in mod normal durata cuprinsa intre 0.06-0.10 s.
Complexul QRS are in mod normal durata cuprinsa intre 0.08-0.1 s.
Unda T are in mod normal durata cuprinsa intre 0.13-0.30 s.

Nr crt Unda P (s) Unda Q (s) Unda R (s) Unda S (s) Unda T (s)
1 0.245-0.340 0.340-0.385 0.385-0.435 0.435-0.540 0.540-0.710
2 0.880-0.995 0.995-1.060 1.060-1.105 1.105-1.185 1.185-1.340
3 1.520-1.680 1.680-1.720 1.720-1.760 1.760-1.820 1.820-2.01
4 2.185-2.335 2.335-2.375 2.375-2.415 2.415-2.460 2.460-2.665
5 2.685-2.925 2.925-3.000 3.000-3.045 3.045-3.075 3.075-3.29
6 3.400-3.555 3.555-3.620 3.620-3.665 3.665-3.700 3.700-3.910
7 4.105-4.205 4.205-4.255 4.250-4.290 4.290-4.315 4.315-4.525
8 4.690-4.805 4.805-4.855 4.855-4905 4.905-4.945 4.945-5.160
9 5.285-5.415 5.415-5.480 5.480-5.525 5.525-5.550 5.550-5.770
10 5.910-6.030 6.030-6.110 6.110-6.145 6.145-6.170 6.170-6.390