Скачиваний:
0
Добавлен:
06.02.2025
Размер:
2.78 Mб
Скачать

Федеральное государственное автономное образовательное учреждение высшего образования «Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»

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

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

ОТЧЕТ

по лабораторной работе №3

по дисциплине «Моделирование биологических процессов и систем»

ТЕМА: МОДЕЛИРОВАНИЕ СИГНАЛА ЭКГ

Вариант 1

Студентки гр. 0501

________________

Слободина Ю.А

Преподаватель

 

Тероева Ю. А.

 

 

 

Санкт-Петербург

2023

ЛАБОРАТОРНАЯ РАБОТА № 3

МОДЕЛИРОВАНИЕ СИГНАЛА ЭКГ

Цель работы: изучить модели ЭКГ сигнала на основе генерации эта-

лона в виде суммы несимметричных гауссовых функций.

Задачи: написать код, построить графики.

Основные теоретические положения

В данной лабораторной работе предлагается реализовать базовую мо-

дель ЭКГ, приведенную в статье Т.Ю. Беклера «Моделирование искусствен-

ных электрокардиограмм нормальной и патологической формы».

В основу построения базовой математической модели генерации искус-

ственной ЭКГ положено аналитическое решение одного из дифференциаль-

ных уравнений. Базовая модель формируется по эталону ( ), который описы-

вается суммой несимметричных гауссовых функций:

При ограничениях:

где t0 – общая продолжительность (мс) z(t), а моменты начала t(1)i и окончания t(2)i каждого i-го фрагмента связаны с параметрами b(1)i и b(2)i , μi следующим образом:

Параметры Ai и μi определяют значения амплитуд и моментов времени,

когда i-ый информативный фрагмент эталона принимает максимальное значе-

ние при Ai > 0 или минимальное значение при Ai < 0, а параметры

при позволяют генерировать несимметричные фрагменты.

Известно, что в состоянии покоя сердечный ритм подвержен колеба-

ниям. Для моделирования этого явления на основе эталона последовательных временных интервалов формируется последовательность циклов по формуле

Изменение продолжительностей RR-интервалов моделируется искаже-

нием частоты сердечных сокращений на основе использования реализаций не-

зависимой случайной величины ym, которая с нулевым математическим ожи-

данием распределена на интервале [-y0,ym], y0 – фиксированное число, опре-

деляющее требуемые границы искажения частоты.

ПОЛНЫЙ КОД ПРОГРАММЫ

using Plots

struct WaveParams # структура для описания параметров волн name::String

A::Float64 b1::Float64 b2::Float64 mu::Float64

end

all_waves = Vector{WaveParams}() all_waves_depressST = Vector{WaveParams}()

push!(all_waves, WaveParams("P", 0.11, 0.014, 0.014, 0.399)) push!(all_waves, WaveParams("Q", -0.004, 0.008, 0.008, 0.45)) push!(all_waves, WaveParams("R", 1.453, 0.008, 0.008, 0.474)) push!(all_waves, WaveParams("S", -1.053, 0.007, 0.007, 0.495)) push!(all_waves, WaveParams("ST", 0.063, 0.04, 0.04, 0.574)) push!(all_waves, WaveParams("T", 0.52, 0.056, 0.024, 0.7))

push!(all_waves_depressST, WaveParams("P", 0.04, 0.003, 0.003, 0.203)) push!(all_waves_depressST, WaveParams("Q", 0, 0.066, 0.066, 0.266)) push!(all_waves_depressST, WaveParams("R", 0.64, 0.016, 0.026, 0.296)) push!(all_waves_depressST, WaveParams("S", -0.1, 0.03, 0.03, 0.4)) push!(all_waves_depressST, WaveParams("ST", -0.23, 0.15, 0.2, 0.45)) push!(all_waves_depressST, WaveParams("T", 0.06, 0.1, 0.08, 0.7))

#функция осуществляет моделирование комплекса по параметрам

#отдельных волн и с варьирующим значением ЧСС

function model_cmpx(all_waves::Vector{WaveParams},tOm::Float64, Fs::Number)

time_grid = collect(0:1/Fs:tOm) # временная сетка out = fill(0.0, length(time_grid))

for point in all_waves

# числитель формулы для Z(t) num = (time_grid.-point.mu).^2

# знаменатель считается в зависимости от mu

#так задается ассиметричность волны den = Float64[]

for t in time_grid if t < point.mu

push!(den, point.b1^2) else

push!(den, point.b2^2)

end

end

#в соотвествии с формулой результаты суммируем out.+= point.A*exp.(-num./den)

end

return out end

# в функцию добавлена вариативность амплитуды

function model_cmpx_var_ampl(all_waves::Vector{WaveParams},tOm::Float64, Fs::Number)

time_grid = collect(0:1/Fs:tOm) out = fill(0.0, length(time_grid))

V = -0.04:0.005:0.04 # вариативность амплитуды for point in all_waves

num = (time_grid.-point.mu).^2 den = Float64[]

for t in time_grid if t < point.mu

push!(den, point.b1^2) else

push!(den, point.b2^2)

end

end

# добавлена вариативность амплитуды out.+= (point.A+rand(V))*exp.(-num./den)

end return out end

ecg = Float64[] # пустой вектор, куда будет собран синт. сигнал ЭКГ ecg_depressST = Float64[]

ecg_ampl = Float64[]

Fs = 500

T = 1/Fs

t0_sec = 1 # базовая длина комплекса, в сек

#Rate = 100 #t0_sec = 60/Rate

V = -0.2:0.01:0.2 # допуски на вариабельность ритма

N = 20 # число комплексов

for m = 1:N # формируем синтетические сигналы t0m = t0_sec*(1+rand(V))

out = model_cmpx(all_waves, t0m, Fs) append!(ecg, out) # синтетическая ЭКГ

out = model_cmpx(all_waves_depressST, t0m, Fs) append!(ecg_depressST, out) # синт. ЭКГ с депрессией ST out = model_cmpx_var_ampl(all_waves, t0m, Fs)

append!(ecg_ampl, out) # синтетическая ЭКГ с вариативными амплитудами зубцов

end

plotly() # включаем возможность масштабирования

t = 0:T:T*length(ecg)-T # время для построения графика синтетической экг

dreyf = sin.(2*3.14*0.05*t) # дрейф изолинии (низкочастотная помеха) fifty_Hz = 0.3*sin.(2*3.14*50*t) # сетевая наводка

t_depressST = 0:T:T*length(ecg_depressST)-T # время для построения графика ЭКГ с депрессией сегмента ST

t_ampl = 0:T:T*length(ecg_ampl)-T # время для построения графика ЭКГ с варьирующей амплитудой

# графики

p1 = plot(t, ecg)

p2 = plot(t_depressST, ecg_depressST)

p3 = plot(t_ampl, ecg_ampl)

p4 = plot(t, ecg.+dreyf.+fifty_Hz) # к синтетической ЭКГ прибавляем дрейф и 50Гц

# настройки графиков, чтобы было красиво

#plot(p1, title = "Синтетическая ЭКГ, частота = $Rate в мин", xlabel = "Время, сек", ylabel = "Амплитуда, мв", legend = false, xticks = 0:0.2:20, yticks = - 1.2:0.1:1.4)

#plot(p1, title = "Синтетическая ЭКГ, частота = $Rate в мин", xlabel = "Время, сек", ylabel = "Амплитуда, мв", legend = false)

#plot(p1, title = "Синтетическая ЭКГ", xlabel = "Время, сек", ylabel = "Амплитуда, мв", legend = false, xticks = 0:0.2:20, yticks = -1.2:0.1:1.4) #plot(p1, title = "Синтетическая ЭКГ", xlabel = "Время, сек", ylabel = "Амплитуда, мв", legend = false)

#plot(p2, title = "ЭКГ c депрессией ST", xlabel = "Время, сек", ylabel = "Амплитуда, мв", legend = false, xticks = 0:0.2:20,yticks = -1.2:0.1:1.4) #plot(p2, title = "ЭКГ c депрессией ST", xlabel = "Время, сек", ylabel = "Амплитуда, мв", legend = false)

#plot(p3, title = "ЭКГ c варьирующей амплитудой зубцов", xlabel = "Время, сек", ylabel = "Амплитуда, мв", legend = false, xticks = 0:0.2:20, yticks = - 1.2:0.1:1.6)

#plot(p3, title = "ЭКГ c варьирующей амплитудой зубцов", xlabel = "Время, сек", ylabel = "Амплитуда, мв", legend = false)

#plot(p4, title = "ЭКГ c дрейфом изолинии и наводкой 50 Гц", xlabel = "Время,

сек", ylabel = "Амплитуда, мв", legend = false, xticks = 0:0.2:20, yticks = - 2:0.1:2)

#plot(p4, title = "ЭКГ c дрейфом изолинии и наводкой 50 Гц", xlabel = "Время,

сек", ylabel = "Амплитуда, мв", legend = false)

#plot(p1, p2, p3, p4, legend = false)

РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ КОДА

На рисунке 1 представлена синтетическая ЭКГ (все комплексы), на ри-

сунке 2 – 4 комплекса в увеличенном масштабе.

Рисунок 1 – Синтетическая ЭКГ (все 20 комплексов)

Рисунок 2 – Синтетическая ЭКГ в увеличенном масштабе

На рисунке 3 представлен синтетический сигнал ЭКГ с депрессией ST

(все комплексы), на рисунке 4 – в увеличенном масштабе.

Рисунок 3 – Синтетический сигнал ЭКГ с депрессией ST

(все 20 комплексов)

Рисунок 4 – Синтетический сигнал ЭКГ с депрессией ST

в увеличенном масштабе

На рисунке 5 представлен сигнал ЭКГ с варьирующей амплитудой зуб-

цов, на рисунке 6 – в увеличенном масштабе.

Рисунок 5 – Сигнал ЭКГ с варьирующей амплитудой зубцов

Рисунок 6 – Сигнал ЭКГ с варьирующей амплитудой зубцов в увеличенном масштабе

К синтетической ЭКГ добавлен дрейф изолинии и наводка в 50 Гц (рис. 7 и 8).

Рисунок 7 – Сигнал ЭКГ с дрейфом изолинии и наводкой 50 Гц

Рисунок 8 – Сигнал ЭКГ с дрейфом изолинии и наводкой 50 Гц в увеличенном масштабе

Соседние файлы в предмете Моделирование биологических процессов и сетей