模式识别(肌肉activity)
Pattern recognition (muscular activity)
我需要你的推荐。我目前正在使用 Arduino 上的 EMG(肌肉)传感器,我的目标是识别和测量肌肉的时间 activity。在下图中,您可以找到原始数据。 如您所见,在肌肉发达期间 activity 模拟输出的范围要高得多。但我不知道哪种数学方法适合这项任务。
使用滑动window...
select window 尺寸
是时候分析信号特性了。它应该足够长以保持至少一个信号周期,但 2-3 个周期更好。
现在通过大小等于您的 window 大小的 FIFO 传递您的信号
在您的 FIFO 在每个新输入值处已满后,从中移除第一个并计算 FIFO 内容的最小值和最大值。这种 FIFO 最好以固定长度的循环缓冲区的形式实现。 max-min
的区别在于 window 的动态范围,并且会告诉您传感器是否检测到 activity。
阈值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 的幂也是一个好主意,这样您就可以在循环缓冲区实现中使用位运算而不是除法和模运算。
我需要你的推荐。我目前正在使用 Arduino 上的 EMG(肌肉)传感器,我的目标是识别和测量肌肉的时间 activity。在下图中,您可以找到原始数据。
使用滑动window...
select window 尺寸
是时候分析信号特性了。它应该足够长以保持至少一个信号周期,但 2-3 个周期更好。
现在通过大小等于您的 window 大小的 FIFO 传递您的信号
在您的 FIFO 在每个新输入值处已满后,从中移除第一个并计算 FIFO 内容的最小值和最大值。这种 FIFO 最好以固定长度的循环缓冲区的形式实现。
max-min
的区别在于 window 的动态范围,并且会告诉您传感器是否检测到 activity。阈值
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 的幂也是一个好主意,这样您就可以在循环缓冲区实现中使用位运算而不是除法和模运算。