请选择 进入手机版 | 继续访问电脑版
查看: 315|回复: 1

如何在低算力MCU平台上优雅的计算均值和方差

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-8 16:43
  • 签到天数: 299 天

    连续签到: 1 天

    [LV.8]以坛为家I

    3744

    主题

    7313

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    37891
    最后登录
    2025-4-27
    发表于 2025-3-20 10:04:03 | 显示全部楼层 |阅读模式
    一维数据的均值和方差计算可以说是几乎是最常用的统计分析方法。这个初中就学过的概念,在嵌入式系统中却有着广泛的实际应用:


    传感器故障检测
    • 正常工作的传感器数据波动应在一定范围内
    • 突然的均值漂移或方差剧变,往往意味着传感器故障
    • 如温度传感器读数突然剧烈波动,很可能是接触不良


    信号质量评估
    • GPS信号强度的均值和方差可以反映定位质量
    • 方差过大说明信号不稳定,可能处于多路径效应区域
    • 均值过低说明信号较弱,可能在遮挡环境下



    机器人控制
    • 舵机位置反馈的方差可以用来检测是否卡死
    • 电机电流的均值可以估计负载大小
    • 轮速反馈的方差可以判断地面情况



    电池管理
    • 电压的滑动均值可以平滑瞬时波动
    • 电流的方差可以反映负载的稳定性
    • 温度的异常波动可能预示电池问题



    这些场景都需要实时、高效地计算数据流的统计特征。虽然计算公式简单,但在实际工程中,有限的资源限制及实时性要求、数值稳定性和存储效率成为主要挑战。
    本文主要探讨如何在有限的计算能力和内存条件下,优雅地实现高效的均值和方差计算。通过优化算法、减少计算复杂度、利用递推公式和定点数运算,文章提供了一系列使用技巧,帮忙开发者在保持精度的同时,显著降低计算开销。这些方法特别适用于物联网设备、嵌入式系统等对资源敏感的领域。


    基础知识
    1.1 定义
    众所周知: 均值(mean)反映数据的集中趋势:
    2.png
    方差(variance)反映数据的离散程度:
    3.png
    基于以上两个定义式出发,可以很简单的转换为C code, 浅显易懂:
    14.png
    使用示例:
    15.png
    但是这种最基础的实现存在几个严重问题:


    1) 数据存储问题
    需要保存全部历史数据
    对于高频采样的传感器(如IMU 200Hz),1s就需要存储200个数据点


    在嵌入式系统中,内存资源宝贵,这种方式极其浪费
    2)计算效率问题
    每次计算都需要遍历全部数据,时间复杂度为O(n)
    对于实时系统,随着数据量增加,计算延迟会越来越大
    不适合需要快速响应的实时控制系统


    3)数值稳定性问题
    直接累加可能导致数值溢出
    对于很大或很小的数据,浮点数精度损失明显


    特别是在计算方差时,(Xi-u)的计算可能产生很大的舍入误差
    4)实时性问题
    无法进行增量计算


    新数据到来时需要重新计算所有统计量


    不适合流数据处理
    在线算法(Online Algorithm)


    在线方法也叫做流式方法, 针对批量方法的缺点,在线方法不需要保存历史数据,在线算法中比较经典的是 Welford算法。
    Welford算法是由B.P. Welford在1962年提出的一种在线计算均值和方差的算法。它的核心思想是:每来一个新数据,就递增地更新均值和方差,而不需要存储所有历史数据。


    2.1 Welford算法
    这是一种数值稳定的在线算法,特别适合处理数据流。Welford算法的核心是递推公式的推导。设第n个数据到来时:


    1) 均值更新
    4.png


    2) 方差更新:
    5.png
    3) 关键推导步骤:
    6.png
    2.2 Welford算法实现
    2.2.1 核心结构和函数
    16.png
    2.2.2 使用示例
    17.png
    2.2.3 算法步骤解释
    1) 每次新数据到来:
    计数加1
    计算新数据与当前均值的差
    更新均值
    更新M2(用于方差计算)
    2) 方差计算:
    直接用M2除以样本数


    样本数小于2时返回0
    算法对比小结


    本文介绍了Welford方差计算方法,它是一种在线、一次遍历的方差计算算法,能在不存储所有样本的情况下,逐步计算所有样本的方差。与传统的方差计算方法相比,Welford方法在降低访存次数的同时,也做到了数值计算的稳定性。因此,Welford方法更适合处理海量数据,也更适合在高性能计算环境中使用。
    事实上,Welford算法启发了 NVIDIA 在2018年提出的Online Softmax算法,该算法降低了Softmax计算的访存次数,提高了计算性能。而Online Softmax则直接启发了FlashAttention,后者已经成为支撑当前最流行的Transformer架构的最核心的计算优化手段。
    18.png


    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:53
  • 签到天数: 274 天

    连续签到: 8 天

    [LV.8]以坛为家I

    12

    主题

    908

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2183
    最后登录
    2025-4-27
    发表于 2025-3-20 10:26:14 | 显示全部楼层
    学习了
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-4-28 07:22 , Processed in 0.112291 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表