ADC采样滤波
本帖最后由 koala889 于 2021-11-22 16:34 编辑//递推平均滤波法(滑动平均滤波法)
/*
* description: 把连续取N个采样值看成一个队列,队列的长度固定为N,
* 每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先入先出原则),
* 把队列中的N个数据进行算术平均运算,就可获得新的滤波结果
* N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度:N=1~4
* advantage: 对周期性干扰有良好的抑制作用,平滑度高,适用于高频震荡的系统
* disadvantage: 灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差,
* 不易消除由于脉冲干扰所引起的采样值偏差,
* 不适用于脉冲干扰比较严重的场合,比较浪费ram
*/
#define N 12
char value_buf;
char i=0;
char filter()
{
char count;
int sum=0;
value_buf = get_ad();
if ( i == N )
{
i = 0;
}
for ( count=0;count<N,count++)
{
sum = value_buf;
}
return (char)(sum/N);
}
各位看看平时都是怎么处理ADC采集数据的? 取平均值? 均值滤波是最简单的处理方式 学习了 如果信号很弱,可以把采样时间拉长,更准一些,然后再均值滤波 super何川 发表于 2021-12-9 18:16
如果信号很弱,可以把采样时间拉长,更准一些,然后再均值滤波
感觉均值滤波有点太简单了,
要寻求更好的方法了 平均值滤波,适用用大部分场合。 楼主代码少写了一个+,应该是sum += value_buf,要说好用的数据采集滤波,我试过最好用的是卡尔曼滤波。 hjl2832 发表于 2021-12-16 08:22
楼主代码少写了一个+,应该是sum += value_buf,要说好用的数据采集滤波,我试过最好用的是卡尔曼滤 ...
卡尔曼也用过,就是有的时候系数调整不好,反应慢,滤波效果很好 100次不够平均,用1000不够用10000,再不够上100000,平均解决 ADC采样数字滤波的吗? 滤波算法很多种的。 如何滤除信号的直流量呢? 滑动平均滤波法取多少个样点比较好? FPGA做数字滤波很方便 简单点的平均值滤波,中位值滤波等。 FPGA做数字滤波很方便
页:
[1]