/* * bsp_slide_averager.c * * Created on: 2026年3月20日 * Author: L1ng the codeGod */ #include #include #include "bsp_slide_averager.h" // 滑动均值配置(按需修改) #define WINDOW_SIZE 5 // 窗口长度 /** * @brief 初始化滑动均值的核心变量(替代结构体初始化) * @param buffer: 窗口缓冲区(外部定义的数组) * @param p_index: 指向当前写入索引的指针(外部定义的变量) * @param p_count: 指向有效数据计数的指针(外部定义的变量) */ void slide_averager_init(float buffer[], uint8_t *p_index, uint8_t *p_count) { // 清空缓冲区 for (uint8_t i = 0; i < WINDOW_SIZE; i++) { buffer[i] = 0.0f; } // 初始化索引和计数 *p_index = 0; *p_count = 0; } /** * @brief 添加新数据并计算滑动均值(无结构体,全传参) * @param buffer: 窗口缓冲区(外部数组) * @param p_index: 当前写入索引(指针) * @param p_count: 有效数据计数(指针) * @param new_data: 新增原始数据 * @retval 当前滑动均值 */ float slide_averager_calc(float buffer[], uint8_t *p_index, uint8_t *p_count, float new_data) { // 1. 存入新数据(覆盖最旧数据) buffer[*p_index] = new_data; // 2. 更新索引(循环滑动) *p_index = (*p_index + 1) % WINDOW_SIZE; // 3. 更新有效数据计数(窗口未满时累加) if (*p_count < WINDOW_SIZE) { (*p_count)++; } // 4. 计算均值 float sum = 0.0f; for (uint8_t i = 0; i < *p_count; i++) { sum += buffer[i]; } return sum / *p_count; }