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