作为一个例子提出。
两个数据集。其中一份是在 1 小时内收集的。其中一个在 1 小时内收集了 20 分钟的时间。
-每个数据集包含事件实例,这些实例可以转换为 true ( ) 或 false ( )单列_,表示事件是否发生。
DS1.事件:
_-__-_--___----_-__--_-__---__
Run Code Online (Sandbox Code Playgroud)
DS2.事件:
__--_-__--
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来自动关联两个数据集(如果术语不正确,请纠正我),并找到 DS1 中最有可能出现 DS2(前 x 许多)的偏移量。这可能最终会得到一些匹配百分比,然后我可以通过阈值来确定匹配的有效性。
这样
_-__-_--___----_-__--_-__---__
__--_-__--
Run Code Online (Sandbox Code Playgroud)
DS1.启动 + 34 分钟 ~= DS2.启动
附加信息:
DS1 的录制频率约为 1 Hz。DS2 频率约为 30 Hz。这使得 100% 干净比赛的可能性降低。
替代方法(pandas)将受到赞赏,但 python/pandas 是我可以使用的。
听起来你只是想要互相关之类的东西?
我首先将字符串转换为数字表示形式,因此将-and替换_为1and0
您可以使用字符串replace方法来做到这一点(例如signal.replace("-", "1"))
将它们转换为列表或 numpy 数组:
event1 = [int(x) for x in signal1]
event2 = [int(x) for x in signal2]
Run Code Online (Sandbox Code Playgroud)
然后计算它们之间的互相关性:
xcor = np.correlate(event1, event2, "full")
Run Code Online (Sandbox Code Playgroud)
这将为您提供每个时间滞后的互相关值。您只想找到最大值以及它发生的时间滞后:
nR = max(xcor)
maxLag = np.argmax(xcor) # I imported numpy as np here
Run Code Online (Sandbox Code Playgroud)
给你类似的东西:
Cross correlation value: 5
Lag: 20
Run Code Online (Sandbox Code Playgroud)
听起来您对这里的滞后值更感兴趣。滞后告诉您的本质上是需要多少时间/位置偏移才能获得 2 个信号之间的最大互相关值(匹配程度)
您可能需要查看文档np.correlate并np.convolve确定要使用的方法(完整、相同或有效),因为这取决于数据的长度以及信号长度不同时希望发生的情况
| 归档时间: |
|
| 查看次数: |
1734 次 |
| 最近记录: |