滑动滤波算法
来源:互联网 发布:东兴证券下载软件 编辑:程序博客网 时间:2024/06/06 08:03
思路
数据由队列管理,先减去头部的数,再加上新的数据到尾部,除以队列有效数据长度
代码实现
static int PowerMag_CaptureBatteryVoltage(RobotBatteryPowerInfo_typedef* BatteryInfor){ #define BATTERY_VOLTAGE_LENGTH (uint8_t)20 #define BATTERY_VOLTAGE_TOP_ERR (uint32_t)40000 //mV static float s_fReadBatteryVoltage = 0.0; static float s_fReadBatteryVoltageArry[BATTERY_VOLTAGE_LENGTH] = {0.0}; static float s_fReadBatteryVoltageTotoal = 0.0; static uint8_t s_ReadBatteryVoltageIndex = 0; static uint8_t s_TempCnt = 0; s_fReadBatteryVoltage = ad74xx.readBatteryVoltage(BATTERY_VOL_SENSOR_1ST); /* Judge the voltage is valid */ if(s_fReadBatteryVoltage == 0) return (-1); if(s_fReadBatteryVoltage > BATTERY_VOLTAGE_TOP_ERR) return (-2); s_fReadBatteryVoltageTotoal -= s_fReadBatteryVoltageArry[s_ReadBatteryVoltageIndex]; s_fReadBatteryVoltageArry[s_ReadBatteryVoltageIndex] = s_fReadBatteryVoltage; s_fReadBatteryVoltageTotoal += s_fReadBatteryVoltageArry[s_ReadBatteryVoltageIndex]; if(s_ReadBatteryVoltageIndex < (BATTERY_VOLTAGE_LENGTH-1)){ s_ReadBatteryVoltageIndex++; s_TempCnt ++; }else{ s_ReadBatteryVoltageIndex = 0; }#if 1 /* This way is always to be avange */ if(s_TempCnt >= 1){ if(s_TempCnt >= BATTERY_VOLTAGE_LENGTH){ s_TempCnt = BATTERY_VOLTAGE_LENGTH; } BatteryInfor->RobotVoltage = s_fReadBatteryVoltageTotoal/s_TempCnt; }#else /* This way RobotVoltage would be appeared after start 2s */ if(s_TempCnt >= BATTERY_VOLTAGE_LENGTH){ BatteryInfor->RobotVoltage = s_fReadBatteryVoltageTotoal / BATTERY_VOLTAGE_LENGTH; s_TempCnt = BATTERY_VOLTAGE_LENGTH; }#endif return 0;}
阅读全文
0 0
- 滑动滤波算法
- 算法学习笔记之滑动平均滤波算法
- 算法学习笔记之滑动平均滤波算法
- C语言实现的滑动平均滤波算法
- 滤波算法
- 滤波算法
- 滤波算法
- 滤波算法
- 滤波算法
- 滤波算法
- 图像滤波算法
- 常用滤波算法搜集
- 常用滤波算法
- 单片机 滤波算法
- 常用滤波算法搜集
- osea滤波算法
- 滤波算法比较
- 经典的滤波算法
- 一次诡异的NIO和IO性能测试
- qt configure
- 页面上报错:Invalid left-hand side in assignment
- 3056: 升降梯口
- 基于spring的shiro配置
- 滑动滤波算法
- Python GUI 编程
- SpringBoot静态资源处理
- test
- 【canvas】非零环绕原则
- Linux第二天的学习记录
- 数据库TPCE benchmark测试工具
- 模板匹配opencv
- 盒子居中(常用的方法)