Разработка алгоритма преобразования сигнала ЭКГ в последовательность кардиоинтервалов
Предполагается, что алгоритм будет работать с грудным отведением V5. Сигнал, снятый с этого отведения, отличается резким и высоким QRS – комплексом (рис. 1), именно на это будет опираться алгоритм (расстояние между соседними QRS – комплексами и есть кардиоинтервал).
Рис. 1. ЭКГ, снятая с отведения V5.
Так как на ЭКГ могут быть различные низкочастотные помехи, простое детектирование QRS – комплексов с помощью сравнивания сигнала с некоторым пороговым уровнем не всегда эффективно. В этом случае необходимо отслеживать уровень нарастания и спада сигнала, также возможна фильтрация ложных детектирований по длительности QRS-комплекса (протяженность QRS-комплекса обычно составляет 1/10 от всей длительности кардиоинтервала).
Идея алгоритма основана на анализе спада и подъема ЭКГ от отсчета к отсчету. Если в какой-то момент произошло резкое возрастание, а затем снижение значения сигнала ЭКГ, то считается, что в этом месте находится QRS-комплекс, его середина и берется как начало следующего кардиоинтервала. Листинг функции, написанной в MatLab с комментариями, представлен в приложении 1.
Функция принимает совокупность отсчетов ЭКГ, а также шкалу времени, соответствующую этим отсчетам. Алгоритм может работать с изменяющейся частотой дискретизации, единственное условие – соответствие теореме об отсчетах. Также функция принимает опорное значение минимальной величины изменения амплитуды ЭКГ на протяжении QRS – комплекса. Результатом работы функции является массив размера 1xN, где N – количество кардиоинтервалов. Членами этого массива являются числа – значения величины кардиоинтервала в секундах.
|
Алгоритм был проанализирован на различных реальных сигналах ЭКГ и показал свою эффективность. Часть кардиоинтервалограммы, полученной с помощью алгоритма, показана на рис. 2 (внизу) вместе с соответствующим ей участком ЭКГ (вверху).
Рис. 2. Часть кардиоинтервалограммы, полученной в результате работы алгоритма. Для наглядности взят участок с аритмией. Вверху – снятая ЭКГ, внизу – соответствующая ей кардиоинтервалограмма.
Приложение 1.
Функция, преобразующая ЭКГ в последовательность кардиоинтервалов
function [KI]=Kard_Interv(t,x,Uup,Udwn,dt)
%Функция для получения массива кардиоинтервалов из сигнала ЭКГ
%входные параметры: t - массив временных отсчетов, с. Допускается
%изменяемая частота дискретизации (не противоречащая теореме Котельникова);
%x - массив входного сигнала, мВ.
%Uup - верхний предел детектирования возрастания QRS-комплекса, мВ
%Udwn - верхний предел детектирования QRS-комплекса, мВ
%dt - максимальное время длительности QRS-комплекса, c
%функция выводит массив длительностей кардиоинтервалов в секундах.
%вычисление длины массива
C=length(t);
C1=length(x);
%ошибка, если вектора времени и данных неодинаковы
if (C~=C1)
error('x must be same length as t');
end
pr=0;
KI2=zeros(1,1);
tpred=t(1);
%временные метки
t1=0;
t2=0;
%сохраненное значение амплитуды
a1=x(1);
a2=x(1);
for i=2:(C)
%идем вверх, предыдущий вверх
if (x(i-1)<=x(i))&&(pr==0)
t1=t1+(t(i)-t(i-1));
end
%идем вниз, предыдущий вверх
if (x(i-1)>x(i))&&(pr==0)
a1=x(i-1);
ttek=t(i);
pr=1;
end
%идем вниз, предыдущий вниз
if (x(i-1)>=x(i))&&(pr==1)
t2=t2+(t(i)-t(i-1));
end
%идем вверх, предыдущий вниз
if (x(i-1)<x(i))&&(pr==1)
%проверяем величину и длительность пика, который получился
if (a1-a2>Uup)&&((a1-x(i-1))>Udwn)&&((t1+t2)<dt)
KI2=[KI2 ttek-tpred];
tpred=ttek;
end
pr=0;
a2=x(i-1);
t1=0;
t2=0;
end
%end
end
KI=KI2(2:length(KI2));
end