То В этом примере показано, как использовать пользовательскую автомаркировку, функционирует в Signal Labeler к комплексам метки QRS и peaks R электрокардиограммы (ECG) сигналы. Одна пользовательская функция использует ранее обученную текущую нейронную сеть для глубокого обучения, чтобы идентифицировать и определить местоположение комплексов QRS. Другая пользовательская функция использует простое пиковое средство поиска, чтобы определить местоположение peaks R. В этом примере сеть помечает комплексы QRS двух сигналов, которые абсолютно независимы от сетевого обучения и процесса тестирования.
Комплекс QRS, который состоит из трех отклонений в форме волны ECG, отражает деполяризацию правых и левых желудочков основы. QRS является также самым высоким амплитудным сегментом человеческого heartbeat. Исследование комплекса QRS может помочь оценить полное здоровье основы человека и присутствие отклонений [1]. В частности, путем определения местоположения R peaks в комплексах QRS и взгляда в то время интервалы между последовательным peaks, диагност может вычислить изменчивость сердечного ритма пациента и обнаружить сердечную аритмию.
Нейронная сеть для глубокого обучения в этом примере была введена в Сегментации Формы волны Используя Глубокое обучение, где это было обучено с помощью сигналов ECG от общедоступной Базы данных QT 2[] 3[]. Данные состоят примерно из 15 минут записей ECG от в общей сложности 105 пациентов, произведенных на уровне 250 Гц. Чтобы получить каждую запись, ревизоры поместили два электрода в другие места на груди пациента, которая привела к двухканальному сигналу. База данных обеспечивает метки области сигнала, сгенерированные автоматизированной экспертной системой [1]. Добавленные метки позволяют использовать данные, чтобы обучить нейронную сеть для глубокого обучения.
Сигналы, помеченные в этом примере, от Базы данных Аритмии MIT-BIH [4]. Каждый сигнал в базе данных был нерегулярно произведен на среднем уровне 360 Гц и аннотировался двумя кардиологами, допуская верификацию результатов.
Загрузите два сигнала базы данных MIT, соответствуя записям 200 и 203. Передискретизируйте сигналы к регулярной координатной сетке с шагом расчета 1/250 секунды, которая соответствует номинальной частоте дискретизации данных о Базе данных QT.
load mit200 y200 = resample(ecgsig,tm,250); load mit203 y203 = resample(ecgsig,tm,250);
Открытый Signal Labeler. На вкладке Labeler нажмите Import и выберите From workspace
в списке членов. В диалоговом окне выберите сигналы y200
и y203
. Добавьте время информация: Выберите Time
из выпадающего списка и задают частоту дискретизации 250
Гц. Нажмите Import и закройте диалоговое окно. Сигналы появляются в Помеченном Настроенном Браузере Сигнала. Постройте сигналы путем устанавливания флажков рядом с их именами.
Задайте метки, чтобы присоединить к сигналам.
Задайте категориальную метку видимой области (ROI) для комплексов QRS. Нажмите Add Definition на вкладке Labeler. Задайте Маркировать Name как QRSregions
, выберите Label Type of ROI
, введите Тип данных как categorical
, и добавьте две Категории, QRS
и n/a
, каждый на его собственной линии.
Задайте подметку QRSregions
как числовая метка точки для peaks R. Нажмите QRSregions
в Маркировать браузере Definitions, чтобы выбрать его. Нажмите Add Definition и выберите Add sublabel definition
. Задайте маркировать Name как Rpeaks
, выберите LabelType of Point
, и введите Тип данных как numeric
.
Создайте два Пользовательских Functions Маркировки, один, чтобы определить местоположение и пометить комплексы QRS и другого, чтобы определить местоположение и пометить пик R в каждом комплексе QRS. (Код для findQRS
и findRpeaks
функции появляются позже в примере.), Чтобы создать каждую функцию, во вкладке Labeler, расширяют галерею Automate Value и выбирают Add Custom Function. Signal Labeler показывает диалоговое окно, просящее имя, описание и тип метки функции.
Для функции, которая определяет местоположение комплексов QRS, введите findQRS
в Поле имени и выбирают ROI
как Маркировать Type. Можно оставить поле Description пустым, или можно ввести собственное описание.
Для функции, которая определяет местоположение peaks R, введите findRpeaks
в Поле имени и выбирают Point
как Маркировать Type. Можно оставить поле Description пустым, или можно ввести собственное описание.
Если вы уже записали функции, и функции находятся в текущей папке или в пути MATLAB®, Signal Labeler добавляет функции в галерею. Если вы не записали функции, Signal Labeler открывает пустые шаблоны в Редакторе для вас, чтобы ввести или вставить код. Сохраните файлы. Если вы сохранили файлы, функции появляются в галерее.
Найдите и пометьте комплексы QRS входных сигналов.
В Помеченном Настроенном Браузере Сигнала установите флажок рядом с y200
.
Выберите QRSregions
в Маркировать браузере Definitions.
В галерее Automate Value выберите findQRS
.
Нажмите Auto-Label и выберите Auto-Label All Signals
. В диалоговом окне, которое появляется, введите 250
Частота дискретизации Гц в поле Arguments и нажимает ОК.
Signal Labeler определяет местоположение и помечает комплексы QRS для всех сигналов, но отображает метки только для сигналов, флажки которых устанавливаются. Комплексы QRS появляются как заштрихованные области в графике и в осях средства просмотра метки. Активируйте регулятор панорамы путем нажатия на Panner на вкладке Display и увеличьте масштаб области помеченного сигнала.
Найдите и пометьте peaks R, соответствующий комплексам QRS.
Выберите Rpeaks
в Маркировать браузере Definitions.
Вернитесь к вкладке Labeler. В галерее Automate Value выберите findRpeaks
.
Нажмите Auto-Label и выберите Auto-Label All Signals
. Нажмите ОК в диалоговом окне, которое появляется.
Метки и их числовые значения появляются в графике и в осях средства просмотра метки.
Экспортируйте помеченные сигналы сравнить изменчивость сердечного ритма для каждого пациента. На вкладке Labeler нажмите Export ▼ и выберите Labeled Signal Set To File
. В диалоговом окне, которое появляется, дайте имени HeartRates.mat
к помеченному набору сигнала и добавляют дополнительное краткое описание. Нажмите Export.
Вернитесь к Командному окну MATLAB®. Загрузите помеченный набор сигнала. Для каждого сигнала в наборе вычислите изменчивость сердечного ритма как стандартное отклонение разницы во времени между последовательными heartbeat. Постройте гистограмму различий и отобразите изменчивость сердечного ритма.
load HeartRates nms = getMemberNames(heartrates); for k = 1:heartrates.NumMembers v = getLabelValues(heartrates,k,{'QRSregions','Rpeaks'}); hr = diff(cellfun(@(x)x.Location,v)); subplot(2,1,k) histogram(hr,0.5:0.025:1.5) legend(['hrv = ' num2str(std(hr))]) ylabel(nms(k)) ylim([0 6]) end
findQRS
Функция: найдите комплексы QRSfindQRS
функция находит и помечает комплексы QRS входных сигналов.
Функция использует вспомогательную функцию, computeFSST
, изменить входные данные и вычислить synchrosqueezed преобразование Фурье (FSST). Можно или сохранить computeFSST
в отдельном файле в той же директории или вложенном множестве это в findQRS
путем вставки его перед итоговым end
оператор.
findQRS
использует classify
(Deep Learning Toolbox) функция и обученная нейронная сеть для глубокого обучения net
идентифицировать области QRS. Нейронная сеть для глубокого обучения выводит категориальный массив, который помечает каждую точку входного сигнала как принадлежащий области P, комплексу QRS, области T, или ни к одному из них. Эта функция преобразует метки точки, соответствующие комплексу QRS к меткам необходимой области QRS с помощью signalMask
и отбрасывания остальные. df
параметр выбирает как необходимые области только те комплексы QRS, длительность которых больше 20 выборок. Если вы не задаете частоту дискретизации, функция использует значение по умолчанию 250 Гц.
function [labelVals,labelLocs] = findQRS(x,t,parentLabelVal,parentLabelLoc,varargin) % This is a template for creating a custom function for automated labeling % % x is a matrix where each column contains data corresponding to a % channel. If the channels have different lengths, then x is a cell array % of column vectors. % % t is a matrix where each column contains time corresponding to a % channel. If the channels have different lengths, then t is a cell array % of column vectors. % % parentLabelVal is the parent label value associated with the output % sublabel or empty when output is not a sublabel. % parentLabelLoc contains an empty vector when the parent label is an % attribute, a vector of ROI limits when parent label is an ROI or a point % location when parent label is a point. % % labelVals must be a column vector with numeric, logical or string output % values. % labelLocs must be an empty vector when output labels are attributes, a % two column matrix of ROI limits when output labels are ROIs, or a column % vector of point locations when output labels are points. labelVals = cell(2,1); labelLocs = cell(2,1); if nargin<5 Fs = 250; else Fs = varargin{1}; end df = 20; load('trainedQTSegmentationNetwork','net') for kj = 1:size(x,2) sig = x(:,kj); % Reshape input and compute Fourier synchrosqueezed transforms mitFSST = computeFSST(sig,Fs); % Use trained network to predict which points belong to QRS regions netPreds = classify(net,mitFSST,'MiniBatchSize',50); % Create a signal mask for QRS regions and specify minimum sequence length QRS = categorical([netPreds{1} netPreds{2}]',"QRS"); msk = signalMask(QRS,"MinLength",df,"SampleRate",Fs); r = roimask(msk); % Label QRS complexes as regions of interest labelVals{kj} = r.Value; labelLocs{kj} = r.ROILimits; end labelVals = vertcat(labelVals{:}); labelLocs = cell2mat(labelLocs); % Insert computeFSST here if you want to nest it inside findQRS. end
computeFSST
Функция: измените вход и вычислите synchrosqueezed преобразования ФурьеЭта функция использует fsst
функция, чтобы вычислить synchrosqueezed преобразование Фурье (FSST) входа. Как обсуждено в Сегментации Формы волны Используя Глубокое обучение, сеть выполняет лучше всего, когда дали, как введено карту частоты времени каждого обучения или тестирующий сигнал. FSST приводит к набору функций, особенно полезных для текущих сетей, потому что преобразование имеет то же разрешение времени как исходный вход. Функция:
Заполняет входные данные случайными числами и изменяет его в 2 5000 стек массива ячеек, ожидаемый net
.
Задает окно Кайзера длины 128 и масштабный фактор по умолчанию обеспечить соответствующее разрешение частоты.
Данные об извлечениях по частотному диапазону от 0,5 Гц до 40 Гц.
Обрабатывает действительные и мнимые части FSST как отдельные функции.
Нормирует данные путем вычитания среднего значения и деления на стандартное отклонение.
function signalsFsst = computeFSST(xd,Fs) xd = reshape([xd;randn(10000-length(xd),1)/100],5000,2); signalsFsst = cell(1,2); for k = 1:2 [ss,ff] = fsst(xd(:,k),Fs,kaiser(128)); sp = ss(ff>0.5 & ff<40,:); signalsFsst{k} = normalize([real(sp);imag(sp)],2); end end
findRpeaks
Функция: найдите Peaks RЭта функция определяет местоположение самого видного пика необходимых областей QRS, найденных findQRS
. Функция применяет MATLAB® islocalmax
функционируйте к абсолютному значению сигнала в интервалах, расположенных findQRS
.
function [labelVals,labelLocs] = findRpeaks(x,t,parentLabelVal,parentLabelLoc,varargin) labelVals = zeros(size(parentLabelLoc,1),1); labelLocs = zeros(size(parentLabelLoc,1),1); for kj = 1:size(parentLabelLoc,1) tvals = t>=parentLabelLoc(kj,1) & t<=parentLabelLoc(kj,2); ti = t(tvals); xi = x(tvals); lc = islocalmax(abs(xi),'MaxNumExtrema',1); labelVals(kj) = xi(lc); labelLocs(kj) = ti(lc); end end
[1] Laguna, Пабло, Рэймон Джейне и Пере Каминаль. "Автоматическое обнаружение Контуров Волны в Мультиведущих Сигналах ECG: Валидация с Базой данных CSE". Компьютеры и Биомедицинское Исследование. Издание 27, № 1, 1994, стр 45–60.
[2] Голдбергер, Ари Л., Луис А. Н. Амараль, Леон Гласс, Джеффри М. Гаусдорф, Plamen Ch. Иванов, Роджер Г. Марк, Джозеф Э. Митус, Джордж Б. Муди, Чанг-Канг Пенг и Х. Юджин Стэнли. "PhysioBank, PhysioToolkit и PhysioNet: Компоненты Нового Ресурса Исследования для Комплексных Физиологических Сигналов". Циркуляция. Издание 101, № 23, 2000, стр e215–e220. [Циркуляция Электронные Страницы: http://circ.ahajournals.org/content/101/23/e215.full].
[3] Laguna, Пабло, Роджер Г. Марк, Ари Л. Голдбергер и Джордж Б. Муди. "База данных для Оценки Алгоритмов для Измерения QT и Других Интервалов Формы волны в ECG". Компьютеры в Кардиологии. Издание 24, 1997, стр 673–676.
[4] Капризный, Джордж Б. и Роджер Г. Марк. "Удар Базы данных Аритмии MIT-BIH". Разработка IEEE в Журнале Медицины и Биологии. Издание 20, № 3, мочь-июнь 2001, стр 45–50.