这篇文章介绍怎么用加速度数据来检测震动。
首先读取5次三方向的加速度数据,然后再取合加速度进行两两比较,统计差值大于震动阈值的次数,如果大于设定的次数,则认为出现了震动。两两比较的原理是判断两次数据是否出现较大的振幅。
主要的参数设置有传入参数的轮次,震动阈值,判定次数。
u8 detected_shake(double acc_x[], double acc_y[], double acc_z[], u8 n)
{
if (n != 5)
{
return 0;
}
u8 detect_count = 0;
int i = 0;
double acc_3[5] = {0}; // 3方向合加速度
for (i = 0; i < n; i++)
{
acc_3[i] = sqrt(acc_x[i] * acc_x[i] + acc_y[i] * acc_y[i] + acc_z[i] * acc_z[i]);
}
double threshold = 0.2;//单位:m/s2
for (i = 1; i < n; i++)
{
if (abs(acc_3[i] - acc_3[i - 1]) > threshold)//统计相邻两次数据间的差值大于阈值的次数
{
detect_count += 1;
}
}
if (detect_count >= 1) // 出现至少一次差值大于阈值即判定震动
{
return 1;
}
return 0;
}