常用的幾種演算法 記錄紀律

2021-10-05 16:30:05 字數 4175 閱讀 4721

#include

#include

using

namespace std;

/*********1***********/

const

int n_limit =2;

int value_lim =50;

/*********2**********/

const

int n_mid =11;

/*********3**********/

const

int n_mean =12;

/*********4**********/

const

int n_dtm =4;

int i_dtm =0;

int value_buf[n_dtm +1]

=;/*********5**********/

const

int n_mm =4;

/*********6**********/

const

int n_ldtm =4;

//先限幅濾波幅度在+-4

int value_ldtm =50;

const

int n_lddtm =5;

//再進行遞推濾波

int i_lddtm =0;

int value_ldtm_buf[n_lddtm +1]

=;const

int size =20;

void

delay_ms

(int intms)

;//延時函式

intget_data()

;//模擬取樣資料的函式rand()獲取的隨機數

/******** 濾波函式 *********/

intfilter_limit()

;//限幅濾波器

intfilter_mid()

;//中位值濾波法

intfilter_mean()

;//算術平均濾波法

intfilter_dtmean()

;//遞推平均濾波法

intfilter_midmean()

;//中位值平均濾波法

intfilter_limdtm()

;//限幅平均濾波法

void

main()

system

("pause");

}/*1.限幅濾波法函式體*/

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

a、方法:

根據經驗判斷,確定兩次取樣允許的最大偏差值(設為a)

每次檢測到新值時判斷:

如果本次值與上次值之差<=a,則本次值有效

如果本次值與上次值之差》a,則本次值無效,放棄本次值,用上次值代替本次值

b、優點:

能有效克服因偶然因素引起的脈衝干擾

c、缺點

無法抑制那種週期性的干擾

平滑度差

*/int

filter_limit()

/*2.中位值濾波法函式體*/

/*2、中位值濾波法

a、方法:

連續取樣n次(n取奇數)

把n次取樣值按大小排列

取中間值為本次有效值

b、優點:

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

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

c、缺點:

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

*/int

filter_mid()

cout << endl;

for(j =

0; j < n_mid -

1; j++)}

} cout <<

"排序後的n_mid次取樣資料是:"

<< endl;

for(

int i =

0; i < n_mid; i++

)return value_buf[

(n_mid -1)

/2];

}/*3.均值濾波法函式體*/

/*3、算術平均濾波法

a、方法:

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

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

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

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

b、優點:

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

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

c、缺點:

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

比較浪費ram

*/int

filter_mean()

cout <<

"均值為:"

<<

(int

)(sum / n_mean)

<< endl;

return

(int

)(sum / n_mean);}

/*4.遞推均值濾波法(滑動均值濾波法)函式體*/

/*4、遞推平均濾波法(又稱滑動平均濾波法)

a、方法:

把連續取n個取樣值看成乙個佇列

佇列的長度固定為n

每次取樣到乙個新資料放入隊尾,並扔掉原來隊首的一次資料.(先進先出原則)

把佇列中的n個資料進行算術平均運算,就可獲得新的濾波結果

n值的選取:流量,n=12;壓力:n=4;液面,n=4~12;溫度,n=1~4

b、優點:

對週期性干擾有良好的抑制作用,平滑度高

適用於高頻振盪的系統

c、缺點:

靈敏度低

對偶然出現的脈衝性干擾的抑制作用較差

不易消除由於脈衝干擾所引起的取樣值偏差

不適用於脈衝干擾比較嚴重的場合

比較浪費ram

*/int

filter_dtmean()

cout <<

"均值為:"

<<

(int

)(sum / n_dtm)

<< endl;

return

(int

)(sum / n_dtm);}

/*5.中位值均值濾波法函式體*/

/*5、中位值平均濾波法(又稱防脈衝干擾平均濾波法)

a、方法:

相當於「中位值濾波法」+「算術平均濾波法」

連續取樣n個資料,去掉乙個最大值和乙個最小值

然後計算n-2個資料的算術平均值

n值的選取:3~14

b、優點:

融合了兩種濾波法的優點

對於偶然出現的脈衝性干擾,可消除由於脈衝干擾所引起的取樣值偏差

c、缺點:

測量速度較慢,和算術平均濾波法一樣

比較浪費ram

*/int

filter_midmean()

cout << endl;

for(j =

0; j < n_mm -

1; j++)}

} cout <<

"去掉最大值和最小值之後的由小到大排序為:"

<< endl;

for(count =

1; count < n_mm -

1; count++

) cout << endl;

return

(int

)(sum /

(n_mm -2)

);}/*6.限幅平均濾波法函式體*/

/*6、限幅平均濾波法

a、方法:

相當於「限幅濾波法」+「遞推平均濾波法」

每次取樣到的新資料先進行限幅處理,

再送入 佇列進行遞推平均濾波處理

b、優點:

融合了兩種濾波法的優點

對於偶然出現的脈衝性干擾,可消除由於脈衝干擾所引起的取樣值偏差

c、缺點:

比較浪費ram

*/int

filter_limdtm()

else

for(i =

0; i < n_lddtm; i++

)return

(int

)(sum / n_lddtm);}

intget_data()

void

delay_ms

(int ms)

}

幾種常用的排序演算法

介紹 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 n log n 次比較。在最壞狀況下則需要 n 2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 n log n 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實...

幾種常用的排序演算法

介紹 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 n log n 次比較。在最壞狀況下則需要 n 2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 n log n 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實...

幾種常用的hash演算法

計算理論中,沒有hash函式的說法,只有單向函式的說法。所謂的單向函式,是乙個複雜的定義,大家可以去看計算理論或者密碼學方面的資料。用 人 類 的語言描述單向函式就是 如果某個函式在給定輸入的時候,很容易計算出其結果來 而當給定結果的時候,很難計算出輸入來,這就是單項函式。各種加密函 數都可以被認為...