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

Лабы / 3 / Л3_Малышев_Кузнецов

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

Приложение 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.2 от максимума частотой 50 Гц

%и дрейф из-за дыхания 0.5 от максимума частотой

%12 вдохов в минуту

ecg_M = ecg_M + 0.2*(max(ecg_M))*sin(2*pi*50*t_M)...

+0.5*(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('Время, с'); ylabel('Амплитуда');

xlim([0 20]);

title('Нормальная ЭКГ (нормальная форма с вар. врем.)'); grid on;

11

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('Время, с'); 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('Время, с'); 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('Время, с'); 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('Время, с'); 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('Время, с'); ylabel('Амплитуда');

xlim([2 4]);

title('ЭКГ в норме и с ST депрессией (увеличенный)'); grid on;

hold on;

12

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('Время, с'); ylabel('Амплитуда');

xlim([0 20]);

title('ЭКГ в норме и со всеми добавлениями'); grid on;

%Увеличенный вариант

subplot(2,1,2);

plot(t_M, ecg_M, 'b', 'LineWidth', 1); xlabel('Время, с'); 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

13

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