Скачиваний:
14
Добавлен:
08.04.2022
Размер:
574.18 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра БТС

ОТЧЕТ по лабораторной работе №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

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