Скачиваний:
7
Добавлен:
01.12.2022
Размер:
4 Кб
Скачать
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