Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МОиАБМСиД_Калиниченко_020919.pdf
Скачиваний:
210
Добавлен:
25.12.2019
Размер:
823.83 Кб
Скачать

19. Создайте массив, содержащий автоматически определенные идентификаторы класса формы, руководствуясь следующим правилом: комплекс относится к классу 1 или 2 («норма» или «патология»), если определенный для него коэффициент корреляции для одного из классов превышает порог, а для другого – ниже порога. Если ни одно из этих условий не выполняется, то значение идентификатора принимается равным нулю:

for i=1:NQRS

% Перебор всех QRS-комплексов

if (cN(i)>=corLim)&&(cP(i)<corLim)

Class(i)=1;

% Комплекс относится к классу 1

elseif (cP(i)>=corLim)&&(cN(i)<corLim)

Class(i)=2;

% Комплекс относится к классу 2

else

% Комплекс не относится ни к одному из классов

Class(i)=0;

end

end

set(hAxes2,'XLim',[0 tmax],'YLim',[0 1]);

20.По аналогии с п. 7 выведите красным цветом в поле 2 полученные номера классов, расположив их ниже ранее выведенных двух строк. С использованием команды set установите пределы по ординате от 0 до 1.

21.Поместите перед циклом, реализующим предыдущий пункт, команду, позволяющую стирать ранее выведенные значения. Это позволит избежать наложения цифрдруг на друга примногократном вводе значений порога:

rectangle('Position',[0.1,0.1,tmax,0.4],... % Прямоугольник 'EdgeColor','w','FaceColor','w'); % белого цвета

22.Не забудьте в обеих подготовленных программах объявить как global переменные, являющиеся общими для этих программ (см. лаб. раб. 5).

23.Запустите основную программу. Введите в поле 9 значение порога 0,95. Автоматически рассчитанные номера классов должны совпадать с данными верификации. Постепенно повышая и снижая порог, определите, в каком диапазоне его значений классификация выполняется без ошибок.

24.Сохраните графики для трех случаев: безошибочная классификация, ошибки при слишком высоком и при слишком низком порогах.

Содержание отчета

1.Название, цель и задачи работы.

2.Текст программы.

3.Объяснение полученных результатов и выводы.

48

Вопросы для самоконтроля

1)Что показывает взаимная корреляционная функция (ВКФ) и какая связь между ней и коэффициентом взаимной корреляции?

2)Какой способ расчёта ВКФ используется в работе и почему её значения лежат в пределах от -1 до +1 (объяснить по формуле)?

3)Какие QRS-комплексы из записи ЭКГ выбраны в качестве образцов двух форм?

4)Какая величина отложена по оси абсцисс графиков ВКФ и как она связана с числом сдвигов при вычислении ВКФ?

5)Как по виду ВКФ оценить сходство двух сигналов?

6)Для чего в п. 15 работы предлагается рассчитывать ВКФ с максимальным сдвигом ds=5 и сколько при этом вычисляется значений?

7)Какой временной интервал соответствует заданному значению ds?

8)Как используется порог ВКФ для классификации форм QRSкомплексов?

9)В каком диапазоне значений порога классификация выполняется правильно?

10)Как повлияет на классификацию выбор величины порога равной +1 или -1?

49

Лабораторная работа 9. ВЕКТОРКАРДИОГРАММА

Цель работы: ознакомление с методом векторкардиографии.

Основные положения

Векторкардиография это метод исследования сердца, основанный, на регистрации изменений за сердечный цикл суммарного вектора электродвижущих сил сердца в проекции на плоскость. Векторкардиографическая кривая строится по трем отведениям X, Y и Z (система отведений Франка), которые являются ортогональными отведениями, т. е. их оси перпендикулярны друг к другу. Синхронная запись ортогональных сигналов в векторкардиографии позволяет выявить наиболее существенные пространствено-временные эволюции биоэлектрической активности сердца и, следовательно, порождающего его электрофизиологического процесса.

Задание на выполнение работы

Построение графиков ЭКГ в трех ортогональных отведениях.

Построение двухмерных и трехмерных ВКГ для всей записи ЭКГ.

Построение ВКГ для фрагментов ЭКГ, содержащих кардиоциклы классов «норма» и «патология».

Порядок выполнения работы

Построение графиков ЭКГ в трех ортогональных отведениях. В фай-

лах, имена которых указаны в табл. П.9 приложения, содержатся фрагменты записей ЭКГ.

1. Запустите систему MATLAB, установите в главном окне путь к раб о-

чей папке, перепишите в нее файл с записью ЭКГ, соответствующий нужному варианту.

Файл ЭКГ содержит три столбца отсчетов сигнала в отведениях X, Y и Z по Франку. Частота дискретизации составляет Fs=250 Гц, длительность фрагмента ЭКГ – 8 с.

2. Создайте новый М-файл и сохра-

 

 

1

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

4

 

 

5

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

50

ните его под каким-нибудь именем.

3.Создайте рабочее окно программы по образцу, приведенному на рисунке, и разместите на нем два поля редактирования (1 и 2, см. лаб. раб. 5) и 5 полей для графиков (37). В командах размещения окон редактирования укажите в качестве значений свойств ‘Callback’ имена программ, которые будут вызываться при вводе в эти поля новых значений.

4.Загрузите заданный файл в какую-нибудь переменную при помощи команды load. Для удобства разнесите данные для каждого из отведений X, Y

иZ по отдельным переменным, например:

XYZ=load('R09_01.txt');

X=XYZ(:,1); % отведение X

5.Создайте переменную времени для графиков ЭКГ.

6.В поле 3 постройте графики трех отведений ЭКГ, соблюдая масштаб по времени. При этом из отведений Y и Z вычтите некоторые константы, чтобы разделить графики отведений по ординате, например:

plot(t,Y-0.5) % График ЭКГ в отведении Y

7. Задайте начальные значения положения маркерных линий, которые далее будут использоваться для выбора определенного интервала времени, и нарисуйте эти линии черным пунктиром:

t1=0;

%

Время

для

левого маркера (начало

фрагмента

ЭКГ)

t2=t(N); %

Время

для

правого маркера (конец

фрагмента

ЭКГ)

Lim=get(hAxes3,'YLim') % Определение границ по ординате

Mark1=plot([t1

t1],[Lim(1)

Lim(2)],':k');

%

Левый маркер

Mark2=plot([t2

t2],[Lim(1)

Lim(2)],':k');

%

Правый маркер

Здесь hAxes3 – указатель на графическое поле 3.

8. Выведите заданные начальные значения в поля 1 и 2:

set(hEdit1,'String',num2str(t1));

set(hEdit2,'String',num2str(t2));

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

9. Создайте новый М-файл и сохраните его под каким-нибудь именем.

51

10. В качестве первого оператора должно стоять объявление функции. Название функции должно совпадать с именем M-файла, например:

function plot_vcg() % Имя M-файла должно быть «plot_vcg.m»

11. Рассчитайте индексы массивов ЭКГ, соответствующие моментам времени, отмеченным маркерами:

i1=fix(t1/T)+1; % Индекс для левого маркера, T=1/Fs i2=fix(t2/T); % Индекс для правого маркера

12. Постройте в полях 46 двухмерные графики ВКГ для пар отведений XY, XZ и YZ соответственно по следующему образцу:

axes(hAxes4)

% Активизация поля 4

plot(X(i1:i2),Y(i1:i2))

% Построение ВКГ для отведений X и Y

title('XY')

%

Заголовок

grid on

%

Линовка

13. Постройте в поле 7 трехмерный график ВКГ для отведенийX, Y и Z:

axes(hAxes7) % Активизация поля 7 plot3(X(i1:i2),Y(i1:i2),Z(i1:i2)) % ВКГ для X, Y и Z

title('XYZ')

%

Заголовок

grid on

%

Линовка

14. Определите по полученным графикам наибольшее и наименьшее значения пределов графиков среди всех трёх осей. Например, самое низкое значение (–0,5 мВ) получилось по оси “X”, а самое высокое (+1,5) – по оси “Z”. Тогда уравнять масштабы всех графиков можно командой вида:

set(gca,‘XLim’,[-0.5 1.5] ,‘YLim’,[-0.5 1.5] ,‘ZLim’,[-0.5 1.5])

При этом для двухмерных векторкардиограмм устанавливаются значения только по двум осям, а для трёхмерных – по всем трём.

15.Не забудьте объявить как global те переменные, которые являются общими для данной и первой программ (см. лаб. раб. 5).

16.Выберите щелчком левой кнопки «мыши» график трёхмерной векторкардиограммы и с помощью пункта меню Tools->Rotate 3D вращайте график так, чтобы по очереди добиться на нём получения всех трёх возможных пар проекций. Сохраните все полученные варианты графиков.

17.Включите вызов подготовленной функции построения ВКГ в первую программу и запустите ее на выполнение.

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

52

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

Построение ВКГ для фрагментов записи ЭКГ, содержащих кардиоциклы классов «норма» и «патология». Для выполнения следующей части задания необходимо подготовить две программы, которые будут вызываться при вводе новых значений в поля редактирования 1 и 2 (см. п. 4).

Каждая из двух программ должна выполнять следующие действия:

считывать и преобразовывать в число введенное значение;

проверять значение на допустимость;

удалять ранее нарисованный маркер;

рисовать маркер в новом положении;

строить ВКГ для нового положения маркера.

Далее приводится текст функции, реализующей перечисленные действия для левого маркера:

function Get_t1()

% Объявление функции

global t1 t2 Mark1 hEdit1 hAxes3 t N Lim

% Глобальные имена

str=get(hEdit1,'String');

% Ввод строки из поля 1

t1 = str2double(str);

% Преобразование в число

if t1<0

 

% Проверка на допустимость:

t1=0;

 

 

 

elseif t1>t2

 

 

 

t1=t2;

 

 

 

end

% Активизация поля 3

 

axes(hAxes3)

 

delete(Mark1); % Удаление прежнего маркера

% Новый маркер

Mark1=plot([t1 t1],[Lim(1) Lim(2)],':k');

set(hEdit1,'String',num2str(t1)); % Запись t1 в поле ввода

plot_vcg();

% Вызов функции построения ВКГ

18.Подготовьте аналогичную программу для правого маркера.

19.Не забудьте во всех подготовленных программах объявить как global переменные, являющиеся общими для этих программ (см. лаб. раб. 5).

20.Запустите первую (основную) программу.

21.Изменяя значения в полях управления маркерами, получите ВКГ для всей записи целиком и по отдельности для одного из кардиоциклов фонового

53