Скачиваний:
5
Добавлен:
01.12.2022
Размер:
4.43 Кб
Скачать
clc
clear
close all

%Алгоритм обнаружения QRS-комплексов ЭКГ
S=load('W6_04.txt'); % сигнал ЭКГ и 2 пульсоксиметрических сигнала
N=length(S);
ECG=S(1:N,1);
Puls_R=S(1:N,2);
Puls_IR=S(1:N,3);

X0=0; % Координата “x” (на экране) нижнего левого угла окна
Y0=0; % Координата “y” (на экране) нижнего левого угла окна
W0=1800; % Ширина окна
H0=800; % Высота окна
figure('Position',[X0,Y0,W0,H0]) % Создание окна

x1=50; % Координата "x" (в окне) нижнего левого угла 1-го поля
y1=100; % Координата "y" (в окне) нижнего левого угла 1-го поля
dy=50;
w=1200; % Ширина
h=100; % Высота

hAxes1=axes('Units','pixels','Position',[x1,y1,w,2*h]);
hAxes2=axes('Units','pixels','Position',[x1,y1+2*h+dy,w,h]);
hAxes3=axes('Units','pixels','Position',[x1,y1+3*h+2*dy,w,h]);
hAxes4=axes('Units','pixels','Position',[x1,y1+4*h+3*dy,w,h]);

%Вывод пульсоксиметрических сигналов
axes(hAxes1)
Fs=500;
T=1/Fs;
tmax=length(S)*T;
t=0:T:tmax-T;
plot (t,Puls_R+50)
hold on
plot (t,Puls_IR-450)
ylim([-800 400])
xlim([0 tmax])
title ('Пульсоксиметрические сигналы')

%Вывод графика ЭКГ
axes(hAxes4)
plot (t,ECG)
xlim([0 tmax])
title ('Сигнал ЭКГ')

%Дифференцирование сигнала ЭКГ
axes(hAxes3)
X=zeros(1,N);
Y=zeros(1,N);

for n=1:N
X(n)=ECG(n);
end

for n=3:N
Y(n)=X(n)-X(n-2);
end

hold on
plot (t,Y,'k')
ylim([-150 100])
xlim([0 tmax])
title ('Дифференцированный сигнал ЭКГ')

%Рассчет массива модулей отсчетов диф. сигнала
axes(hAxes2)

ECG_Dif=abs(Y);
Limit=35;
XLimit(1)=0;
XLimit(2)=tmax-T;
YLimit(1:2)=Limit;
line(XLimit, YLimit)

Jmax=100;
k=0;
j=Jmax;
for i=1:N
j=j+1;
if (ECG_Dif(i)>Limit)&&(j>Jmax)
k=k+1;
QRS (k)=i;
j=0;
end
end

hold on
plot (t,ECG_Dif)
xlim([0 tmax])
title ('Массив модулей отсчетов диф-го и взятого по модулю сигнала ЭКГ')

%Расчет уровня насыщения крови кислородом
axes(hAxes1)
YLimits=get(hAxes1,'YLim');
for i=1:k
XLimits(1:2)=QRS(i)*T;
HLine=line(XLimits,YLimits);
set (HLine,'LineStyle','--')
end

%Средний размах пульсоксиметрических сигналов
D1=0;
for i=1:(k-1)
clear m1
m1=Puls_R(QRS(i):QRS(i+1));
D1=D1+(max(m1)-min(m1));
end
D1=D1/(k-1);% средний размах 1го сигнала

D2=0;
for i=1:(k-1)
clear m2
m2=Puls_IR(QRS(i):QRS(i+1));
D2=D2+(max(m2)-min(m2));
end
D2=D2/(k-1);

a=D2/D1;
SaO2=(0.872-0.16*a)*100/(0.14*a+0.754);

hTxt1=uicontrol('Style','text','String','SaO2=',...
'Position',[2*x1+w,2*h,x1,x1/2],'BackgroundColor',[1 1 1]);
hEd=uicontrol('Style','edit','Position', [3*x1+w,2*h,x1,x1/2],...
'BackgroundColor',[1 1 1],'HorizontalAlignment','left');
set(hEd,'String',num2str(SaO2))


for i=1:k
tt(i,1)=QRS(i)*T;
end

for i=1:k
for j=1:249
tt(i,j+1)=tt(i,j)+T;
end
end


for i=1:k
for j=QRS(i):250+QRS(i)
FKG1(i,j)=ECG(j,1);
end
end

R=1;
for i=1:k
m=QRS(R)-1;
for j=1:250
FKG2(i,j)=FKG1(i,j+m);
end
R=R+1;
end



for i=1:k
for m=1:k
for j=1:250
s1(1,j)=FKG2(i,j);
s2(1,j)=FKG2(m,j);
end
VKF=xcorr(s1,s2,'coeff');
KVK(i,m)=VKF(1,250);
end
end


KVKmean=mean(KVK,2);
KVK3=mean(KVK,'all');

FKG_mean=zeros(1,250);
for i=1:k
for j=1:250
FKG_mean(1,j)=FKG_mean(1,j)+ FKG2(i,j);%сумма всех ФКГ
end
end

for j=1:250
FKG_mean(1,j)=FKG_mean(1,j)/k;% средняя ФКГ
end

t3(1,1)=0;
for j=1:249
t3(1,j+1)=t3(1,j)+T;% время соот 1 комплексу QRS
end

Y3min=0;
Y3max=0;
for j=1:250
if Y3min>FKG_mean(j)
Y3min=FKG_mean(j);
end
if Y3max<FKG_mean(j)
Y3max=FKG_mean(j);
end
end
axes(hAxes4)
%ylim([Y3min Y3max])
plot (t3,FKG_mean)


Соседние файлы в папке ЛР_6