void VbusAvgCal(void) { //滑动平均求和量,正BUS滑动平均求和量,负BUS滑动平均求和量,双边电压平均量 static long VSum=0; static long VSum=0怎么理解?//母线电压采样4次滑动平均 VSum = VSum + SADC.Vbus - (VSum>>2); Vbus.Avg = VSum>>2; }
时间: 2024-04-02 08:31:40 浏览: 118
滑动平均算法
4星 · 用户满意度95%
`static long VSum=0;` 这一行代码定义了一个静态的长整型变量 `VSum` 并初始化为0。由于 `VSum` 是静态变量,所以它在函数调用之间保持不变。这意味着每次调用 `VbusAvgCal` 函数时,`VSum` 的值会被保留,可以用于实现滑动平均算法。
滑动平均算法的实现方式是累加最近的若干个采样值,每次新的采样值进来时,将它加入总和中并减去最旧的采样值,然后计算平均值。这里采用了一个长度为4的窗口,每次加入新的采样值时,将 `VSum` 右移2位,相当于将 `VSum` 除以4,然后加上新的采样值,再减去 `VSum` 右移2位后的值。最后将 `VSum` 右移2位,得到4个采样值的平均值,赋值给 `Vbus.Avg`。
需要注意的是,采样值的数据类型是 `long`,这意味着这里的滑动平均算法是针对整数类型的。如果需要处理浮点数类型的数据,需要修改代码,使用浮点数类型的变量来保存总和和平均值,并且使用除法运算来计算平均值。
阅读全文