模式识别(肌肉activity)

Pattern recognition (muscular activity)

我需要你的推荐。我目前正在使用 Arduino 上的 EMG(肌肉)传感器,我的目标是识别和测量肌肉的时间 activity。在下图中,您可以找到原始数据。 如您所见,在肌肉发达期间 activity 模拟输出的范围要高得多。但我不知道哪种数学方法适合这项任务。

使用滑动window...

  1. select window 尺寸

    是时候分析信号特性了。它应该足够长以保持至少一个信号周期,但 2-3 个周期更好。

  2. 现在通过大小等于您的 window 大小的 FIFO 传递您的信号

    在您的 FIFO 在每个新输入值处已满后,从中移除第一个并计算 FIFO 内容的最小值和最大值。这种 FIFO 最好以固定长度的循环缓冲区的形式实现。 max-min 的区别在于 window 的动态范围,并且会告诉您传感器是否检测到 activity。

  3. 阈值max(t)-min(t)

    所以对于每个计算 window t 计算:

    d(t) = max(t) - min(t)
    

    其中 t 是您 window 的开始时间。现在:

    if (d(t)>=threshold) muscle_is_working;
    

    你的信号中的被动区域有差异~40所以设置阈值比你的信号中的主动区域大但小于例如

    threshold = 50
    

如果你需要更快的速度(因为你在天知道哪个 MCU ......是的,Arduino 不是 MCU 它的唯一框架)你可以使用 window 的绝对总和而不是要求处理 window 每张幻灯片中的整个 FIFO 内容。相反,您只需从 sum 中删除第一项并将最后一项添加到其中。所以等式是:

d(t) = sum(i=t,...,t+size-1) of abs(signal(t)-inactive_average)

将 window 大小四舍五入为 2 的幂也是一个好主意,这样您就可以在循环缓冲区实现中使用位运算而不是除法和模运算。