五大濾波演算法原理 場景及實踐

2021-10-05 03:59:56 字數 2550 閱讀 9548

在感測器採集資料的過程中,難免因為各種各樣的干擾產生異常值,濾波分為電路濾波和演算法濾波。電路濾波是從源頭上解決(緩解)問題,但是使用成本比較高,即使使用了電路濾波也是不能保證每次採集的資料都是準確的,因為在實際的工作狀態中遇到的干擾各種各樣,演算法濾波的成本比較低,基本思想是採集多次資料對這些採集的資料進行處理最後選擇(或計算)出乙個可靠的資料放入資料庫,要注意演算法濾波需要建立在電路濾波的基礎上,因此將兩者結合起來才能夠保證每次寫入資料庫的資料是可靠的。

a、思路: 根據經驗判斷,確定兩次取樣允許的最大偏差值(設為a),每次檢測到新值時判斷:如果本次值與上次值之差<=a,則本次值有效,如果本次值與上次值之差》a,則本次值無效,放棄本次值,用上次值代替本次值。

b、優點: 能有效克服因偶然因素引起的脈衝干擾。

c、缺點: 無法抑制那種週期性的干擾。 平滑度差。

int filter_value;

int value;

void setup()

void loop()

// 用於隨機產生乙個300左右的當前值

int get_ad()

// 限幅濾波法(又稱程式判斷濾波法)

#define filter_a 1

int filter()

a、方法:

連續取樣n次(n取奇數),把n次取樣值按大小排列,

取中間值為本次有效值。

b、優點:

能有效克服因偶然因素引起的波動干擾;

對溫度、液位的變化緩慢的被測引數有良好的濾波效果。

c、缺點:

對流量、速度等快速變化的引數不宜。

int filter_value;

void setup()

void loop()

// 用於隨機產生乙個300左右的當前值

int get_ad()

// 中位值濾波法

#define filter_n 101

int filter()

// 取樣值從小到大排列(冒泡法)

for(j = 0; j < filter_n - 1; j++)

}} return filter_buf[(filter_n - 1) / 2];

}

a、方法:

連續取n個取樣值進行算術平均運算:

n值較大時:訊號平滑度較高,但靈敏度較低;

n值較小時:訊號平滑度較低,但靈敏度較高;

n值的選取:一般流量,n=12;壓力:n=4。

b、優點:

適用於對一般具有隨機干擾的訊號進行濾波;

這種訊號的特點是有乙個平均值,訊號在某一數值範圍附近上下波動。

c、缺點:

對於測量速度較慢或要求資料計算速度較快的實時控制不適用;

比較浪費ram。

int filter_value;

void setup()

void loop()

// 用於隨機產生乙個300左右的當前值

int get_ad()

// 算術平均濾波法

#define filter_n 12

int filter()

return (int)(filter_sum / filter_n);

}

a、方法:

取a=0-1,本次濾波結果=(1-a)本次取樣值+a上次濾波結果。

b、優點:

對週期性干擾具有良好的抑制作用;

適用於波動頻率較高的場合。

c、缺點:

相位滯後,靈敏度低;

滯後程度取決於a值大小;

不能消除濾波頻率高於取樣頻率1/2的干擾訊號。

int filter_value;

int value;

void setup()

void loop()

// 用於隨機產生乙個300左右的當前值

int get_ad()

// 一階滯後濾波法

#define filter_a 0.01

int filter()

a、方法:

相當於「限幅濾波法」+「消抖濾波法」;

先限幅,後消抖。

b、優點:

繼承了「限幅」和「消抖」的優點;

改進了「消抖濾波法」中的某些缺陷,避免將干擾值匯入系統。

c、缺點:

對於快速變化的引數不宜。

int filter_value;

int value;

void setup()

void loop()

// 用於隨機產生乙個300左右的當前值

int get_ad()

// 限幅消抖濾波法

#define filter_a 1

#define filter_n 5

int i = 0;

int filter()

} else

i = 0;

return value;

}

五大常用演算法

主要是演算法演算法的複雜度 1.分治法 話說遞迴與hanoi塔 二分法求方程近似解 用c 實現合併排序 求最大值和最小值的分治演算法 2.動態規劃法 動態規劃求0 1揹包問題 最長公共子串問題的實現 用動態規劃實現飛彈攔截 最大化投資回報問題的實現 3.貪心演算法 最小生成樹之prim演算法 最小生...

redis的五大基礎型別及使用場景

1 string redis的string型別到底存的是什麼?redis的儲存是二進位制安全的,不管什麼型別的資料,都會轉換成二進位制數字節組進行儲存,當取資料時,取出來的也是二進位制位元組陣列,然後在客戶端對陣列進行轉換。資料的長度是位元組長多,如 k1 99,長度就是2,k2 a,的長度就是1....

演算法之五大查詢演算法

五大經典查詢演算法 線性查詢,通過 遍歷,乙個乙個比較 核心演算法 順序查詢 public static int orderlookup int list,int key return 1 折半查詢 只能用於有順序的陣列 將需要查詢的數與陣列的中值進行比較,若小於,right指標左移,大於則右移,每...