Скачиваний:
27
Добавлен:
08.04.2022
Размер:
1.17 Mб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра БТС

отчет

по лабораторной работе №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:

Вывод:

Запись ЭКГ для данной работы снята так, что в ней содержится несколько квадроциклов фонового (нормального) ритма и один паталогический квадроцикл (желудочковая экстрасистола), который хорошо заметен во всех трех отведениях ЭКГ. На ВКГ это проявляется в том, что паталогическому циклу соответствует отдельная траектория, сильно отличающаяся от траектории для фоновых квадроциклов. Это свидетельствует о совершенно другом характере пространственных электрических процессов, протекающих внутри сердца.

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