МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра биотехнических систем и технологий
ОТЧЕТ
по лабораторной работе №6
по дисциплине «Методы обработки и анализа биомедицинских сигналов и данных»
Тема: Анализ пульсоксиметрического сигнала.
Вариант 4
Студентки гр. 0502 |
|
Лиоско Е.П. Потько А.А. |
Преподаватель |
|
Калиниченко А.Н. |
Санкт-Петербург
2022
Цель работы: изучение метода расчета уровня насыщения артериальной
крови кислородом по пульсоксиметрическому сигналу.
Задачи работы:
Подготовить программу, реализующую алгоритм обнаружения QRS-комплексов ЭКГ.
Используя информацию о положении обнаруженных QRS-комплексов, рассчитать по пульсоксиметрическим сигналам параметр SaO2.
Текст программы
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))
Рисунок
1: Графики сигналов и показатель SaO2
Выводы: в ходе работы был изучен метод расчета уровня насыщения артериальной крови кислородом по пульсоксиметрическому сигналу, написана программа реализующая алгоритм обнаружения QRS-комплексов ЭКГ. В графическом окне получены графики ЭКГ, графики пульсометрических сигналов, график дифференцированного с помощью разностного уравнения сигнала. С помощью массива модулей отсчетов дифференцированного сигнала, получен сигнал, содержащий всплески в местах расположения QRS-комплексов. Рассчитан показатель SaO2 (94.7174%).