滑動(dòng)平均值濾波

#define MAX_COUNT 16

static float buf[MAX_COUNT];    /* 數(shù)據(jù)緩沖區(qū) */
static float sum;               /* N個(gè)數(shù)據(jù)的算術(shù)和 */
static int cnt;                 /* 數(shù)據(jù)個(gè)數(shù) */
static int pos;                 /* 緩沖區(qū)位置 */

/*
 * 滑動(dòng)平均值濾波。
 * 每次新進(jìn)來(lái)一個(gè)數(shù)據(jù),就將最早進(jìn)來(lái)的數(shù)據(jù)丟掉,然后計(jì)算包括新數(shù)據(jù)在內(nèi)的N個(gè)數(shù)據(jù)的算術(shù)平均值。
 *
 * 每調(diào)用一次,就加入一個(gè)新數(shù)據(jù),并得到當(dāng)前的濾波值。
 */
float alg(float new_val)
{
    /* 用一個(gè)減法,就做了"丟棄最舊的數(shù)據(jù),加入最新的數(shù)據(jù)"這一操作 */
    sum += (new_val - buf[pos]);

    buf[pos] = new_val;

    /* pos,cnt可能可以合在一起,但用兩個(gè)變量,更清晰一些 */
    // pos &= 0xf;
    pos = (pos + 1) % MAX_COUNT;

    /* 個(gè)數(shù)不足時(shí),cnt是實(shí)際個(gè)數(shù),個(gè)數(shù)足夠時(shí),cnt最多也只是MAX_COUNT */
    //if (cnt < MAX_COUNT)
    //  cnt++;
    cnt += (cnt < MAX_COUNT);

    return sum / cnt;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容