#include "user.h"

// 初始化
void MAF_Init(MovingAverageFilter *f)
{
    for (int i = 0; i < f->size; i++)
        f->buffer[i] = 0.0f;

    f->index = 0;
    f->sum = 0.0f;
    f->is_full = 0;
}

// 输入新数据并返回最新平均值
float MAF_Update(MovingAverageFilter *f, float new_value)
{
    if (f->is_full) {
        // 删除最旧值
        f->sum -= f->buffer[f->index];
    }

    // 写入新值
    f->buffer[f->index] = new_value;
    f->sum += new_value;

    f->index++;
    if (f->index >= f->size) {
        f->index = 0;
        f->is_full = 1;   // 表示缓冲区装满了
    }

    // 未满时平均值 = sum / 已填入的数量
    if (!f->is_full)
        return f->sum / (float)f->index;

    // 满了以后标准滑动平均
    return f->sum / f->size;
}
