|
//
// 滑动平均滤波(递推平均滤波) Moving Average Filter
//
// 把连续取得的N个采样值看成一个队列,队列的长度固定为N
// 每次采样的一个新数据放入队尾,并扔掉原来队首的一次数据
// 把队列中的N个数据进行算术平均,即滤波输出
//
// 适用:高频震荡系统,周期性干扰
//
#T_On(IN := NOT #T_Off.Q,
PT := #Period / 2);
#T_Off(IN := #T_On.Q,
PT := #Period / 2);
#Trigger(CLK := #T_On.Q); // 采样触发,周期 = Period
IF #Trigger.Q THEN
FOR #i := 1 TO #Window - 1 DO // 采样队列滑动
#Buff[#i + 1] := #Buff[#i];
END_FOR;
#Buff[1] := #Sample_In; // 新采样值入列
#SUM := 0.0;
FOR #i := 1 TO #Window DO
#SUM := #SUM + #Buff[#i];
END_FOR;
#Filter_Out := #SUM / #Window; // 队列平均值
END_IF;
|
|