#include "filter_smonth.h"
#include "string.h"
#include "stdio.h"
#define SIZE_SMONTH 256 //滑窗大小
uint8_t smonth_flag = 0; //滑动滤波标志 标志是否首次启用滤波算法
typedef struct fifo_s
{
float buf[SIZE_SMONTH]; //预设最大深度256的fifo,这里元素是headt,当然可以使其他自定义类型
unsigned char head; //下次插入fifo的数组下标
unsigned char tail; //下次fifo出数据的下标
unsigned short num; //fifo中数据元素的个数
} arr_fifo_s;
arr_fifo_s arr_fifo;
//初始化数组fifo
void init_arr_fifo(void)
{
memset(arr_fifo.buf, 0, sizeof(arr_fifo.buf));
arr_fifo.head = 0;
arr_fifo.tail = 0;
arr_fifo.num = 0;
}
//入队
unsigned char in_arr_fifo(float data)
{
arr_fifo.buf[arr_fifo.head] = data;
arr_fifo.head++;
arr_fifo.num++;
if (arr_fifo.head == SIZE_SMONTH)
{
arr_fifo.head = 0;
}
return 0;
}
//出队
unsigned char out_arr_fifo(float* data)
{
*data = arr_fifo.buf[arr_fifo.tail];
arr_fifo.tail++;
arr_fifo.num--;
if (arr_fifo.tail >= SIZE_SMONTH)
{
arr_fifo.tail = 0;
}
return 0;
}
//滑动平均滤波算法
float filter_smonth_average(float data)
{
float data_aver = 0;
float data_temp = 0;
static float data_sum = 0;
if (arr_fifo.num < SIZE_SMONTH)//第一次入队
{
//采集满队列 计算当前累加和
for (int i = 0; i < SIZE_SMONTH; i++)
{
in_arr_fifo(data);
data_sum += data;
arr_fifo.num++;
}
smonth_flag = 1;//置位标志
}
else
{
out_arr_fifo(&data_temp); //取出一个数据到data_temp
in_arr_fifo(data); //存入一个数据
data_sum = data_sum - data_temp + data; //减去取出的数据 加上存入的数据
}
data_aver = data_sum / SIZE_SMONTH; //计算均值
/*打印详细信息
printf("平均值:%.4f , 总和:%.4f , 头数据:%d , 尾数据:%d \n", data_aver, data_sum, arr_fifo.head, arr_fifo.tail);
printf("当前管道数据展示:");
for (int i = 0; i < SIZE_SMONTH; i++)
{
printf("%.2f ", arr_fifo.buf[i]);
}
printf("\n");
*/
return data_aver; //返回滑窗内平均值
}
//滤波
float filter_eliminate_error(float data)
{
float volt_val = 0.0;
volt_val = filter_smonth_average(data); //滑动平均滤波计算ADC电压值
volt_val = volt_val - (float)FIXED_ERR; //消除硬件误差
// volt_val = volt_val * (float)FIT_P1 + (float)FIT_P2;//拟合校准
return volt_val;
}
//测试函数
void filter_smonth_task(void)
{
float data = 0;
printf("请输入数据:");
scanf("%f", &data);
filter_smonth_average(data);
}
高效滑窗算法 滑动平均滤波算法
需积分: 5 110 浏览量
2023-11-17
09:01:51
上传
评论
收藏 2KB ZIP 举报
KeFan2615
- 粉丝: 129
- 资源: 14