|
//
// 中位值滤波 Median 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
IF #Index <= 0 OR #Index > #Window THEN
#Index := 1;
END_IF;
IF #Index >= 1 AND #Index <= #Window THEN
#Data_Pool[#Index] := #Sample_In;
#Index := #Index + 1;
END_IF;
IF #Index > #Window THEN
"SORT"(Asc_Des := TRUE, // 采样值按顺序排列
Sort_IN := #Data_Pool,
Sort_OUT => #Data_Sort);
#Filter_Out := #Data_Sort[#Window / 2]; // 取中位值
END_IF;
END_IF;
|
|