МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра БТС
ОТЧЕТ по лабораторной работе №8
по дисциплине «ПСОБМД» Тема: Классификация ЭКГ с помощью ВКФ
Вариант 4
Студентка гр. 7501 |
|
Фалевская А.А. |
|
Студент гр. 7501 |
|
Исаков А.О. |
|
Преподаватель |
|
|
Ровша М.В. |
Санкт-Петербург
2020
Цель работы: ознакомление с использованием взаимной
корреляционной функции для классификации форм сигналов.
Задание на выполнение работы:
Выполнить расчет ВКФ для фрагментов реальной ЭКГ,
содержащих QRS-комплексы, относящиеся к фоновому ритму и к патологии.
Используя значение ВКФ, осуществить разбиение QRS-
комплексов ЭКГ на два класса по сходству их форм.
1. Расчет ВКФ для фрагментов реальной записи ЭКГ
Текст программы Start.m для создания окна и вывода полученных сигналов:
clc clear all close all
global hAxes1 hAxes2 hAxes3 hAxes4 hAxes5 hAxes6 hAxes7 hAxes8 hEdit hBtn
x0=200;
y0=50;
w0=1100;
h0=700;
figure('Color',[1 1 1],'Position',[x0,y0,w0,h0])
x1=50;
y1=50;
dy=30;
dx=50;
w=250;
h=140; hAxes6=axes('Units','pixels','Position',[x1,y1,w,h]); hAxes3=axes('Units','pixels','Position',[x1,y1+h+dy,w,h]); hAxes7=axes('Units','pixels','Position',[x1+w+dx,y1,w,h]);
hAxes4=axes('Units','pixels','Position',[x1+w+dx,y1+h+dy,w,h]); hAxes8=axes('Units','pixels','Position',[x1+2*w+2*dx,y1,w,h]); hAxes5=axes('Units','pixels','Position',[x1+2*w+2*dx,y1+h+dy,w,h]); hAxes2=axes('Units','pixels','Position',[x1,y1+2*h+2*dy,w0-x1*2,h/2]); hAxes1=axes('Units','pixels','Position',...
[x1,y1+2*h+3*dy+h/2,w0-x1*2,h0-(y1*2+2*h+3*dy+h/2)+20]);
x2=950;
y2=300;
w2=70;
h2=15; hEdit=uicontrol('Style','edit','Position',[x2,y2,w2,h2],...
'Backgroundcolor',[1 1 1],'HorizontalAlignment','left'); hBtn=uicontrol('Style','pushbutton','String','Применить',...
'Position',[x2,y2-30,w2,h2],'Callback','Classtype');
% вывод сигнала в 1 окно
ECG=load('R08-04-1.txt'); Ver=load('R08-04-2.txt'); Fs=250;
N=length(ECG);
tmax=N/Fs;
T=1/Fs;
2
t=0:T:tmax-T; axes(hAxes1); plot(t,ECG); grid minor;
%вывод порядковых номеров QRS-комплексов и идентификаторов во 2 окно set(hAxes2,'XLim',[0 10]);
NQRS=length(Ver(:,1)); for i=1:NQRS
x=Ver(i,1)*T;
axes(hAxes2);
text(x,0.85,num2str(i)); text(x,0.6,num2str(Ver(i,2)),'Color','b');
end
%вывод образцов нормы и патологии QRS в окна 3 и 6
N0=1;
P0=2;
N1=3;
P1=5;
L=51; Smax=(L-1)/2; ind1=Ver(N0,1);
QRS_N0=ECG(ind1-Smax:ind1+Smax); ind2=Ver(P0,1); QRS_P0=ECG(ind2-Smax:ind2+Smax); ind3=Ver(N1,1); QRS_N1=ECG(ind3-Smax:ind3+Smax); ind4=Ver(P1,1); QRS_P1=ECG(ind4-Smax:ind4+Smax); tc=-T*Smax:T:T*Smax; axes(hAxes3);
plot(tc,QRS_N0); grid minor; ylim([-1,1]); axes(hAxes6); plot(tc,QRS_P0); grid minor; ylim([-1,1]);
%удаление линейного тренда
QRS_N0=detrend(QRS_N0); QRS_P0=detrend(QRS_P0); QRS_N1=detrend(QRS_N1); QRS_P1=detrend(QRS_P1);
%построение графиков сравниваемых комплексов и их ВКФ axes(hAxes5);
c=xcorr(QRS_N0,QRS_P1,Smax,'coeff'); plot(tc,QRS_N0)
hold on plot(tc,QRS_P1,'g') plot(tc,c,':r') set(hAxes5,'YLim',[-1 1]); grid minor
title('N-P');
axes(hAxes4); c=xcorr(QRS_N0,QRS_N1,Smax,'coeff'); plot(tc,QRS_N0)
hold on plot(tc,QRS_N1,'g') plot(tc,c,':r') set(hAxes4,'YLim',[-1 1]);
3
grid minor title('N-N');
axes(hAxes7); c=xcorr(QRS_P0,QRS_N1,Smax,'coeff'); plot(tc,QRS_P0)
hold on plot(tc,QRS_N1,'g') plot(tc,c,':r') set(hAxes7,'YLim',[-1 1]); grid minor
title('P-N');
axes(hAxes8); c=xcorr(QRS_P0,QRS_P1,Smax,'coeff'); plot(tc,QRS_P0)
hold on plot(tc,QRS_P1,'g') plot(tc,c,':r') set(hAxes8,'YLim',[-1 1]); grid minor
title('P-P');
% создание массивов максимальых значений ВКФ ds=5;
for i=1:NQRS iQRS=Ver(i,1);
QRS=ECG(iQRS-Smax:iQRS+Smax); QRS=detrend(QRS); c=xcorr(QRS_N0,QRS,ds,'coeff'); cN(i)=max(c); c1=xcorr(QRS_P0,QRS,ds,'coeff'); cP(i)=max(c1);
end
Графическое окно при запуске файла Start.m:
4
2.Разбиение QRS-комплексов на два класса по сходству их форм
Текст программы Classtype.m, для кнопки «Применить»:
global hAxes1 hAxes2 hAxes3 hAxes4 hAxes5 hAxes6 hAxes7 hAxes8 hEdit hBtn
str=get(hEdit,'String'); corLim = str2double(str); for i=1:NQRS
if (cN(i)>=corLim)&&(cP(i)<corLim) Class(i)=1;
elseif (cP(i)>=corLim)&&(cN(i)<corLim) Class(i)=2;
else Class(i)=0;
end
end
% вывод номеров классов в окно 2
NQRS=length(Ver(:,1));
axes(hAxes2)
set(hAxes2,'XLim',[0 tmax],'YLim',[0 1]); rectangle('Position',[0.1,0.1,tmax,0.4],...
'EdgeColor','w','FaceColor','w'); for i=1:NQRS
x=Ver(i,1)*T;
axes(hAxes2);
text(x,0.35,num2str(Class(i)));
end
Графическое окно при нажатии на кнопку «Применить»: 1) Пороговое значение 0.95:
5
2) Пороговое значение 0.8 (нижний порог ошибки):
3) Пороговое значение 0.97 (верхний порог ошибки):
6
Вывод: в ходе данной лабораторной работы мы ознакомились с использованием взаимной корреляционной функции для классификации форм сигналов, были построены графики ВКФ для «норма-норма», «норма-
патология», «патология-норма», «патология-патология». ВКФ «норма-норма» и «патология-патология» при нулевом сдвиге достигает своего максимума, что было ожидаемо.
Для значения порога 0.95 номера QRS-комплексов для нормы и патологий совпадают с рассчитанными ранее. Опытным путем были определены значения порога, при которых классификация комплексов выполняется без ошибок: (0.8; 0.97).
7