univue系列

小程序计算加速计平均差变化

2024-02-19  本文已影响0人  litielongxx

该方法只是处理例如normal每间隔200ms获取的xyz数据的变化情况,做一定的分析。
根据实际情况修改。

function detectActivity(arr) {
  // 检查数据的长度是否足够
  if (arr.length < 3) {
    return "数据不足";
  }

  // 计算间隔时间,单位为 ms
  const interval = 200;

  // 初始化加速度指标
  let avgAx = 0;
  let avgAy = 0;
  let avgAz = 0;

  // 计算加速度的平均值
  for (let i = 0; i < arr.length; i++) {
    avgAx += Number(arr[i].ax);
    avgAy += Number(arr[i].ay);
    avgAz += Number(arr[i].az);
  }
  avgAx /= arr.length;
  avgAy /= arr.length;
  avgAz /= arr.length;

  // 计算加速度的标准差
  let stdDevAx = 0;
  let stdDevAy = 0;
  let stdDevAz = 0;
  for (let i = 0; i < arr.length; i++) {
    stdDevAx += Math.pow(Number(arr[i].ax) - avgAx, 2);
    stdDevAy += Math.pow(Number(arr[i].ay) - avgAy, 2);
    stdDevAz += Math.pow(Number(arr[i].az) - avgAz, 2);
  }
  stdDevAx = Math.sqrt(stdDevAx / arr.length);
  stdDevAy = Math.sqrt(stdDevAy / arr.length);
  stdDevAz = Math.sqrt(stdDevAz / arr.length);

  // 根据加速度特征判断活动
  let activity;
  if (stdDevAx > 1 && stdDevAy > 1 && stdDevAz > 1) {
    activity = "跑步中";
  } else if (stdDevAx < 0.3 && stdDevAy < 0.3 && stdDevAz < 0.3) {
    activity = "摇晃手机";
  } else {
    activity = "骑车";
  }
  // 返回检测结果
  return activity;
}

在计算加速度的标准差时,我们使用的是样本标准差的公式:

stdDev = sqrt(Σ(x - μ)² / (n - 1))

其中:

步骤:

  1. 计算平均值 (μ):首先,我们需要计算加速度数据的平均值。这是通过将所有加速度值相加,然后除以数据点的数量来完成的。
  2. 计算偏差:对于每个数据点,我们计算其与平均值的偏差,即 (x - μ)
  3. 平方偏差:我们对每个偏差进行平方,得到 (x - μ)²
  4. 求和:我们对所有平方偏差求和,得到 Σ(x - μ)²
  5. 除以 (n - 1):为了得到无偏估计,我们在求和后除以数据点的数量减 1,即 (n - 1)
  6. 开平方根:最后,我们对结果开平方根,得到标准差。

示例:

给定以下加速度数据:

[-1.70, -0.54, -1.39, -0.73, -0.43, -1.17]
  1. 平均值 (μ):(-1.70 + -0.54 + -1.39 + -0.73 + -0.43 + -1.17) / 6 = -0.82
  2. 偏差:
    • -1.70 - (-0.82) = -0.88
    • -0.54 - (-0.82) = -0.28
    • -1.39 - (-0.82) = -0.57
    • -0.73 - (-0.82) = -0.09
    • -0.43 - (-0.82) = -0.39
    • -1.17 - (-0.82) = -0.35
  3. 平方偏差:
    • 0.7744
    • 0.0784
    • 0.3249
    • 0.0081
    • 0.1521
    • 0.1225
  4. 求和:Σ(x - μ)² = 1.4604
  5. 除以 (n - 1):1.4604 / (6 - 1) = 0.2921
  6. 开平方根:stdDev = sqrt(0.2921) = 0.54

例如一定时间示范的数据中,测试的数据给定数据的加速度标准差为 0.54,仅公式演示。
实际函数的arr则格式为[{ ax: "0.05", ay: "-0.12", az: "2.20"}]

上一篇下一篇

猜你喜欢

热点阅读