美文网首页univue系列
小程序计算加速计平均差变化

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

作者: litielongxx | 来源:发表于2024-02-19 17:59 被阅读0次

    该方法只是处理例如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))
    

    其中:

    • stdDev 是标准差
    • x 是每个数据点
    • μ 是数据的平均值
    • n 是数据点的数量

    步骤:

    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"}]

    相关文章

      网友评论

        本文标题:小程序计算加速计平均差变化

        本文链接:https://www.haomeiwen.com/subject/mvyxadtx.html