大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
关于数据采集的滑动平均值滤波的算法
—王超杰
以ADC为例,采集口的模拟量可能夹杂着不同频段,不同峰值的干扰信号,这些干扰信号和要采集的模拟量互相干扰,那么ADC采集的数据量就会偏移原有的真实结果。那么通过硬件与数字滤波两种手段可大大减少采集误差,提高精度。
一般滤波均通过程序算法滤除,其包括去极值滤波、算术平均值滤波、滑动平均值滤波、加权平均滤波等。
今天重点讲一下滑动平均值滤波。其重要的是将**本次转化的结果与过去的N-1次的值之和一起求平均值 **,将此值作为本次AD的采集结果。
以下为一种滑动滤波小程序:
#define N 5;
typedef unsigned int uint;
uint ValueIAddress[N], *Ap, RealAD_Value; /**AD采集数字量临时存储区 , 中间存储长度指针变量 , AD值**/
/**AD采集函数**/
void AD_Collect(void)
{
Ap = ValueIAddress;/**初始化指向数组的首元素**/
RealAD_Value = AD_Filter(Value);/**此Value为实采数据**/
}
/**滑动滤波**/
uint AD_Filter(Value);
{
uint Sum , *P;
*Ap = Value;/**给当前ValueIAddress[N]数组赋值,因为Ap的首地址就是ValueIAddress的首地址**/
Ap++;/**地址++ ,准备好向数组的下一个元素赋值**/
if(Ap >= ValueIAddress+N)/**如果数组超N界,回到首数组首元素**/
Ap = ValueIAddress;
for(P = ValueIAddress;P < ValueIAddress+N;P++)
{
Sum = Sum + *P;/**数组N个元素求和**/
}
Sum = Sum/N;
return Sum;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/219268.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...