math - 模式识别(肌肉活动)
问题描述
我需要你的建议。我目前正在使用 Arduino 上的 EMG(肌肉)传感器,我的目标是识别和测量肌肉活动的时间。在下图中,您可以找到原始数据。 如您所见,在肌肉活动期间,模拟输出的范围要高得多。但我不知道哪种数学方法适合这项任务。
解决方案
使用滑动窗口...
选择窗口大小
这是您分析信号属性的时间。它应该足够长以保持至少一个信号周期,但 2-3 个周期更好。
现在通过大小等于您的窗口大小的 FIFO 传递您的信号
在您的 FIFO 在每个新输入值处已满后,从中删除第一个并计算 FIFO 内容的最小值和最大值。这种 FIFO 最好以固定长度的循环缓冲区的形式实现。区别在于
max-min
窗口的动态范围,它会告诉您传感器是否检测到活动。临界点
max(t)-min(t)
所以对于每个计算的窗口
t
计算:d(t) = max(t) - min(t)
t
您的窗口的开始时间在哪里。现在:if (d(t)>=threshold) muscle_is_working;
例如,信号中的无源区域有差异,
~40
因此请将阈值设置为大于但小于信号中的有源区域threshold = 50
如果您需要更高的速度(因为您知道哪个 MCU ......而且是的,Arduino 不是一个 MCU,它只是一个框架),您可以使用窗口的绝对总和,而不需要处理每张幻灯片中的整个 FIFO 内容窗户。相反,您只需从 sum 中删除第一项并将最后一项添加到其中。所以方程是:
d(t) = sum(i=t,...,t+size-1) of abs(signal(t)-inactive_average)
将窗口大小四舍五入为 2 的幂也是一个好主意,这样您就可以在循环缓冲区实现中使用位运算而不是除法和取模。
推荐阅读
- node.js - Node + Mongo / Mongoose 文本搜索分数不需要完整的整数?是否有可能以另一种方式过滤低分?
- c++ - 将原始指针移动到已创建函数中的下一个字符
- kubernetes - GKE 持久卷调整大小:文件系统调整大小未完成
- javascript - 有没有办法用
使用内联 Javascript 标记
- java - 在 java 8 中使用流反转映射
- docker - 使用版本 docker 安装 chrome 驱动程序
- python - 为什么带有小部件 CheckboxSelectMultiple 的 MultipleChoiceField 无法存储到数据库中?
- sql - SQL:条件计数语句
- php - 这是在 php 中显示 json 数组的正确方法吗?
- mysql - django项目的git中分支的更改是否需要mysql中的新数据库?