如何用Python准确计数和计时传感器数据中的运动事件?

0 投票
0 回答
26 浏览
提问于 2025-04-12 06:36

我正在做一个Python项目,主要是分析传感器数据,特别是从一个3GB的CSV文件中获取加速度计和陀螺仪的读数(总共两个传感器)。

我的目标是根据一些特定的条件来识别运动事件,比如:如果加速度计的某个值大于1,或者陀螺仪的某个值大于50,就算是发生了运动事件。然后我需要统计这些事件的数量,并根据它们的持续时间和周期性进行分类。

具体条件如下:

  1. 运动事件的开始是当 加速度计的值大于1 或者 陀螺仪的值大于50 时。
  2. 事件的持续时间必须在1到10秒之间,才算有效。
  3. 如果超过90秒没有任何运动事件发生,计数器应该重置。
  4. 我需要统计这些有效事件的数量(运动计数器),总的运动次数(总运动次数),并识别出四个连续的有效事件发生时的情况(周期计数器,当周期计数器增加时,运动计数器也要重置)。

举个例子:

  • 如果加速度计的值大于1 --> 如果这个条件持续了1到10秒,就增加运动计数器,否则不做任何事情。(但是程序不能在加速度计的条件满足时混淆“或”的逻辑,我们需要继续记录加速度计的运动时间,而不被其他条件打断)
  • 同时,检查其他条件满足的时间。如果这个时间超过90秒,就把运动计数器设为0。
  • 当运动计数器等于4时,周期计数器加1,然后把运动计数器重置为0。

对于CSV文件中的每一行:

    if accVector1>1 or accVector2>1 or gyroVector1>50 or gyroVector2>50:
        if not movement_start:
            movement_start = current_time
    else:
        if movement_start:
            movement_duration = (current_time - movement_start)            
            if 0.5 < movement_duration < 10:
                movement_counter += 1
                total_LM+=1
                hareketin_bitisi = current_time
                movement_start = None
                if movement_counter == 4:
                    movement_counter = 0
                    periodic_movement += 1
            else:
                movement_start = None
    if hareketin_bitisi and (current_time - hareketin_bitisi) > 90:
        movement_counter = 0 

0 个回答

暂无回答

撰写回答