МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра БТС
отчет
по лабораторной работе №9
по дисциплине «ПСОБМД»
Тема: Векторная диаграмма
Вариант 4
Студентка гр. 7501 |
|
Фалевская А.А. |
Студент гр. 7501 |
|
Исаков А.О. |
Преподаватель |
|
Ровша М.В. |
Санкт-Петербург
2020
Цель работы: ознакомление с методом вектокардиограммы.
Основные положения:
Векторкардиография – метод исследования сердца, основанный на регистрации изменений за сердечный цикл суммарного вектора электродвижущих сил сердца в проекции на плоскость. Векторкардиографическая кривая строится по трем отведениям X, Y и Z (система отведений Франка), которые являются ортогональными отведениями. Синхронная запись ортогональных сигналов в векторкардиографии позволяет выявить наиболее существенные пространственно-временные эволюции биоэлектрической активности сердца и, следовательно, порождающего его электрофизиологического процесса.
Задание на выполнение работы:
Построение графиков ЭКГ в трех ортогональных отведениях.
Построение двухмерных и трехмерных ВКГ для всей записи ЭКГ.
Построение ВКГ для фрагментов ЭКГ, содержащих кардиоциклы классов «норма» и «патология».
Обработка результатов:
Работа была выполнена в расширении App Designer для удобства построения графиков.
classdef Laba_9 < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
UIFigure matlab.ui.Figure
Label matlab.ui.control.Label
EditField matlab.ui.control.EditField
EditField_2Label matlab.ui.control.Label
EditField_2 matlab.ui.control.EditField
UIAxes2_2 matlab.ui.control.UIAxes
UIAxes2_3 matlab.ui.control.UIAxes
UIAxes matlab.ui.control.UIAxes
UIAxes2 matlab.ui.control.UIAxes
UIAxes2_4 matlab.ui.control.UIAxes
end
% Callbacks that handle component events
methods (Access = private)
% Code that executes after component creation
function startupFcn(app)
data = load("R09-04.txt");
global T X Y Z
F=250;
T=1/F;
X = data(:,1);
Y = data(:,2);
Z = data(:,3);
t = 0:T:8;
t = t(:,1:2000);
plot(app.UIAxes,t,X,t,Y-0.5,t,Z-1)
grid(app.UIAxes,'on')
hold(app.UIAxes,'on')
t1 = 0;
t2 = 8;
app.EditField.Value = num2str(t1);
app.EditField_2.Value = num2str(t2);
global marker1 marker2 Lim
Lim = get(app.UIAxes,'YLim');
marker1 = plot(app.UIAxes,[t1 t1],Lim,"Color",'k',"LineStyle","--");
marker2 = plot(app.UIAxes,[t2 t2],Lim,'Color','k',"LineStyle","--");
i1 = fix(t1/T)+1;
i2 = fix(t2/T);
plot(app.UIAxes2,X(i1:i2),Y(i1:i2))
plot(app.UIAxes2_2,X(i1:i2),Z(i1:i2))
plot(app.UIAxes2_3,Y(i1:i2),Z(i1:i2))
plot3(app.UIAxes2_4,X(i1:i2),Y(i1:i2),Z(i1:i2))
app.UIAxes2.XLim = [-2 2.5];
app.UIAxes2.YLim = [-1.5 2.5];
app.UIAxes2_2.XLim = [-2 2.5];
app.UIAxes2_2.YLim = [-1.5 2.5];
app.UIAxes2_3.XLim = [-2 2.5];
app.UIAxes2_3.YLim = [-1.5 2.5];
grid(app.UIAxes2,'on')
grid(app.UIAxes2_2,'on')
grid(app.UIAxes2_3,'on')
grid(app.UIAxes2_4,'on')
app.UIAxes2_4.ZLabel.String = 'Z';
end
% Value changed function: EditField
function EditFieldValueChanged(app, event)
global value value2 marker1 Lim X Y Z T
value = app.EditField.Value;
value = str2double(value);
value2 = app.EditField_2.Value;
value2 = str2double(value2);
if value <0
value = 0;
elseif value > value2
value = value2;
end
delete(marker1);
marker1 = plot(app.UIAxes,[value value],Lim,"Color",'k',"LineStyle","--");
i1 = fix(value/T)+1;
i2 = fix(value2/T);
plot(app.UIAxes2,X(i1:i2),Y(i1:i2))
plot(app.UIAxes2_2,X(i1:i2),Z(i1:i2))
plot(app.UIAxes2_3,Y(i1:i2),Z(i1:i2))
plot3(app.UIAxes2_4,X(i1:i2),Y(i1:i2),Z(i1:i2))
end
% Value changed function: EditField_2
function EditField_2ValueChanged(app, event)
global value2 value marker2 Lim X Y Z T
value = app.EditField.Value;
value = str2double(value);
value2 = app.EditField_2.Value;
value2 = str2double(value2);
if value2 <0
value2 = 0;
elseif value2 < value
value2 = value;
end
delete(marker2);
marker2 = plot(app.UIAxes,[value2 value2],Lim,"Color",'k',"LineStyle","--");
i1 = fix(value/T)+1;
i2 = fix(value2/T);
plot(app.UIAxes2,X(i1:i2),Y(i1:i2))
plot(app.UIAxes2_2,X(i1:i2),Z(i1:i2))
plot(app.UIAxes2_3,Y(i1:i2),Z(i1:i2))
plot3(app.UIAxes2_4,X(i1:i2),Y(i1:i2),Z(i1:i2))
end
end
% Component initialization
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create UIFigure and hide until all components are created
app.UIFigure = uifigure('Visible', 'off');
app.UIFigure.Position = [100 100 1070 648];
app.UIFigure.Name = 'MATLAB App';
% Create Label
app.Label = uilabel(app.UIFigure);
app.Label.HorizontalAlignment = 'right';
app.Label.Position = [62 566 87 22];
app.Label.Text = 'Левая граница';
% Create EditField
app.EditField = uieditfield(app.UIFigure, 'text');
app.EditField.ValueChangedFcn = createCallbackFcn(app, @EditFieldValueChanged, true);
app.EditField.Position = [164 566 100 22];
% Create EditField_2Label
app.EditField_2Label = uilabel(app.UIFigure);
app.EditField_2Label.HorizontalAlignment = 'right';
app.EditField_2Label.Position = [275 566 95 22];
app.EditField_2Label.Text = 'Правая граница';
% Create EditField_2
app.EditField_2 = uieditfield(app.UIFigure, 'text');
app.EditField_2.ValueChangedFcn = createCallbackFcn(app, @EditField_2ValueChanged, true);
app.EditField_2.Position = [385 566 100 22];
% Create UIAxes2_2
app.UIAxes2_2 = uiaxes(app.UIFigure);
title(app.UIAxes2_2, 'ВКГ для отведений XZ')
xlabel(app.UIAxes2_2, 'X')
ylabel(app.UIAxes2_2, 'Z')
app.UIAxes2_2.PlotBoxAspectRatio = [1.66949152542373 1 1];
app.UIAxes2_2.XTick = [-2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5];
app.UIAxes2_2.YTick = [-1.5 -1 -0.5 0 0.5 1 1.5 2 2.5];
app.UIAxes2_2.Position = [249 150 275 170];
% Create UIAxes2_3
app.UIAxes2_3 = uiaxes(app.UIFigure);
title(app.UIAxes2_3, 'ВКГ для отведений YZ')
xlabel(app.UIAxes2_3, 'Y')
ylabel(app.UIAxes2_3, 'Z')
app.UIAxes2_3.PlotBoxAspectRatio = [1.66949152542373 1 1];
app.UIAxes2_3.XTick = [-2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5];
app.UIAxes2_3.YTick = [-1.5 -1 -0.5 0 0.5 1 1.5 2 2.5];
app.UIAxes2_3.Position = [523 150 309 170];
% Create UIAxes
app.UIAxes = uiaxes(app.UIFigure);
title(app.UIAxes, 'Построение графиков ЭКГ в трех ортогональных отведениях')
xlabel(app.UIAxes, 'X')
ylabel(app.UIAxes, 'Y')
app.UIAxes.Position = [28 369 813 185];
% Create UIAxes2
app.UIAxes2 = uiaxes(app.UIFigure);
title(app.UIAxes2, 'ВКГ для отведений XY')
xlabel(app.UIAxes2, 'X')
ylabel(app.UIAxes2, 'Y')
app.UIAxes2.XTick = [-2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5];
app.UIAxes2.YTick = [-1.5 -1 -0.5 0 0.5 1 1.5 2 2.5];
app.UIAxes2.Position = [1 151 248 170];
% Create UIAxes2_4
app.UIAxes2_4 = uiaxes(app.UIFigure);
title(app.UIAxes2_4, 'ВКГ для отведений XYZ')
xlabel(app.UIAxes2_4, 'X')
ylabel(app.UIAxes2_4, 'Y')
app.UIAxes2_4.Position = [817 151 318 219];
% Show the figure after all components are created
app.UIFigure.Visible = 'on';
end
end
% App creation and deletion
methods (Access = public)
% Construct app
function app = L_9
% Create UIFigure and components
createComponents(app)
% Register the app with App Designer
registerApp(app, app.UIFigure)
% Execute the startup function
runStartupFcn(app, @startupFcn)
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.UIFigure)
end
end
end
Построение графиков в трехмерном объеме и трех плоскостях проекций на временном интервале от 0 до 8 секунд:
Построение графиков в трехмерном объеме и трех плоскостях проекций на временном интервале от 2 до 3 секунд:
Построение графиков в трехмерном объеме и трех плоскостях проекций на временном интервале от 6 до 7 секунд:
Далее показано вращение объемного графика относительно двух выбранных осей. Вращение вектокардиограммы до плоскости XY:
Вращение вектокардиограммы до плоскости XZ:
Вращение вектокардиограммы до плоскости YZ:
Вывод:
Запись ЭКГ для данной работы снята так, что в ней содержится несколько квадроциклов фонового (нормального) ритма и один паталогический квадроцикл (желудочковая экстрасистола), который хорошо заметен во всех трех отведениях ЭКГ. На ВКГ это проявляется в том, что паталогическому циклу соответствует отдельная траектория, сильно отличающаяся от траектории для фоновых квадроциклов. Это свидетельствует о совершенно другом характере пространственных электрических процессов, протекающих внутри сердца.