Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МОБС 28.09.14..docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
537 Кб
Скачать
☆

6. Реализация программ для выделения rr интервалов на экг и определения времени изгнания по сигналу трансторакальной реограммы в среде Delphi

Приведем основные используемые функции и процедуры:

////Нахождение максимального значения ЭКГ

function MaxEKG:real;

var j:integer;

begin

Result:=C[2,0];

for j:=1 to Length(C[2])-1 do

if C[2,j]>Result then Result:=C[2,j];

end;

////Нахождение максимального значения дифференцированной реограммы

function MaxDifReo:real;

var j:integer;

begin

Result:=C[5,0];

for j:=1 to Length(C[5])-1 do

if C[5,j]>Result then Result:=C[5,j]

end;

////нахождение порогового значения (для поиска R-зубцов)

procedure TForm1.PorR;

var j:integer; sum,max:real;

begin sum:=0;

for j:=0 to Length(C[2])-1 do

sum:=sum+C[2,j];

max:=C[2,0];

for j:=1 to Length(C[2])-1 do

if C[2,j]>max then max:=C[2,j];

PorogR:=Round(sum/(Length(C[2])-1)+max/2);

end;

////нахождение R-зубцов

procedure TForm1.MaxR;

var j,p,k:integer;

Ry,Rx:real;

begin

Image1.Canvas.Brush.Style:=bsClear;

Image1.Canvas.Font.Color:=clBlack;

Image1.Canvas.Pen.Color:=clBlack;

for j:=0 to Length(C[2])-1 do

if (C[2,j]<=PorogR) and (C[2,j+1]>PorogR) then

begin

for k:=j+1 to Length(C[2])-1 do

if ((C[2,k]>PorogR) and (C[2,k+1]<=PorogR)) then

begin

Rx:=j+1;

Ry:=C[2,j+1];

for p:=j+1 to k do

if C[2,p]>Ry then

begin

Ry:=C[2,p];

Rx:=p;

end;

Image1.Canvas.MoveTo(round((Rx)*w),round(a1+(-1)*Ry*q)+e);

Image1.Canvas.LineTo(round((Rx)*w),round(a1+(-1)*Ry*q)-e);

end;

end;

end;

////нахождение максимумов дифференцированной реограммы

procedure TForm1.MaxM;

var Mx,a,j,k,p:integer;

My:real;

begin

Image1.Canvas.Brush.Style:=bsClear;

Image1.Canvas.Font.Color:=clRed;

Image1.Canvas.Pen.Color:=clRed;

SetLength(ARR,1);

ARR[0]:=1;

a:=2;

for j:=0 to Length(C[5])-1 do

if ((C[5,j]<PorogM) and (C[5,j+1]>PorogM)) then

begin

for k:=j+1 to Length(C[5])-1 do

if ((C[5,k]>PorogM) and (C[5,k+1]<PorogM)) then

begin

Mx:=j+1;

My:=C[2,j+1];

for p:=j+1 to k do

if C[5,p]>My then

begin

My:=C[5,p];

Mx:=p;

end;

if Mx>ARR[a-2] then

begin

SetLength(ARR,a);

ARR[a-1]:=round(Mx);

a:=a+1; ////заполнение массива координатами точек максимума дифференцированной реограммы по оси Х

Image1.Canvas.MoveTo(round((Mx)*w3),round(a3+(-1)*My*q3)+e);

Image1.Canvas.LineTo(round((Mx)*w3),round(a3+(-1)*My*q3)-e);

end;

end;

end;

ARR[a-1]:=round(Length(C[5])-1);

end;

////Нахождение точек начала изгнания крови по диф. реограмме

procedure TForm1.GelZ;

var b,e9:integer;

Max,Px:real;

begin

Image1.Canvas.Brush.Style:=bsClear;

Image1.Canvas.Font.Color:=clBlue;

Image1.Canvas.Pen.Color:=clBlue;

Px:=1;

for b:=0 to Length(ARR)-2 do

begin

Max:=0.0000000001;

for e9:=ARR[b] to ARR[b+1] do

begin

if ((C[5,e9+1]-C[5,e9])/(1/Gc)>Max) and (C[5,e9]>0) then

begin

Max:=(C[5,e9+1]-C[5,e9])/(1/Gc);

Px:=e9;

end;

end;

Image1.Canvas.MoveTo(round((Px)*w3),round(a3+5)+e*2);

Image1.Canvas.LineTo(round((Px)*w3),round(a3+5)-e*2);

end;

end;

////Нахождение точек конца изгнания крови по диф. реограмме

procedure TForm1.GelY;

var b,e9,Px,Px2:integer;

Min1,Min2:real;

begin

Image1.Canvas.Brush.Style:=bsClear;

Image1.Canvas.Font.Color:=clBlack;

Image1.Canvas.Pen.Color:=clBlack;

Px:=1;

Px2:=1;

for b:=1 to Length(ARR)-1 do

begin

Min1:=C[5,ARR[b]];

for e9:=ARR[b] to ARR[b+1] do

if Min1>C[5,e9] then

begin

Min1:=C[5,e9];

Px:=e9;

end;

Min2:=C[5,ARR[b]];

for e9:=ARR[b] to Px-1 do

if ((Min2>C[5,e9]) and ((C[5,e9-1]<C[5,e9]) and (C[5,e9]<C[5,e9+1])) ) then

begin

Min2:=C[5,e9];

Px2:=e9;

end;

if Px2 = 1 then Px2:=Px;

Image1.Canvas.Brush.Style:=bsClear;

Image1.Canvas.Font.Color:=clGreen;

Image1.Canvas.Pen.Color:=clGreen;

Image1.Canvas.MoveTo(round((Px2)*w3),round(a3+5)+e*2);

Image1.Canvas.LineTo(round((Px2)*w3),round(a3+5)-e*2);

Image1.Canvas.Brush.Style:=bsClear;

Image1.Canvas.Font.Color:=clBlack;

Image1.Canvas.Pen.Color:=clBlack;

Image1.Canvas.MoveTo(round((Px)*w3),round(a3+5)+e*2);

Image1.Canvas.LineTo(round((Px)*w3),round(a3+5)-e*2);

end;

end;

Рисунок 10 – «Опорная» электрокардиограмма (EKG) с выделенными R-зубцами, трансторакальная реограмма (REO), 1-ая производной трансторакальной реограммы – диффреограмма (DIFF) с выделенными моментами начала и окончания изгнания.