Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / 3 / Л3_Новикова_Ковалёва

.docx
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
845.56 Кб
Скачать

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

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

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

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

Кафедра биотехнических систем

отчет

по лабораторной работе №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.3*max(ECG).

2) Дрейф изолинии, в нашем случае был взят дрейф, связанный с дыханием пациента: f = 16 Гц, А = 0.25*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

Соседние файлы в папке 3