新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 如何在低算力MCU平臺(tái)上優(yōu)雅的計(jì)算均值和方差

如何在低算力MCU平臺(tái)上優(yōu)雅的計(jì)算均值和方差

作者:Alex Yang 時(shí)間:2025-03-07 來源:恩智浦MCU加油站 收藏

一維數(shù)據(jù)的均值和方差計(jì)算可以說是幾乎是最常用的統(tǒng)計(jì)分析方法。這個(gè)初中就學(xué)過的概念,在嵌入式系統(tǒng)中卻有著廣泛的實(shí)際應(yīng)用:

本文引用地址:http://2s4d.com/article/202503/467787.htm

■ 傳感器故障檢測(cè)

□ 正常工作的傳感器數(shù)據(jù)波動(dòng)應(yīng)在一定范圍內(nèi)

□ 突然的均值漂移或方差劇變,往往意味著傳感器故障

□ 如溫度傳感器讀數(shù)突然劇烈波動(dòng),很可能是接觸不良 

信號(hào)質(zhì)量評(píng)估 

□ GPS信號(hào)強(qiáng)度的均值和方差可以反映定位質(zhì)量 

□ 方差過大說明信號(hào)不穩(wěn)定,可能處于多路徑效應(yīng)區(qū)域

□ 均值過低說明信號(hào)較弱,可能在遮擋環(huán)境下

■ 機(jī)器人控制

□ 舵機(jī)位置反饋的方差可以用來檢測(cè)是否卡死

□ 電機(jī)電流的均值可以估計(jì)負(fù)載大小

□ 輪速反饋的方差可以判斷地面情況

■ 電池管理

□ 電壓的滑動(dòng)均值可以平滑瞬時(shí)波動(dòng)

□ 電流的方差可以反映負(fù)載的穩(wěn)定性

□ 溫度的異常波動(dòng)可能預(yù)示電池問題

這些場(chǎng)景都需要實(shí)時(shí)、高效地計(jì)算數(shù)據(jù)流的統(tǒng)計(jì)特征。雖然計(jì)算公式簡(jiǎn)單,但在實(shí)際工程中,有限的資源限制及實(shí)時(shí)性要求、數(shù)值穩(wěn)定性和存儲(chǔ)效率成為主要挑戰(zhàn)。

本文主要探討如何在有限的計(jì)算能力和內(nèi)存條件下,優(yōu)雅地實(shí)現(xiàn)高效的均值和方差計(jì)算。通過優(yōu)化、減少計(jì)算復(fù)雜度、利用遞推公式和定點(diǎn)數(shù)運(yùn)算,文章提供了一系列使用技巧,幫忙開發(fā)者在保持精度的同時(shí),顯著降低計(jì)算開銷。這些方法特別適用于物聯(lián)網(wǎng)設(shè)備、嵌入式系統(tǒng)等對(duì)資源敏感的領(lǐng)域。

基礎(chǔ)知識(shí)

1.1 定義 

眾所周知: 均值(mean)反映數(shù)據(jù)的集中趨勢(shì):

圖片

方差(variance)反映數(shù)據(jù)的離散程度:

圖片

基于以上兩個(gè)定義式出發(fā),可以很簡(jiǎn)單的轉(zhuǎn)換為C code, 淺顯易懂: 

圖片

使用示例:

圖片

但是這種最基礎(chǔ)的實(shí)現(xiàn)存在幾個(gè)嚴(yán)重問題: 

1) 數(shù)據(jù)存儲(chǔ)問題 

● 需要保存全部歷史數(shù)據(jù)

● 對(duì)于高頻采樣的傳感器(如IMU 200Hz),1s就需要存儲(chǔ)200個(gè)數(shù)據(jù)點(diǎn)

● 在嵌入式系統(tǒng)中,內(nèi)存資源寶貴,這種方式極其浪費(fèi)

2)計(jì)算效率問題 

● 每次計(jì)算都需要遍歷全部數(shù)據(jù),時(shí)間復(fù)雜度為O(n)

● 對(duì)于實(shí)時(shí)系統(tǒng),隨著數(shù)據(jù)量增加,計(jì)算延遲會(huì)越來越大

● 不適合需要快速響應(yīng)的實(shí)時(shí)控制系統(tǒng)

3)數(shù)值穩(wěn)定性問題 

● 直接累加可能導(dǎo)致數(shù)值溢出

● 對(duì)于很大或很小的數(shù)據(jù),浮點(diǎn)數(shù)精度損失明顯

● 特別是在計(jì)算方差時(shí),(Xi-u)的計(jì)算可能產(chǎn)生很大的舍入誤差

4)實(shí)時(shí)性問題

● 無法進(jìn)行增量計(jì)算

● 新數(shù)據(jù)到來時(shí)需要重新計(jì)算所有統(tǒng)計(jì)量

● 不適合流數(shù)據(jù)處理

在線(Online Algorithm)

在線方法也叫做流式方法, 針對(duì)批量方法的缺點(diǎn),在線方法不需要保存歷史數(shù)據(jù),在線中比較經(jīng)典的是 算法。

算法是由B.P. 在1962年提出的一種在線計(jì)算均值和方差的算法。它的核心思想是:每來一個(gè)新數(shù)據(jù),就遞增地更新均值和方差,而不需要存儲(chǔ)所有歷史數(shù)據(jù)。

2.1 Welford算法 

這是一種數(shù)值穩(wěn)定的在線算法,特別適合處理數(shù)據(jù)流。Welford算法的核心是遞推公式的推導(dǎo)。設(shè)第n個(gè)數(shù)據(jù)到來時(shí):

1) 均值更新

圖片

2) 方差更新:

圖片

3) 關(guān)鍵推導(dǎo)步驟:

圖片

2.2 Welford算法實(shí)現(xiàn)2.2.1 核心結(jié)構(gòu)和函數(shù) 

圖片

圖片

 2.2.2 使用示例 

圖片

 2.2.3 算法步驟解釋

1) 每次新數(shù)據(jù)到來:

● 計(jì)數(shù)加1

● 計(jì)算新數(shù)據(jù)與當(dāng)前均值的差

● 更新均值

● 更新M2(用于方差計(jì)算)

2) 方差計(jì)算:

● 直接用M2除以樣本數(shù)

● 樣本數(shù)小于2時(shí)返回0

算法對(duì)比小結(jié)

本文介紹了Welford方差計(jì)算方法,它是一種在線、一次遍歷的方差計(jì)算算法,能在不存儲(chǔ)所有樣本的情況下,逐步計(jì)算所有樣本的方差。與傳統(tǒng)的方差計(jì)算方法相比,Welford方法在降低訪存次數(shù)的同時(shí),也做到了數(shù)值計(jì)算的穩(wěn)定性。因此,Welford方法更適合處理海量數(shù)據(jù),也更適合在高性能計(jì)算環(huán)境中使用。

事實(shí)上,Welford算法啟發(fā)了 NVIDIA 在2018年提出的Online Softmax算法,該算法降低了Softmax計(jì)算的訪存次數(shù),提高了計(jì)算性能。而Online Softmax則直接啟發(fā)了FlashAttention,后者已經(jīng)成為支撐當(dāng)前最流行的Transformer架構(gòu)的最核心的計(jì)算優(yōu)化手段。

圖片



關(guān)鍵詞: Welford 算法

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉