
- •Реферат
- •Введение
- •Описание метода наименьших квадратов.
- •Разработка алгоритма выделения кардиоимпульсов по фотоплетизмографическому сигналу в среде Delphi Pascal.
- •Разработка прикладного по выделения кардиоимпульса (листинг программы).
- •Тестирование программного обеспечения на сигнале фпг.
- •Заключение
- •Список использованых источников
Разработка прикладного по выделения кардиоимпульса (листинг программы).
var
pf: array [0..100] of Real;
fph: array [0..3,0..4100] of Real;
plez: TextFile;
lett, st: string;
tme, pp, sx2,sxy,prd: Real;
i, itec, j, j2, nd, k, okr, znd, itr: Integer;
wtf: Boolean;
label 1;
begin
1: i:=0; nd:=0;
k:=0; repeat fph[3,k]:=0; k:=k+1; until k=4100; k:=0;
wtf:=True; AssignFile(plez,'1.txt');
reset(plez);
tme:=StrToFloat(edt1.Text);
pp:=StrToFloat(edt2.Text);
okr:=StrToint(edt3.Text);
mmo1.Lines.Clear;
repeat
Readln(plez,lett);
fph[0,i]:=Round(i*tme*1000)/1000;
fph[1,i]:=(-1)*StrToFloat(lett);
if i>pp+1 then
begin
sx2:=0;sxy:=0;
itr:=trunc(pp/2);
j:=-itr;
repeat
sx2:=sx2+j*j;
sxy:=sxy+j*fph[1,i-itr+j];
j:=j+1;
until j>itr;
fph[2,i-itr]:=sxy/sx2*20;
if fph[2,i-itr]<0 then fph[2,i-itr]:=-sxy/sx2*20;
end
else fph[2,i-itr]:=0;
if fph[2,i-itr-1]>=fph[2,i-itr] then
if fph[2,i-itr-1]>=fph[2,i-itr-2]then
fph[3,i-itr-1]:=fph[2,i-itr-1];
j:=i-okr;
itec:=i-trunc(okr/2);
repeat
if fph[3,j]>fph[3,itec] then fph[3,itec]:=0;
if fph[3,j]=fph[3,itec] then
if itec<>j then fph[3,j]:=0;
j:=j+1;
until j>i-1;
if fph[3,itec]>0 then
begin
if wtf=False then
begin
pf[k]:=1/prd;
if k>0 then if k/3=Trunc(k/3) then
st:=FloatToStrF(pf[k],ffFixed,4,3)+'| '+FloatToStrF((pf[k-2]+pf[k-1]+ +pf[k])/3,ffFixed,4,3)+'| _____'
else st:=FloatToStrF(pf[k],ffFixed,4,3)+'| _____| _____';
if k=0 then st:=FloatToStrF(pf[k],ffFixed,4,3)+'| _____| _____';
mmo1.Lines.Add(st);
k:=k+1;
prd:=0;
end
else
begin
mmo1.Lines.Add('1 пер. | 3 пер.');
prd:=0;
wtf:=False;
end;
end;
i:=i+1;
prd:=prd+tme;
nd:=nd+1;
until Eof(plez);
CloseFile(Plez);
end;
Тестирование программного обеспечения на сигнале фпг.
Испытаем разработанный алгоритм на фотоплетизмограмме. Для удобства визуального контроля используем процедуру построения графиков из массивов fph[1,0..nd], fph[2,0..nd], fph[3,0..nd], соответствующим фотоплетизмограмме (черный цвет), её производной (зеленый цвет), импульсам вершин зубьев производной(красный цвет). Причём nd соответствует количеству произведенных измерений. Временные данные берутся из массива fph[0,i..nd].
При запуске программы видно две кнопки (Рис. 4.) - «Начало» и «График», а также три изменяемых строки: «Период дискретизации» , «Окрестность для выборки вершин производной» и «Количество точек для квадратичной аппроксимации». В строках можно менять данные в пределах возможностей переменных, то есть в первой строке можно вводить любые числа, в остальных двух только целые, везде только положительные.
Рисунок 4. Запуск программы.
При нажатии кнопки «Начало» запускается выше разработанный алгоритм, а также выводятся на экран посчитанные частоты под надписью «частота кровенаполнения» (Рис. 5.).
Рисунок 5. Нажатие кнопки «Начало».
Кнопка «График» служит командой к построению графических зависимостей вышеупомянутых величин(Рис. 6.). Также появляются полосы прокрутки, которыми можно просмотреть на всем протяжении времени, и на всем амплитудном диапазоне.
Рисунок 6. Нажатие кнопки «График».
Параметр «Период дискретизации» влияет только на частоту кровенаполнения и метки координат на графике. Параметр «Количество точек для квадратичной аппроксимации» меняет вид производной, и соответственно влияет на работу блока по отысканию вершин зубцов производной. На рисунке 7 наглядно видно, как располагаются вершины зубцов, вычисленные при разных количествах точек для аппроксимации(сверху вниз): 3 точки, 11 точек, 19 точек. На самом нижнем графике появился лишний импульс, что сильно меняет частоту, выдаваемую программой.
Рисунок 7. Демонстрация производных при разных количествах точек аппроксимации.
Также влияет на появление погрешностей в подсчете частоты выбор окрестности. Можно визуально наблюдать разницу при изменение параметра «Окрестность для выборки вершин производной». Для примера возьмём две величины этого параметра (Рис. 8.): 150 точек и 250 точек(сверху вниз).
Рисунок 8. Демонстрация выборки зубцов при разных окрестностях.
Делая вывод, можно сказать, что для хорошей и точной работы программы необходимо подстраивать её под пациента и частоту дискретизации фотоплетизмографа, для этого лучше предварительно снять фотоплетизмограмму и на ней сделать необходимые поправки на значения переменных.