МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра биотехнических систем
отчет
по лабораторной работе №3
по дисциплине «Моделирование биологических процессов и систем»
Тема: Моделирование ЭКГ сигнала.
Студенты гр. 2503 |
|
Новикова С.Л. |
|
|
Ковалёва Д.Д. |
Преподаватель |
|
Палогианнидис Д. |
Санкт-Петербург
2025
Основные теоретические положения
Цель: изучение модели ЭКГ сигнала на основе генерации эталона в виде суммы несимметричных гауссовых функций.
В данной лабораторной работе предлагается реализовать базовую модель ЭКГ, приведенную в статье Т.Ю. Беклера «Моделирование искусственных электрокардиограмм нормальной и патологической формы».
В основу построения базовой математической модели генерации искусственной ЭКГ положено аналитическое решение одного из дифференциальных уравнений. Базовая модель формируется по эталону 𝑧(𝑡), который описывается суммой несимметричных гауссовых функций:
При ограничениях:
где 𝑡0— общая продолжительность (мс) 𝑧(𝑡), связанная с частотой FЧСС сердечных сокращений (уд/мин) соотношением:
а моменты начала 𝑡𝑖(1) и окончания 𝑡𝑖(2) каждого i -го фрагмента эталона, 𝑖 ∈ {𝑃,𝑄, 𝑅, 𝑆, 𝑆𝑇, 𝑇}, связаны с параметрами 𝑏𝑖(1) , 𝑏𝑖(2) и 𝜇𝑖 следующим образом (поскольку гауссова функция главным образом сосредоточена на «трехсигмовом» интервале, можно полагать так):
Параметры 𝐴𝑖 и 𝜇𝑖 определяют значения амплитуд и моментов времени, когда i-й информативный фрагмент эталона, 𝑖 ∈ {𝑃,𝑄, 𝑅, 𝑆, 𝑆𝑇, 𝑇}, принимает максимальное значение при 𝐴𝑖 > 0 или минимальное значение при 𝐴𝑖 < 0 , а параметры
при 𝑏𝑖(1) ≠ 𝑏𝑖(2) позволяют генерировать несимметричные фрагменты.
Известно, что даже у здоровых людей в состоянии покоя сердечный ритм подвержен значительным колебаниям. Для моделирования этого явления на основе эталона на последовательных временных интервалах:
𝑡0𝑚 = 𝑡0 (1 + 𝛾𝑚), 𝑚 = 1, … , N
формируется последовательность циклов Z1(t)...ZN(t) по формуле:
Изменение продолжительностей RR-интервалов моделируется искажением частоты сердечных сокращений (временного интервала 𝑡0) на основе использования реализаций независимой случайной величины 𝛾𝑚, которая с нулевым математическим ожиданием распределена на ограниченном интервале 𝛾𝑚 ∈ [−𝛾0, 𝛾𝑚], 𝛾0 – фиксированное число, определяющее требуемые границы искажения частоты.
На рис.1 вверху показана нормальная ЭКГ из записи № 16795 базы данных MIT-BIH Normal Sinus Rhythm Database, внизу - искусственно сгенерированная ЭКГ с параметрами, приведенными в таблице 1.
Рисунок 1 – Реальная (вверху) и искусственная (внизу) ЭКГ
Таблица 1- Параметры искусственной ЭКГ
i |
Ai |
bi(1) |
bi(2) |
ui |
P |
0.11 |
0.014 |
0.014 |
0.399 |
Q |
-0.004 |
0.008 |
0.008 |
0.45 |
R |
1.453 |
0.008 |
0.008 |
0.474 |
S |
-1.053 |
0.007 |
0.007 |
0.495 |
ST |
0.063 |
0.04 |
0.04 |
0.574 |
T |
0.52 |
0.056 |
0.024 |
0.7 |
Отчёт о проделанной работе
В ходе работы была разработана программа, моделирующая сигнал ЭКГ в норме и с депрессией ST-сегмента, а также с вариацией временных интервалов и амплитуд зубцов.
В соответствии с заданием и таблицей 1 были сгенерированы и отображены ЭКГ в норме без вариаций параметров, с вариацией RR-интервалов и с вариацией амплитуд зубцов. Отображённые графики показаны на рисунках 2-3:
Рисунок 2 – Сравнение идеальной (синий) и с вариацией интервалов (красный) нормальных ЭКГ
Рисунок 3 – Сравнение идеальной (синий) и с вариацией амплитуд зубцов (красный) нормальных ЭКГ
Вариация интервалов производилось умножением базового времени интервала на случайную константу от 0.8 до 1.2 с интервалом 0.01. Аналогичным образом масштабировался каждый из параметров А каждого из элементов комплекса.
Как видно из полученных графиков, в случае вариабельности интервалов, комплексы сдвинуты на некоторое расстояние по оси времени друг от друга, однако имеют одну и ту же форму. В случае вариабельности амплитуд, некоторые зубцы комплексов имеют разную амплитуду, однако форма остаётся единой для всех комплексов.
Далее сравнивались смоделированные сигналы для идеальной нормальной ЭКГ и для ЭКГ пациента с депрессией ST-сегмента (рис. 4):
Рисунок 4 – Сравнение нормальной ЭКГ (син.) и с депрессией ST (крас.)
В данном случае чётко видно различия в формах комплексов. На красном графике виден чёткий провал ST-сегмента, который и называется депрессией ST-сегмента.
Сигнал с депрессией ST-сегмента был построен на основе данных из таблицы 2:
Таблица 2 – Коэффициенты модели с депрессией ST-сегмента
i |
Ai |
bi(1) |
bi(2) |
ui |
P |
0.04 |
0.03 |
0.03 |
0.203 |
Q |
0 |
0.066 |
0.066 |
0.266 |
R |
0.64 |
0.016 |
0.026 |
0.296 |
S |
-0.1 |
0.03 |
0.03 |
0.4 |
ST |
-0.23 |
0.15 |
0.2 |
0.45 |
T |
0.06 |
0.1 |
0.08 |
0.7 |
Далее был смоделирован нормальный ЭКГ сигнал с вариацией амплитуд зубцов, временных интервалов. На этот сигнал, по заданию, были наложены помехи:
1) Сетевая наводка: f = 50 Гц, А = 0.2*max(ECG).
2) Дрейф изолинии, в нашем случае был взят дрейф, связанный с дыханием пациента: f = 12 Гц, А = 0.5*max(ECG).
Обе помехи, в силу похожести на синусоиду, были смоделированы синусоидами с заданными параметрами.
Полученные графики приведены на рисунке 5.
На данном графике прослеживается некоторое подобие нормального кардиокомплекса, однако из-за сетевой наводки уже сложно различить P и T зубцы. Дрейф изолинии также затрудняет восприятие сигнала.
Рисунок 4 – Нормальная ЭКГ с вариабельностью и помехами
Вывод
В ходе лабораторной работы была рассмотрена модель ЭКГ.
Были смоделированы варианты ЭКГ для нормального ритма и для депрессии ST-сегмента. Для нормального ритма были смоделированы вариабельности интервалов, а также амплитуд зубцов комплексов.
Во всех случаях были проведены сравнения и выяснено, что при незначительном изменении амплитуды зубцов и временных интервалов, общая форма сигнала остаётся неизменной.
Было выяснено, что нормальный сигнал и сигнал с депрессией ST сильно различаются по форме.
Также, был построен сигнал ЭКГ с помехами: сетевой наводкой и дрейфом изолинии.
Приложение 1 Листинг программы
close all;
% П1. Параметры волн
% Нормального ритма
waves_N = struct( ...
'name', {'P','Q','R','S','ST','T'}, ...
'A', {0.11, -0.004, 1.453, -1.053, 0.063, 0.52}, ...
'b1', {0.014, 0.008, 0.008, 0.007, 0.04, 0.056}, ...
'b2', {0.014, 0.008, 0.008, 0.007, 0.04, 0.024}, ...
'mu', {0.399, 0.45, 0.474, 0.495, 0.574, 0.7} ...
);
% Депрессии ST сегмента
waves_D = struct( ...
'name', {'P','Q','R','S','ST','T'}, ...
'A', {0.04, 0, 0.64, -0.1, -0.23, 0.06}, ...
'b1', {0.03, 0.066, 0.016, 0.03, 0.15, 0.1}, ...
'b2', {0.03, 0.066, 0.026, 0.03, 0.2, 0.08}, ...
'mu', {0.203, 0.266, 0.296, 0.4, 0.45, 0.7} ...
);
% П3. Генерация нескольких комплексов
Fs = 500; % частота дискретизации (Гц)
Fcss = 60; % базовая длительность ЧСС (Гц)
t0 = 60/Fcss; % базовая длительность комплекса (с)
N = 20; % количество комплексов
V = -0.2:0.01:0.2; % диапазон вариации длительности
dA = -0.2:0.01:0.2; % диапазон вариации амплитуд
% Генерация идеального нормального ритма
ecg_N = do_ecg(20, waves_N,t0,Fs, 0, 0);
% Генерация нормального ритма с вариацией t
ecg_N1 = do_ecg(20, waves_N,t0,Fs, V, 0);
% Генерация нормального ритма с вариацией А
ecg_N2 = do_ecg(20, waves_N,t0,Fs, 0, dA);
% Генерация идеального депрессивного ритма
ecg_D = do_ecg(20, waves_D, t0, Fs, 0, 0);
% Генерация нормального ритма со всеми вариациями
% дейфом изолинии и сетевой наводкой.
% Сначала генерируем базовый сигнал
ecg_M = do_ecg(20, waves_N, t0, Fs, V, dA);
% Рассчитываем его интервал
t_M = (0:length(ecg_M)-1) / Fs;
% Накладываем наводку 0.3 от максимума частотой 50 Гц
% и дрейф из-за дыхания 0.25 от максимума частотой
% 16 вдохов в минуту
ecg_M = ecg_M + 0.3*(max(ecg_M))*sin(2*pi*50*t_M)...
+0.25*(max(ecg_M))*sin(2*pi*12/60*t_M);
% П4. Построение графиков
% Сравнение нормальных экг
figure('Name','Normal ECG');
% С вариацией по времени
subplot(2,2,1);
t = (0:length(ecg_N)-1) / Fs;
plot(t, ecg_N, 'b', 'LineWidth', 1);
xlabel('t, с');
ylabel('А');
xlim([0 20]);
title('Вариабельность времени)');
grid on;
hold on;
t = (0:length(ecg_N1)-1) / Fs;
plot(t, ecg_N1, 'r', 'LineWidth', 0.5);
% Увеличенное -//-
subplot(2,2,3);
t = (0:length(ecg_N)-1) / Fs;
plot(t, ecg_N, 'b', 'LineWidth', 1);
xlabel('t, с');
ylabel('А');
xlim([2 4]);
title('Увеличенный');
grid on;
hold on;
t = (0:length(ecg_N1)-1) / Fs;
plot(t, ecg_N1, 'r', 'LineWidth', 0.5);
% С вариацией амплитуды
subplot(2,2,2);
t = (0:length(ecg_N)-1) / Fs;
plot(t, ecg_N, 'b', 'LineWidth', 1);
xlabel('t, с');
ylabel('А');
xlim([0 20]);
title('Вариабельность амплитуды зубцов');
grid on;
hold on;
t = (0:length(ecg_N2)-1) / Fs;
plot(t, ecg_N2, 'r', 'LineWidth', 0.5);
% Увеличенное -//-
subplot(2,2,4);
t = (0:length(ecg_N)-1) / Fs;
plot(t, ecg_N, 'b', 'LineWidth', 1);
xlabel('t, с');
ylabel('А');
xlim([2 4]);
title('увеличенный');
grid on;
hold on;
t = (0:length(ecg_N2)-1) / Fs;
plot(t, ecg_N2, 'r', 'LineWidth', 0.5);
% Сравнение нормальной экгс депрессивной
figure('Name','Depressed ECG');
subplot(2,1,1);
t = (0:length(ecg_N)-1) / Fs;
plot(t, ecg_N, 'b', 'LineWidth', 1);
xlabel('t, с');
ylabel('А');
xlim([0 20]);
title('Норма и ST депрессия');
grid on;
hold on;
t = (0:length(ecg_D)-1) / Fs;
plot(t, ecg_D, 'r', 'LineWidth', 0.5);
% Увеличенный
subplot(2,1,2);
t = (0:length(ecg_N)-1) / Fs;
plot(t, ecg_N, 'b', 'LineWidth', 1);
xlabel('t, с');
ylabel('А');
xlim([2 4]);
title('Норма и ST депрессия (увеличенный)');
grid on;
hold on;
t = (0:length(ecg_D)-1) / Fs;
plot(t, ecg_D, 'r', 'LineWidth', 0.5);
% Построение симуляции реальной ЭКГ
figure('Name','Simulated ECG');
subplot(2,1,1);
plot(t_M, ecg_M, 'b', 'LineWidth', 1);
xlabel('t, с');
ylabel('А');
xlim([0 20]);
title('Помехи');
grid on;
% Увеличенный вариант
subplot(2,1,2);
plot(t_M, ecg_M, 'b', 'LineWidth', 1);
xlabel('t, с');
ylabel('А');
xlim([2 4]);
title('Помехи, увеличенный');
grid on;
% П3. Покомплексный расчёт
function [out] = do_ecg(N, waves, t0, Fs, V, dA)
ecg = [];
for m = 1:N
% Вариация длительности
% (умножаем на случайный коэфф и переводим в секунды)
t0m = t0 * (1 + datasample(V,1));
waves_m = waves;
% Вариация амплитуда
for i = 1:length(waves)
waves_m(i).A = waves_m(i).A.*(1 + datasample(dA,1));
end
% Моделирование одного комплекса
ecg1 = model_cmpx(waves_m, t0m, Fs);
% Добавление к массиву
ecg = [ecg, ecg1];
end
out = ecg;
end
% П2. Функция моделирования одного комплекса
function out = model_cmpx(waves, t0m, Fs)
% Временные отсчёты
time_grid = 0:1/Fs:t0m;
% Нулевой вектор отсчётов
out = zeros(1, length(time_grid));
% Расчёты сложные пипец
for i = 1:length(waves)
w = waves(i);
num = (time_grid - w.mu).^2;
den = zeros(size(time_grid));
for k = 1:length(time_grid)
if time_grid(k) < w.mu
den(k) = w.b1^2;
else
den(k) = w.b2^2;
end
end
out = out + w.A * exp(-num ./ (2*den));
end
end
