2016-10-24 12 views
2

作爲示例呈現。如何查找熊貓中兩個數據集的對齊方式

兩組數據。一個小時內收集一個。在那個小時內收集了20分鐘的時間。

每個數據集都包含可以轉換爲單列真(-)或假(_)的事件實例,表示事件是否正在發生。

DS1.event:

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

DS2.event:

__--_-__-- 

我正在尋找一種方法來自動化這兩個數據的相關性(糾正我,如果該術語是不正確的)設置並找到DS1中可能發生的DS2最多(最多x個)的偏移量。這可能會以一些匹配百分比結束,然後我可以通過閾值來確定匹配的有效性。

使得

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

DS1.start + 34min〜= DS2.start

其他信息:
DS1被記錄以大約1赫茲。 DS2在大約30赫茲。這使得不太可能會有100%的乾淨匹配。

備用方法(對熊貓)將不勝感激,但蟒蛇/熊貓是我所掌握的。

+0

您可以用'numpy.convolve'並找到最大的那個? – Evert

回答

1

聽起來像你只是想要像互相關的東西?

我將字符串轉換到一個數字表示,因此與10

更換你-_你可以做到這一點使用字符串replace方法(如signal.replace("-", "1")

將其轉換爲列表或numpy的數組:

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 

這聽起來像你更感興趣的滯後值這裏。什麼滯後告訴你基本上是有多少時間/所需的位置偏移的兩個信號之間得到最大的互相關值(匹配度)是

你可能想看看文檔爲np.correlatenp.convolve到確定方法(完全,同樣的,或有效)你想通過你的數據的長度,你想,如果你的信號是不同的長度,以發生什麼確定這就是使用

+0

我給這是一個嘗試。 '-'和'_'是爲了表示。他們實際上是布爾類型值。這將處理樣品密度差或將我需要先向下采樣一組數據? –

+0

對不起 - 我錯過了有關的問題採樣率的部分。在互相關和卷積情況下,兩個你基本上是採取一個信號,使其滑動,就比其他。你很可能需要向下樣品,否則你的2個信號有本質上的不同的尺度。我不確定如果沒有上/下采樣你會怎麼做 – Simon