Main Content

생리적 신호에서 분류 특징 추출하기

이 예제에서는 midcrossdtw 함수를 사용하여 걸음걸이 신호 데이터에서 특징을 추출하는 방법을 다룹니다. 걸음걸이 신호는 신경퇴행성 질환이 있는 환자의 걷기 패턴을 연구하는 데 사용됩니다. 건강한 사람과 환자는 서로 걸음과 걸음 사이의 시간이 다르게 나타나는 것으로 보고된 바 있습니다. midcross를 사용하면 이 시간을 간편하게 계산할 수 있습니다. 사람의 걷기 속도 또한 시간이 경과함에 따라 달라집니다. dtw는 워핑을 사용하여 걸음걸이 신호의 시간을 정렬하고 정량적으로 비교하는 간편한 방법을 제공합니다. 이 예제에서는 midcross를 사용하여 걸음걸이 신호에서 각각의 발걸음을 찾고 dtw를 사용하여 걸음걸이 신호의 세그먼트 간 거리를 계산합니다. 이렇게 구한 결과는 신호 분류를 위한 잠재적인 특징으로 검토됩니다. 이 예제에서는 걸음걸이 신호만을 다루지만, 여기에 소개된 함수를 사용하여 심전도(ECG)나 광용정맥파(PPG)와 같은 그 밖의 생리적 신호를 분석할 수도 있습니다.

걸음 간 시간 간격 측정하기

이 예제에서 분석하는 데이터셋은 근위축성 측삭경화증(ALS)이 있는 환자들과 대조군이 걸을 때 수집된 힘 데이터를 포함합니다. ALS는 루 게릭, 스티븐 호킹, 그리고 2014년에 '아이스 버킷 챌린지'로 유명해진 질환입니다.

환자 1명에 대한 걸음걸이 신호 데이터의 처음 30초를 불러온 후 플로팅합니다.

helperGaitPlot('als1m');
xlim([0 30])

Figure contains an axes object. The axes object with title Gait Signal Data, xlabel Time (sec), ylabel mV contains 2 objects of type line. These objects represent Left foot, Right foot.

이 데이터셋은 한쪽 발이 압력 감지 센서(Force Sensitive Resistor)에 가한 힘을 나타냅니다. 힘은 밀리볼트 단위로 측정됩니다. 각 기록의 길이는 1분이고 연구대상자의 왼발과 오른발에 대한 별도의 채널을 포함합니다. 데이터셋에서 각각의 발걸음은 발이 지면에 힘을 가한 후 발이 지면에서 떨어질 때의 힘의 급격한 변화로 특징지어집니다. ALS 환자 1명에 대해 급격한 변화를 찾으려면 midcross를 사용하십시오.

midcross를 사용하여 ALS 환자 1명의 왼발에 대해 각 교차를 찾아서 플로팅합니다. 모든 교차를 검출할 수 있도록 허용오차를 25%로 선택합니다.

Fs = 300;
gaitSignal = helperGaitImport('als1m');
midcross(gaitSignal(1,:),Fs,'tolerance',25);
xlim([0 30])
xlabel('Sample Number')
ylabel('mV')

Figure Mid Cross Plot contains an axes object. The axes object with xlabel Sample Number, ylabel mV contains 9 objects of type line. One or more of the lines displays its values using only markers These objects represent signal, mid cross, upper boundary, upper state, lower boundary, mid reference, lower state.

midcross가 교차를 올바르게 식별합니다. 이번에는 이 함수를 사용하여 환자 10명으로 이루어진 그룹의 걸음 간 시간을 계산합니다. 5명은 대조군 연구대상자이고, 나머지 5명은 ALS 환자입니다. 각 환자의 왼발 기록을 사용하고, 처음 8개의 교차를 배제하여 과도를 제거합니다.

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')

Figure contains an axes object. The axes object with xlabel Stride Number, ylabel Time Between Strides (sec) contains 10 objects of type line. These objects represent ALS, Control.

걸음 간 시간의 분산은 ALS 환자 쪽이 전반적으로 높습니다.

걷기 패턴의 유사도 측정하기

발걸음 간 거리를 수량화했으니 이제 발걸음 간 변화와는 독립적으로 걸음걸이 신호 데이터의 모양을 분석하겠습니다. dtw를 사용하여 신호의 두 세그먼트를 비교합니다. 이상적인 경우라면 치료나 질병이 진행됨에 따라 시간 경과에 따른 걸음걸이 신호의 모양을 비교할 것입니다. 여기서는 동일한 기록 중 두 세그먼트를 비교합니다. 한 세그먼트는 기록의 초반에서 가져온 것이고(sigsInitialLeft), 다른 한 세그먼트는 끝부분에서 가져온 것입니다(sigsFinalLeft). 각 세그먼트에는 여섯 걸음에 대한 기록이 있습니다.

걸음걸이 신호 데이터의 세그먼트를 불러옵니다.

load PNGaitSegments.mat

이 환자는 기록의 처음부터 끝까지 동일한 속도로 걷지 않습니다. dtw는 워핑을 사용하여 세그먼트 간 거리의 시간을 정렬함으로써 세그먼트 간 거리에 대한 측정값을 제공합니다. dtw를 사용하여 두 세그먼트를 비교합니다.

figure
dtw(sigsInitialLeft{1},sigsFinalLeft{1});
legend('Early segment','Later segment','location','southeast')

Figure contains 2 axes objects. Axes object 1 with title Original Signals contains 2 objects of type line. Axes object 2 with title Aligned Signals (Euclidean Distance: 11.834667) contains 2 objects of type line. These objects represent Early segment, Later segment.

두 세그먼트의 시간이 정렬되었습니다. 원래 신호의 오프셋에서 볼 수 있듯이 환자의 걸음 속도가 시간의 경과에 따라 변하는 것처럼 보이지만, dtw는 두 세그먼트의 샘플이 반복되도록 허용함으로써 두 세그먼트를 맞춥니다. 걸음 간 시간의 분산과 함께 dtw를 통해 측정된 거리가 걸음걸이 신호 분류기에 사용할 특징이 됩니다.

신호 분류를 위한 특징 벡터 생성하기

환자의 걸음걸이 신호를 바탕으로 환자가 건강한지 여부를 판단하는 분류기를 만든다고 가정하겠습니다. 걸음 간 시간의 분산 feature1dtw를 통해 측정된 초반 신호 세그먼트와 끝부분 신호 세그먼트의 거리 차 feature2를 분류 특징으로 살펴봅니다.

특징 1은 앞에서 midcross를 사용하여 계산되었습니다.

feature1 = varIST;

ALS 환자와 대조군에 대해 특징 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')

Figure contains an axes object. The axes object with xlabel Variance of Inter-Stride Times, ylabel Distance Between Segments contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent ALS, Control.

ALS 환자가 걸음 간 시간 분산은 더 크지만 dtw를 통해 측정된 세그먼트 간 거리는 더 적은 것으로 보입니다. 이들 특징은 상호 보완적이며, 신경망이나 서포트 벡터 머신과 같은 분류기에서 사용되는 것이 고려될 수 있습니다.

결론

midcrossdtw는 걸음걸이 신호, 그리고 동작이나 활동의 서로 다른 속도로 인해 시간이 경과함에 따라 불규칙적으로 반복되는 기타 생리적 데이터를 비교하는 간편한 방법을 제공합니다. 이 예제에서는 midcross를 사용하여 각 걸음의 시간을 찾았고 dtw를 사용하여 세그먼트의 거리를 계산했습니다. dtwmidcross 거리가 측정하는 시간적 변화를 제거했기 때문에 이 두 값은 상호 보완적입니다. 특징으로서 이 두 메트릭은 이 데이터셋에 대한 대조군과 ALS 환자간을 분리할 수 있었습니다. 이와 마찬가지로, 활동의 함수로서 모양이 변하는 기타 생리적 신호를 검토하는 데 midcrossdtw를 사용할 수 있습니다.

참고 문헌

[1] Goldberger, A. L., L. A. N. Amaral, L. Glass, J. M. Hausdorff, P. Ch. Ivanov, R. G. Mark, R. G. Mietus, G. B. Moody, C.-K. Peng, and H. E. Stanley. "PhysioBank, PhysioToolkit, and PhysioNet: Components of a New Research Resource for Complex Physiologic Signals." Circulation. Vol. 101, Number 23, 2000, pp. e215-e200.

참고 항목

|