恭喜,你发布的帖子
发布于 2022-12-07 18:10:39
4楼
首先,要知道为啥要滤波。滤波的目的是哪类?
如果是信号真值,你为啥要滤掉?
通常使用滤波,是因为信号中参杂了干扰信号,目的是去掉干扰信号,获得信号真值。
如果干扰信号是50Hz(20ms周期),那么,就应该以此周期(差模干扰信号平均值为0)去掉干扰。获得信号真值。
对于共模干扰信号,只能通过偏移量去除。
其次,平均值获取真值,有明显的信号延迟、滞后;后续在使用PID调节时,要充分注意延迟环节带来的可能系统震荡。
再说,去掉最小值、最大值的方式并不可取。是真值为啥要去除?错误的信号未必是最小值、最大值;而是不可能出现的斜率。
再说了,这种滤波,不要使用浮点实数!所有传感器AD信号都是变换为整数。只是在人机界面上才需要显示工程量实数。
最后,
1、不要用浮点数(运算慢又易出错。)用整数!
2、算法:
为啥要保存每次采集值到数组,再求和;再除数量?
平均值Yn =(X1+X2+X3+..+Xn)/n = X1/n+X2/n+X3/n+..+Xn/n
Yn+1=(Yn - X1)/n +( Xn+1)/n
若n=2、4、8、16,那么,信号整数Xn只需要右移就是/2/4/8/16
提示:用好数组,数组不是必须从零开始,也可以是-1,-2;可以把平均值、最大最小值指定放在那里!
不要用数组移动,用数组元素指针INDEX 存放!
请填写推广理由:
分享
只看
楼主