|
//
// 限幅平均滤波 Limiting Average Filter
// 对信号进行连续多次采样,对采样值限幅后再进行算术平均
// 适用:抑制脉冲干扰,随机干扰
//
#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
IF #Index <= 0 OR #Index > #Qty THEN
#Index := 1;
END_IF;
IF #Index > 0 AND #Index <= #Qty THEN
IF ABS(#Sample_In - #Sample_Old) < #Delta THEN
#sample_temp := #Sample_In; // 小于限幅,本次采样值有效
#Sample_Old := #Sample_In;
ELSE
#sample_temp := #Sample_Old; // 大于限幅,本次采样值无效,取上次采样值
END_IF;
#SUM := #SUM + #sample_temp; // 累加
#Index := #Index + 1;
END_IF;
IF #Index > #Qty THEN
#Filter_Out := #SUM / #Qty; // 算术平均
#Index := 0;
#SUM := 0.0;
END_IF;
END_IF;
|
|