|
//
// 中位值平均滤波 Median Average Filter
// 连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值
// 适用:高频震荡系统,脉冲干扰、周期性干扰
//
#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
#Buff[#Index + 1] := #Sample_In; // 采样值入列
IF #Index < #QTY THEN
#Index := #Index + 1;
END_IF;
IF #Index = #QTY THEN
#Min := #Max := #Buff[1]; // 求队列中最小值、最大值
FOR #j := 1 TO #QTY DO
IF #Buff[#j] < #Min THEN
#Min := #Buff[#j];
END_IF;
IF #Buff[#j] > #Max THEN
#Max := #Buff[#j];
END_IF;
#SUM := #SUM + #Buff[#j];
END_FOR;
#Filter_Out := (#SUM - #Min - #Max) / (#QTY - 2); // 去掉最小最大值,求平均
#Index := 0;
END_IF;
END_IF;
|
|