В этом примере показано, как использовать функции midcross
и dtw
для извлечения функций из данных о сигнале походки. Сигналы походки используются для изучения шаблонов ходьбы пациентов с нейродегенеративным заболеванием. Сообщалось, что время между шагами отличается между здоровыми и больными индивидуумами. midcross
предлагает удобный способ вычислить эти времена. Люди также изменяют скорость ходьбы с течением времени. dtw
обеспечивает удобный способ количественного сравнения формы сигналов походки путем деформации, чтобы выровнять их во времени. Этот пример использует midcross
для определения местоположения каждого шага в сигнале походки и dtw
для вычисления расстояний между сегментами сигнала походки. Эти результаты исследуются как потенциальные признаки для классификации сигналов. Хотя этот пример характерен для сигналов походки, другие физиологические сигналы, такие как электрокардиограмма (ЭКГ) или фотоплетизмограмма (PPG), также могут быть проанализированы с помощью этих функций.
Анализируемый набор данных содержит данные о силе, собранные во время ходьбы для пациентов с амиотрофическим латеральным склерозом (ALS) и контрольной группой. ALS - это болезнь, прославленная Лу Геригом, Стивеном Хокингом и 2014 годом 'Ice Bucket Challenge'.
Загрузите и постройте график первых 30 секунд данных сигнала походки для одного пациента.
helperGaitPlot('als1m');
xlim([0 30])
Этот набор данных представляет силу, приложенную ногой к чувствительному к силе резистору. Сила измеряется в милливольтах. Каждая запись имеет длину в одну минуту и содержит отдельные каналы для левой и правой ноги субъекта. Каждый шаг в наборе данных характеризуется резким изменением силы, когда стопа ударяется и покидает землю. Использование midcross
чтобы найти эти резкие изменения для пациента с БАС.
Использование midcross
найти и построить график расположения каждого пересечения для левой ноги пациента с БАС. Выберите допуск 25%, чтобы убедиться, что каждый переход обнаружен.
Fs = 300; gaitSignal = helperGaitImport('als1m'); midcross(gaitSignal(1,:),Fs,'tolerance',25); xlim([0 30]) xlabel('Sample Number') ylabel('mV')
midcross
правильно определяет пересечения. Теперь используйте его, чтобы вычислить время между шагами для группы из десяти пациентов. Пять пациентов являются контрольными субъектами, а пять пациентов имеют БАС. Используйте запись левой ноги для каждого пациента и исключить первые восемь переходов, чтобы удалить переходные процессы.
pnames = helperGaitImport(); for i = 1:10 gaitSignal = helperGaitImport(pnames{i}); IND2 = midcross(gaitSignal(1,:),Fs,'Tolerance',25); IST{i} = diff(IND2(9:2:end)); varIST(i) = var(IST{i}); end
Постройте график времени между шагами.
figure hold on for i = 1:5 plot(1:length(IST{i}),IST{i},'.-r') plot(1:length(IST{i+5}),IST{i+5},'.-b') end xlabel('Stride Number') ylabel('Time Between Strides (sec)') legend('ALS','Control')
Отклонение времени между шагами выше в целом для пациентов с БАС.
Определив количество расстояния между шагами, продолжите анализировать форму данных сигнала походки независимо от этих межэтапных изменений. Сравните два сегмента сигнала, используя dtw
. В идеале можно сравнить форму сигнала походки с течением времени по мере прогрессов лечения или заболевания. Здесь мы сравниваем два сегмента одной и той же записи, один сегмент, взятый в начале записи (sigsInitialLeft
), а второй ближе к концу (sigsFinalLeft
). Каждый сегмент содержит шесть шагов.
Загрузите сегменты данных сигнала походки.
load PNGaitSegments.mat
Пациент не ходит с одинаковой скоростью на протяжении всей записи. dtw
обеспечивает меру расстояния между сегментами путем их деформации, чтобы выровнять их во времени. Сравнение двух сегментов с помощью dtw
.
figure dtw(sigsInitialLeft{1},sigsFinalLeft{1}); legend('Early segment','Later segment','location','southeast')
Эти два сегмента выровнены по времени. Хотя скорость шага пациента, по-видимому, изменяется с течением времени, как видно на смещении исходных сигналов, dtw
соответствует этим двум сегментам, позволяя выборкам каждого сегмента повторяться. Расстояние через dtw
, наряду с отклонением времени между шагами, будут исследованы как функции для классификатора сигнала походки.
Предположим, что вы создаете классификатор, чтобы решить, является ли пациент здоровым, на основе сигналов походки. Исследуйте отклонение времени между шагами, feature1
и расстояние через dtw
между начальным и конечным сегментами сигнала, feature2
, как классификационные функции.
Функция 1 ранее вычислялась с помощью midcross
.
feature1 = varIST;
Функция 2 извлечения для пациентов с БАС и контрольной группы.
feature2 = zeros(10,1); for i = 1:length(sigsInitialLeft) feature2(i) = dtw(sigsInitialLeft{i},sigsFinalLeft{i}); end
Постройте график функций для субъектов ALS и субъектов управления.
figure plot(feature1(1:5),feature2(1:5),'r*',... feature1(6:10),feature2(6:10),'b+',... 'MarkerSize',10,'LineWidth',1) xlabel('Variance of Inter-Stride Times') ylabel('Distance Between Segments') legend('ALS','Control')
Пациенты с ALS, по-видимому, имеют большое отклонение во времени между шагами, но меньшее расстояние через dtw
между сегментами. Эти признаки дополняют друг друга и могут быть исследованы для использования в классификаторе, таком как Нейронная Сеть или Машина опорных векторов.
midcross
и dtw
обеспечивают удобный способ сравнения сигналов походки и других физиологических данных, которые повторяются нерегулярно с течением времени из-за различных скоростей движения или активности. В этом примере время шага находилось с использованием midcross
и расстояния между сегментами вычислялись с помощью dtw
. Это были дополнительные меры, как dtw
удалено любое изменение времени, которое midcross
расстояния будут измеряться. Как функции, эти две метрики показали разделение между пациентами с контролем и ALS для этого набора данных. midcross
и dtw
можно также использовать для исследования других физиологических сигналов, форма которых изменяется как функция активности.
[1] Гольдбергер, А. Л., Л. А. Н. Амарал, Л. Гласс, Ж. М. Хаусдорф, П. Ч. Иванов, Р. Г. Марк, Р. Г. Миетус, Г. Б. Муди, К.-К. Пэн и Х. Э. Стэнли. PhysioBank, PhysioToolkit и PhysioNet: компоненты нового исследовательского ресурса комплексных физиологических сигналов. Циркуляция. Том 101, № 23, 2000, pp. e215-e200.