[algorithm] 웨이브 패턴 감지

저는 심전도에서 이미지를 읽고 그 안의 주요 파동 (P 파, QRS 복합체 및 T 파)을 각각 감지하려고합니다. 이제 이미지를 읽고 심전도의 값을 나타내는 (4.2; 4.4; 4.9; 4.7; …)과 같은 벡터를 얻을 수 있습니다. 저는이 벡터를 통과 할 수있는 알고리즘이 필요합니다. 그리고이 파동이 언제 시작되고 끝나는 지 감지 할 수 있습니다.

다음은 그래프 중 하나의 예입니다.

대체 텍스트

그들이 항상 같은 크기를 가지고 있다면 쉬울 것입니다. 그러나 그것이 효과가있는 것 같지 않거나 심전도가 얼마나 많은 파동을 가질 것인지 알고 있었지만 그것은 다를 수도 있습니다. 누구에게 아이디어가 있습니까?

감사!

업데이트 중

내가 달성하려는 것의 예 :

파도를 감안할 때

대체 텍스트

벡터를 추출 할 수 있습니다.

[0; 0; 20; 20; 20; 19; 18; 17; 17; 17; 17; 17; 16; 16; 16; 16; 16; 16; 16; 17; 17; 18; 19; 20; 21; 22; 23; 23; 23; 25; 25; 23; 22; 20; 19; 17; 16; 16; 14; 13; 14; 13; 13; 12; 12; 12; 12; 12; 11; 11; 10; 12; 16; 22; 31; 38; 45; 51; 47; 41; 33; 26; 21; 17; 17; 16; 16; 15; 16; 17; 17; 18; 18; 17; 18; 18; 18; 18; 18; 18; 18; 17; 17; 18; 19; 18; 18; 19; 19; 19; 19; 20; 20; 19; 20; 22; 24; 24; 25; 26; 27; 28; 29; 30; 31; 31; 31; 32; 32; 32; 31; 29; 28; 26; 24; 22; 20; 20; 19; 18; 18; 17; 17; 16; 16; 15; 15; 16; 15; 15; 15; 15; 15; 15; 15; 15; 15; 14; 15; 16; 16; 16; 16; 16; 16; 16; 16; 16; 15; 16; 15; 15; 15; 16; 16; 16; 16; 16; 16; 16; 16; 15; 16; 16; 16; 16; 16; 15; 15; 15; 15; 15; 16; 16; 17; 18; 18; 19; 19; 19; 20; 21; 22; 22; 22; 22; 21; 20; 18; 17; 17; 15; 15; 14; 14; 13; 13; 14; 13; 13; 13; 12; 12; 12; 12; 13; 18; 23; 30; 38; 47; 51; 44; 39; 31; 24; 18; 16; 15; 15; 15; 15; 15; 15; 16; 16; 16; 17; 16; 16; 17; 17; 16; 17; 17; 17; 17; 18; 18; 18; 18; 19; 19; 20; 20; 20; 20; 21; 22; 22; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 32; 33; 33; 33; 32; 30; 28; 26; 24; 23; 23; 22; 20; 19; 19; 18; 17; 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 16; 16; 16; 17; 16; 16; 17; 17; 16; 17; 17; 17; 17; 18; 18; 18; 18; 19; 19; 20; 20; 20; 20; 21; 22; 22; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 32; 33; 33; 33; 32; 30; 28; 26; 24; 23; 23; 22; 20; 19; 19; 18; 17; 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 16; 16; 16; 17; 16; 16; 17; 17; 16; 17; 17; 17; 17; 18; 18; 18; 18; 19; 19; 20; 20; 20; 20; 21; 22; 22; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 32; 33; 33; 33; 32; 30; 28; 26; 24; 23; 23; 22; 20; 19; 19; 18; 17; 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 19; 20; 20; 20; 20; 21; 22; 22; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 32; 33; 33; 33; 32; 30; 28; 26; 24; 23; 23; 22; 20; 19; 19; 18; 17; 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 19; 20; 20; 20; 20; 21; 22; 22; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 32; 33; 33; 33; 32; 30; 28; 26; 24; 23; 23; 22; 20; 19; 19; 18; 17; 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;]

예를 들어 감지하고 싶습니다.

P 파 [19-37]

[51-64]의 QRS 콤플렉스

기타…



답변

내가 할 첫 번째 일은 이미 거기에 무엇이 있는지 보는 것입니다 . 실제로이 특정 문제는 이미 많이 연구되었습니다. 다음은 정말 간단한 몇 가지 방법에 대한 간략한 개요입니다 : link .

나는 또 다른 대답에도 응답해야한다. 신호 처리 및 음악 정보 검색에 대한 연구를합니다. 표면적으로이 문제는 발병 감지와 유사하게 보이지만 문제 컨텍스트는 동일하지 않습니다. 이러한 유형의 생물학적 신호 처리, 즉 P, QRS 및 T 위상 검출 은 이러한 각 파형 의 특정 시간 영역 특성 에 대한 지식을 활용할 수 있습니다 . MIR의 발병 감지는 실제로 그렇지 않습니다. (적어도 신뢰할 수는 없습니다.)

QRS 감지에 잘 작동하는 한 가지 접근 방식 (노트 시작 감지에 반드시 필요한 것은 아님)은 동적 시간 왜곡입니다. 시간 영역 특성이 변하지 않을 때 DTW는 매우 잘 작동 할 수 있습니다. 다음은이 문제에 DTW를 사용하는 짧은 IEEE 문서입니다. link .

이것은 많은 방법을 비교하는 멋진 IEEE 잡지 기사입니다 : link . 많은 일반적인 신호 처리 모델이 시도되었음을 알 수 있습니다. 종이를 훑어보고 이해하는 것을 기본 수준에서 시도하십시오.

편집 :이 기사를 살펴본 후 웨이블릿 기반 접근 방식이 가장 직관적 인 것 같습니다. DTW도 잘 작동하고 거기에 DTW 모듈이 있지만 웨이블릿 접근 방식이 가장 좋습니다. 다른 누군가는 신호의 파생물을 이용하여 응답했습니다. 내 첫 번째 링크는 1990 년 이전의 방법을 조사하지만, 더 현대적인 방법만큼 강력하지 않다고 생각합니다.

편집 : 내가 기회를 얻을 때 간단한 솔루션을 제공하려고합니다, 그러나 이유 그들이 관계없이 모양의 다양한 매개 변수화에 유용하기 때문에 내가 웨이블릿 여기에 적합 생각은 시간 또는 진폭 스케일링 . 즉, 반복되는 시간적 모양이 같지만 시간 척도와 진폭이 다른 신호가있는 경우 웨이블릿 분석은 이러한 모양이 유사한 것으로 인식 할 수 있습니다 (대략적으로 말하면). 또한 제가이 카테고리에 필터 뱅크를 집중시키는 것입니다. 비슷한 것들.


답변

이 퍼즐의 한 부분은 ” 시작 감지이며이 문제를 해결하기 위해 여러 복잡한 알고리즘이 작성되었습니다. 발병에 대한 자세한 정보는 다음과 같습니다 .

다음 조각은 Hamming Distance 입니다. 이 알고리즘을 사용하면 퍼지 비교를 수행 할 수 있습니다. 입력은 2 개의 배열이고 출력은 정수 “거리”또는 두 데이터 세트 간의 차이입니다. 숫자가 작을수록 2가 더 비슷합니다. 이것은 당신이 필요로하는 것에 매우 가깝지만 정확하지는 않습니다. 나는 새로운 거리를 계산하기 위해 Hamming Distance 알고리즘을 약간 수정했습니다. 아마도 이름이 있지만 그것이 무엇인지 모르겠습니다. 기본적으로 배열의 각 요소 사이의 절대 거리를 더하고 합계를 반환합니다. 다음은 파이썬 코드입니다.

import math

def absolute_distance(a1, a2, length):
       total_distance=0
       for x in range(0,length):
               total_distance+=math.fabs(a1[x]-a2[x])
       return total_distance

print(absolute_distance([1,3,9,10],[1,3,8,11],4))

이 스크립트는이 두 배열 사이의 거리 인 2를 출력합니다.

이제이 조각들을 모아 보겠습니다. 시작 감지를 사용하여 데이터 세트에서 모든 웨이브의 시작을 찾을 수 있습니다. 그런 다음 각 웨이브를 샘플 P-Wave와 비교하여 이러한 위치를 반복 할 수 있습니다. QRS Complex를 치면 거리가 가장 큽니다. 다른 P-Wave를 치면 숫자는 0이 아니지만 훨씬 더 작아집니다. P-Wave와 T-Wave 사이의 거리는 매우 작지만 다음과 같은 가정을하면 문제가되지 않습니다.

The distance between any p-wave and any other p-wave will be smaller than the distance between any p-wave and any t-wave.

시리즈는 다음과 같습니다. pQtpQtpQt … p-wave와 t-wave는 서로 바로 옆에 있지만이 시퀀스는 예측 가능하기 때문에 읽기가 더 쉽습니다.

그렇지 않은 편에는이 문제에 대한 미적분 기반 솔루션이있을 것입니다. 그러나 내 마음에 커브 피팅과 적분은이 문제를 더 엉망으로 만듭니다. 내가 작성한 거리 함수 는 두 곡선의 적분을 뺀 것과 매우 유사한 면적 차이 를 찾을 수 있습니다 .

한 번에 1 포인트 씩 반복하여 O (n) 거리 계산을 수행하는 대신 시작 계산을 희생 할 수 있습니다. 여기서 n은 그래프의 포인트 수입니다. 이러한 모든 거리 계산 목록이 있고 50 개의 pQt 시퀀스가 ​​어디에 있는지 알고 있다면 p- 파의 모든 위치에서 겹치지 않는 50 개의 최단 거리를 알 있습니다. 빙고! 단순함을 위해 어떻습니까? 그러나 트레이드 오프는 거리 계산의 증가로 인한 효율성 손실입니다.


답변

상호 상관을 사용할 수 있습니다 . 각 패턴의 모델 샘플을 가져와 신호와 연관시킵니다. 상관 관계가 높은 곳에서 피크를 얻을 수 있습니다. qrs와 t 파를 추출하는이 기술로 좋은 결과를 기대합니다. 그 후 qrs 이전의 상관 신호에서 피크를 찾아 p 파를 추출 할 수 있습니다.

상호 상관은 알고리즘을 구현하기가 매우 쉽습니다. 원래:

x is array with your signal of length Lx
y is an array containing a sample of the signal you want to recognize of length Ly
r is the resulting correlation

for (i=0; i<Lx - Ly; i++){
  r[i] = 0;
  for (j=0; j<Ly ; j++){
    r[i] += x[i+j]*y[j];
  }
}

그리고 r에서 피크를 찾습니다 (예 : 임계 값을 초과하는 값).


답변

가장 먼저 할 일은 데이터를 단순화하는 것입니다.

절대 데이터를 분석하는 대신 한 데이터 포인트에서 다음 데이터 포인트로의 변화량을 분석하십시오.

다음은 ;분리 된 데이터를 입력으로 받아 해당 데이터의 델타를 출력 하는 빠른 라이너입니다 .

perl -0x3b -ple'( $last, $_ ) = ( $_, $_-$last )' < test.in > test.out

제공 한 데이터에서 실행하면 다음과 같이 출력됩니다.

0; 0; 20; 0; 0; -1; -1; -1; 0; 0; 0; 0; -1; 0; 0; 0; 0; 0; 0; 1; 0; 1; 1; 1; 1; 1; 1; 0; 0; 2; 0; -2; -1; -2; -1; -2; -1; 0; -2; -1; 1; -1; 0;- 1; 0; 0; 0; 0; -1; 0; -1; 2; 4; 6; 9; 7; 7; 6; -4; -6; -8; -7; -5; -4; 0; -1; 0;- 1; 1; 1; 0; 1; 0; -1; 1; 0; 0; 0; 0; 0; 0; -1; 0; 1; 1; -1; 0; 1; 0; 0; 0 ; 1; 0; -1; 1; 2; 2; 0; 1; 1; 1; 1; 1; 1; 1; 0; 0; 1; 0; 0; -1; -2; -1; -2; -2; -2; -2 ; 0; -1; -1; 0; -1; 0; -1; 0; -1; 0; 1; -1; 0; 0; 0; 0; 0; 0; 0; 0; -1; 1; 1; 0; 0; 0; 0; 0; 0; 0; 0; -1; 1; -1; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; -1; 1; 0; 0; 0; 0 ; -1; 0; 0; 0; 0; 1; 0; 1; 1; 0; 1; 0; 0; 1; 1; 1; 0; 0; 0; -1; -1; -2;- 1; 0; -2; 0; -1; 0; -1; 0; 1; -1; 0; 0; -1; 0; 0; 0; 1; 5; 5; 7; 8; 9; 4; -7; -5; -8 ; -7; -6; -2; -1; 0; 0; 0; 0; 0; 1; 0; 0; 1; -1; 0; 1; 0; -1; 1; 0; 0; 0 ; 1; 0; 0; 0; 1; 0; 1; 0; 0; 0; 1; 1; 0; 2; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; 1; 0; 0; -1; -2; -2; -2; -2; -1; 0; -1; -2; -1; 0; -1; -1; 0; 1; -1; 1; 0; -1; 1; -1; 1; 0; -1; 0; 0; 0; -1; 1; 0; 0; 1; 0; -1; 0; 1; 0; 0; 1; -1; 0; -1; 1; 0; -1; 0; 0 ; 0; 0; 1; -1; 0; 1; -1; 0; 0; 0; 0; 0; 0; 1; -1; 0; 1; 0; 0; 2; 0; 1; 0; 1; 1; 1; -1; 0; -2; 0; -1; -2; 0; -1; -1; -2; -1; 0; 0; 0; 0; 0; 0; 0; 0; -1; 0; 0; 4; 3; 9; 8; 11; 4; -5; -6; -8; -8; -4; -2; -2; 0; 0; 0; -1; 1; 0; 0; 1; 0; 0; 1; -1; 0; 1; 0; 0; 0; 1; -1; 0; 1; 1; 0; 0; 0; 0; 1; 0; 1; 0; 1; 2; 1; 1; 2; 0; 1 ; 1; 1; 1; 0; 0; 1; 1; 0; 0; -35; 0; 0; 0;

출력에 원래 존재하지 않는 위의 텍스트에 삽입 된 줄 바꿈이 있습니다.


그 후에 qrs 콤플렉스를 찾는 것은 간단합니다.

perl -F';' -ane'@F = map { abs($_) > 2 and $_ } @F; print join ";", @F'< test.out

;; 20 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; 4; 6; 9; 7; 7; 6; -4; -6; -8; -7; -5; -4;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;; 5; 5; 7; 8; 9; 4; -7; -5; -8; -7; -6
;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;; 4; 3; 9; 8; 11; 4; -5; -6; -8; -8; -4;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-35 ;;;

20-35데이터 포인트는 시작과 끝 원본 데이터의 결과0 .

다른 데이터 포인트를 찾으려면 패턴 일치에 의존해야합니다.


첫 번째 p 파를 보면 패턴을 명확하게 볼 수 있습니다.

0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;0;2;0;-2;-1;-2;-1;-2;-1;0;-2;-1;1;-1;0;-1;0;0;0;0;
#           \________ up _______/   \________ down _________/

하지만 두 번째 p 파에서 패턴을 보는 것은 쉽지 않습니다. 이것은 두 번째가 더 멀리 퍼져 있기 때문입니다.

0;0;0;1;0;1;1;0;1;0;0;1;1;1;0;0;0;-1;-1;-2;-1;0;-2;0;-1;0;-1;0;1;-1;0;0;-1;0;0;0;
#     \________ up _______/       \________________ down ________________/

세 번째 p 파동은 다른 두 파동보다 약간 더 불규칙합니다.

0;0;0;0;0;1;-1;0;1;0;0;2;0;1;0;1;1;1;-1;0;-2;0;-1;-2;0;-1;-1;-2;-1;0;0;0;0;0;
#                \_______ up ______/  \__________ down __________/

p 파와 비슷한 방식으로 t 파를 찾을 수 있습니다. 주요 차이점은 언제 발생하는지입니다.


시작하기에 충분한 정보 여야합니다.

두 개의 원 라이너는 예를 들어 일상적인 사용에는 권장되지 않습니다.


답변

다른 두 개의 날카로운 봉우리와 계곡도 qrs 복합체입니까?

머리 꼭대기에서해야 할 일은 각 지점에서이 그래프의 기울기를 계산하는 것입니다. 그런 다음 경사가 얼마나 빨리 변하는 지 확인해야합니다 (2 차 미분 ???). 갑작스런 변화가 있으면 어떤 종류의 급격한 정점에 도달 한 것입니다. 물론 변화 감지를 제한하고 싶으므로 “시간 간격 T에 따라 기울기가 X만큼 변경되는 경우”와 같은 작업을 수행하여 그래프에서 작은 범프를 포착하지 않도록 할 수 있습니다.

내가 수학을 한 지 오래되었습니다 … 그리고 이것은 수학 질문처럼 보입니다;) 아, 그리고 나는 어떤 종류의 신호 분석도하지 않았습니다 :).

다른 요점을 추가하는 것뿐입니다. 제 생각에 신호 평균화를 시도 할 수도 있습니다. 예를 들어, 마지막 3 개 또는 4 개의 데이터 포인트를 평균화합니다. 내가 생각하는 당신이 너무 길 급격한 변화를 감지 할 수 있습니다.


답변

저는이 특정 문제에 대한 전문가는 아니지만 좀 더 일반적인 지식에서 머리 위에 있습니다. QRS 컴플렉스 (또는 다른 기능 중 하나를 알고 있지만이 예에서는 QRS 컴플렉스를 사용하겠습니다)를 알고 있다고 가정 해 보겠습니다. 길이 L의 고정 된 시간 동안 발생합니다. 다음과 같이 분류 문제로 처리 할 수 ​​있는지 궁금합니다.

  1. 신호를 길이가 L 인 겹치는 창으로 분할합니다. 각 창에는 전체 QRS 콤플렉스가 있거나 없습니다.
  2. 푸리에는 각 창을 변환합니다. 귀하의 특징은 각 주파수의 신호 강도입니다.
  3. 손으로 주석을 단 데이터에 대해 의사 결정 트리, 지원 벡터 머신 등을 훈련시킵니다.


답변

좋은 결과를 얻을 수있는 한 가지 방법은 곡선 피팅입니다.

  • 연속파를 간격으로 나눕니다 (아마 qrs 복합체의 날카로운 피크 사이의 중간 정도 간격 경계를 갖는 것이 가장 좋습니다). 한 번에 하나의 간격 만 고려하십시오.
  • 심전도 곡선의 가능한 모든 변형을 근사화하는 데 사용할 수있는 모델 함수를 정의합니다. 이것은 처음 보이는 것만 큼 어렵지 않습니다. 모델 함수는 각 파동의 원점 (t_), 진폭 (a_) 및 폭 (w_)에 대한 매개 변수가있는 세 가지 함수의 합으로 구성 될 수 있습니다.

       f_model(t) = a_p   *  f_p  ((t-t_p  )/w_p) +
                    a_qrs *  f_qrs((t-t_qrs)/w_qrs) +
                    a_t   *  f_t  ((t-t_t  )/w_t)
    

    기능 f_p(t), f_qrs(t),f_t(t) 용도는 세 파 각각을 모델링 할 수있는 간단한 함수이다.

  • 피팅 알고리즘을 사용하십시오 (예 : Levenberg-Marquardt-Algorithm http://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm )을 사용하여 피팅 매개 변수 a_p, t_p, w_p, a_qrs, t_qrs, w_qrs, a_t를 결정합니다. , t_t, w_t는 각 간격의 데이터 세트에 대해

    t_p, t_qrs 및 t_p 매개 변수는 관심있는 매개 변수입니다.