论坛元老
 
- 积分
- 10653
- 金钱
- 10653
- 注册时间
- 2017-4-14
- 在线时间
- 2780 小时
|
发表于 2018-4-22 23:08:17
|
显示全部楼层
本帖最后由 275891381 于 2018-4-24 08:13 编辑
[mw_shl_code=applescript,true]感觉data_sp data_len 都没改变,估计是你移植的时候没改好吧,给你写了个去最大,最小,平均,不过你还可以冒泡排序,删除两头更多的求平均
假如读取ad值函数是 get_data();
#define pinghua_long 50
u16 filter(void)
{
u8 i=0;
static u8 xuhao=0;
static u8 data_temp[pinghua_long];
u32 sum = 0;//求和
u16 temp_max=0,temp_min=0xffff;
data_temp[xuhao]=get_data();
xuhao++;if(xuhao>pinghua_long )xuhao=0;
for(i=0; i<pinghua_long ; i++)
{
if(data_temp>temp_max)temp_max=data_temp ;
if(data_temp <temp_min)temp_min=data_temp ;
sum += data_temp;
}
return ((u16)((sum-temp_max-temp_min)/(pinghua_long -2)));//递推平均值
}
不过感觉这种滤波还是配合dma更好,dma直接弄50个数据的长度,dma中断给个信号,主函数平均下就可以了
[/mw_shl_code] |
|