2016-10-24 3 views
2

예를 들어 설명했습니다.팬더에서 두 데이터 집합의 정렬을 찾는 방법

두 개의 데이터 세트. 하나는 1 시간 동안 수집했습니다. 한 시간은 그 시간 내에 20 분에 걸쳐 수집되었습니다.

각 데이터 세트에는 이벤트가 발생하는지 여부를 나타내는 true (-) 또는 false (_)의 단일 열로 변환 될 수있는 이벤트의 인스턴스가 포함됩니다.

DS1.event :

_-__-_--___----_-__--_-__---__ 

DS2.event :

__--_-__-- 

나는 두 데이터의 상관 관계 (용어가 잘못된 경우 정정 해줘)를 자동화하는 방법을 찾고 있어요 DS2가 가장 많이 발생하는 (상위 x 많은) DS1로 오프셋 (들)을 설정하고 찾습니다. 아마도 일치하는 비율로 끝날 것이므로 일치의 유효성을 판단하기 위해 임계 값을 설정할 수 있습니다.

이러한

_-__-_--___----_-__--_-__---__ 
       __--_-__-- 

DS1.start 34min ~ + = DS2.start

그 상세 내용 :
DS1 기록 된 대략 1 Hz에서. 대략 30 Hz에서 DS2. 이렇게하면 100 % 청결한 성냥이있을 확률이 줄어 듭니다.

다른 방법 (팬더로)은 높이 평가할 수 있지만 파이썬/팬더는 내가 처분 할 수있는 것입니다.

+0

numpy.convolve를 사용하여 그것의 최대? – Evert

답변

1

상호 상관 관계가 필요한 것처럼 들릴까요?

처음 숫자 표현으로 문자열을 변환, 그래서 당신은 (예를 들어 signal.replace("-", "1"))

문자열을 replace 방법을 사용하는 것은 그들을 변환하는 것이 할 수있는 10

으로 -_을 대체 할 것이다 목록 또는 수십 배열 :

event1 = [int(x) for x in signal1] 
event2 = [int(x) for x in signal2] 

그런 다음 상호 상관 관계를 계산하십시오 :

xcor = np.correlate(event1, event2, "full") 

이렇게하면 각 시간 지연에서 상호 상관 값을 얻을 수 있습니다. 당신은 가장 큰 값을 찾으려면, 시간 지연이있는이 발생합니다

nR = max(xcor) 
maxLag = np.argmax(xcor) # I imported numpy as np here 

처럼 뭔가주기 : 여기서 지연 값에 더 관심이있는 것처럼

Cross correlation value: 5 
Lag: 20 

소리가 난다 .지연 신호는 본질적으로 신호 2 개 사이의 상호 상관 값 (일치도)을 최대화하기 위해 필요한 시간/위치 이동 횟수입니다.

np.correlatenp.convolve에 대한 문서를보고 싶을 수 있습니다. 데이터의 길이에 따라 결정되는 것과 같은 방법 (전체, 동일 또는 유효)을 결정하십시오. 신호가 다른 길이라면 어떤 일이 일어나기를 원하십니까?

+0

시도해 보겠습니다. '-'와'_'는 표현의 의미였습니다. 실제로는 부울 유형 값입니다. 이 방법으로 샘플 밀도의 차이를 처리 할 수 ​​있습니까? 아니면 먼저 한 세트의 데이터를 샘플링해야합니까? –

+0

죄송합니다 - 질문에서 샘플링 속도에 관한 부분을 놓쳤습니다. 상호 상관 및 회선 사례 모두에서 기본적으로 하나의 신호를 취해서 다른 신호 위로 밀어 넣습니다. 그렇지 않으면 2 개의 신호가 본질적으로 다른 스케일에 있기 때문에 샘플을 다운해야 할 가능성이 큽니다. 위/아래 샘플링없이 어떻게 할 수 있을지 모르겠습니다. – Simon

관련 문제