久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

如何利用單片機和C語言來設計數(shù)字濾波系統(tǒng)

 共同成長888 2020-01-15

數(shù)據(jù)采集,又稱數(shù)據(jù)獲取,,是利用一種裝置,,從系統(tǒng)外部采集數(shù)據(jù)并輸入到系統(tǒng)內(nèi)部的一個接口,。數(shù)據(jù)采集技術廣泛引用在各個領域。比如攝像頭,,麥克風,,都是數(shù)據(jù)采集工具。被采集數(shù)據(jù)是已被轉(zhuǎn)換為電訊號的各種物理量,,如溫度,、水位、風速,、壓力等,,可以是模擬量,也可以是數(shù)字量,。在互聯(lián)網(wǎng)行業(yè)快速發(fā)展的今天,,數(shù)據(jù)采集已經(jīng)被廣泛應用于互聯(lián)網(wǎng)及分布式領域,數(shù)據(jù)采集領域已經(jīng)發(fā)生了重要的變化,。

而在數(shù)據(jù)采集中存在著各種噪聲,。濾除噪聲的方法有很多種,既有數(shù)字濾波器,,也有模擬濾波器,。這里我們采用了基于單片機和C語言來設計并開發(fā)數(shù)字濾波系統(tǒng)。

我們針對于單片機數(shù)據(jù)采集系統(tǒng)中經(jīng)常出現(xiàn)的隨機干擾,,通過手動輸入來模擬數(shù)據(jù)采集過程,,驗證了幾種使用較為普遍的克服隨機干擾的單片機數(shù)字濾波算法,并給出了相應的C程序,,尤其對中位值濾波和中位值平均濾波算法程序進行了改進,。同時也對這幾種濾波算法進行了比較,并指出了每一種算法的具體適用范圍和注意事項,。另外我們使用了 proteus進行仿真驗證這幾種濾波方法,。另外我們還使用了AD和DA來采集及輸出數(shù)據(jù)。

如何利用單片機和C語言來設計數(shù)字濾波系統(tǒng)

1 數(shù)字濾波設計原理

這里有很多種數(shù)字濾波方法,,我們見選用其中幾種來進行設計,,如中值濾波、算術平均濾波,、加權平均濾波等等,。所以下面我將詳細介紹它們。

1.1 中值濾波

中位值濾波是先對某一參數(shù)連續(xù)采樣N次(一般N取奇數(shù)),,然后把N次采樣值按從小到大排列,,取中間值為本次采樣值。

該濾波方法實際上是一種排序方法,,我在此采用的是冒泡法排序,。由于在冒泡法排序中,,每出現(xiàn)一次前者數(shù)據(jù)大于后者數(shù)據(jù),就要進行二者數(shù)據(jù)的交換,。

該算法的樣例子程序如下:

1 #define N 11 //N值可根據(jù)實際情況調(diào)整

3 char filter()

5 {

7 char value_buf[];

9 char count,,i,j,,k,,temp;

11 for(count=0;count

13 {

14 value_buf[count]=get_data();

17 delay();

18 }

20 for(i=0;i

22 {

k=i;

24 for(j=i+1;j

26 if(value_buf[j]

28 temp=value_buf[k];

30 value_buf[k]=value_buf[i];

32 value_buf[i]=temp;

34 }

36 return value_buf[(N-1)/2];

37 }

位值濾波能有效地克服偶然因素引起的波動或采樣器不穩(wěn)定引起的誤碼等脈沖干擾。對溫度,、液位等緩慢變化的被測參數(shù)采用此算法能收到良好的濾波效果,,但對于流量、壓力等快速變化的數(shù)據(jù),,不宜采用中位值濾波,。

1.2 算術平均濾波

算術平均濾波法適用于對一般的具有隨機干擾的信號進行濾波。這種信號的特點是信號本身在某一數(shù)值范圍附近上下波動,,如測量流量,、液位時經(jīng)常遇到這種情況。算術平均濾波法是要按輸入的N 個采樣數(shù)據(jù),,尋找這樣一個Y,,使得Y 與各個采樣值之間的偏差的平方和最小。

具體實現(xiàn)此算法的子程序如下:

1 #define N 12

2 char filter()

5 {

7 int count;

9 int sum=0;

10 for(count=0;count

13 {

15 sum+=get_ad();

16 delay();

17 }

18 return (char)(sum/N);

19 }

算術平均濾波適用于對一般具有隨機干擾的信號進行濾波,。這種信號的特點是有一個平均值,,信號在某一數(shù)值范圍附近做上下波動,在這種情況下僅取一個采樣值做依據(jù)顯然是不準確的,。算術平均濾波對信號的平滑程序完全取決于N,,當N較大時,平滑度高,,但靈敏度低,;當N較小時,平滑度低,,但靈敏度高,應視具體情況選取N,,以便既少占用計算時間,,又達到最好的效果。

1.3 加權平均濾波

在算術平均濾波和移動平均濾波中,,N次采樣值在輸出結(jié)果中的權重是均等的,,取1/N。用這樣的濾波算法,,對于時變信號會引入滯后,,N值越大,,滯后越嚴重。為了增加新采樣數(shù)據(jù)在移動平均中的權重,,以提高系統(tǒng)對當前采樣值中所受干擾的靈敏度,,可采用加權平均濾波,它是移動平均濾波算法的改進,。

加權平均濾波是對連續(xù)N次采樣值分別乘上不同的加權系統(tǒng)之后再求累加和,,加權系統(tǒng)一般先小后大,以突出后面若干采樣的效果,,加強系統(tǒng)對參數(shù)變化趨勢的辨識,。各個加權系統(tǒng)均為小于1的小數(shù),且滿足總和等于1的約束條件,。這樣,,加權運算之后的累加和即為有效采樣值。

為方便計算,,可取各加權系數(shù)均為整數(shù),,且總和為256,加權運算后的累加和除以256,,即舍去低字節(jié)后便是有效采樣值,。具體的樣例子程序如下:

1 //code數(shù)組為加權系統(tǒng)表,存在ROM區(qū),。

2 #define N 12

3 char code jq[N]={1,,2,3,,4,,5,6,,7,,8,9,,10,,11,12};

4 char code sum_jp=1+2+3+4+5+6+7+8+9+10+11+12;

5 char filter_5()

6 {

7 char count;

8 char value_buf[N];

9 int sum=0;

10 for(count=0;count

11 {

12 value_buf[count]=get_data();

13 delay();

14 }

15 for(count=0;count

16 sum+=value_buf[count]*jq[count];

17 return (char)(sum/sum_jq);

18 }

1.4 中位值平均濾波

它相當于是“中位值濾波法”和“算術平均濾波法”的結(jié)合,。它連續(xù)采樣N個數(shù)據(jù),,然后去掉一個最大值和一個最小值,最后計算N-2個數(shù)據(jù)的算術平均值,。一般N值的選?。?-14。

具體算法程序如下:

1 #define N 12

2 char filter()

3 {

4 char count,i,,j;

5 char value_buf[N];

6 int sum=0;

7 for (count=0;count

8 {

9 value_buf[count] = get_ad();

10 delay();

11 }

12 for (j=0;j

13 {

14 for (i=0;i

15 {

16 if ( value_buf[i]》value_buf[i+1] )

17 {

18 temp = value_buf[i];

19 value_buf[i] = value_buf[i+1];

20 value_buf[i+1] = temp;

21 }

22 }

23 }

24 for(count=1;count

25 sum += value[count];

26 return (char)(sum/(N-2));

27 }

這種濾波方法兼容了移動平均濾波算法和中位值濾波算法的優(yōu)點,,所以無論對緩慢變化的信號,還是對快速變化的信號,,都能取得較好的濾波效果,。

1.5 限幅濾波

限幅濾波的基本原理是把兩次相鄰時刻(n和n-1)的采樣值Yn和Yn-1相減,求出其差值,,以絕對值表示,,然后將這個差值與兩次采樣允許的最大偏差值ΔY比較,如果兩次采樣值的差值超過了允許的最大偏差值ΔY,,則認為發(fā)生了隨機干擾,,并認為最后一次采樣值Yn非法,應予剔除,。剔除Yn后,,可用Yn-1代替Yn;若未超過允許的最大偏差值范圍,,則認為本次采樣值有效,。可用如下公式表示:

|Yn-Yn-1|≤ΔY,;則Yn有效

|Yn-Yn-1|>ΔY,;則Yn-1有效

此算法的樣例子程序如下:

此算法的樣例子程序如下:

#define A 10 //A值可根據(jù)實際情況調(diào)整

char data; //上一次的數(shù)據(jù)

char filter_1()

{

char datanew; //新數(shù)據(jù)變量

datanew=get_data(); //獲得新數(shù)據(jù)

//濾波算法

if ((datanew-data》A)||(data-datanew》A)

return data;

return datanew;

}

該算法主要用于處理變化比較緩慢的數(shù)據(jù),如溫度,、物體的位置等,。使用時關鍵在于最大偏差值的Δy的選擇,通??筛鶕?jù)經(jīng)驗獲得,,也可按照輸出參數(shù)可能的最大變化速度Vmax及采樣周期T來決定ΔY的值,即ΔY=VmaxT,。

1 #include

2 #include

3 #define uchar unsigned char

4 #define A 0.005

5 #define N 11

6 sbit con1 = P2^3;

7 sbit con2 = P2^4;

8 sbit con3 = P2^5;

9 sbit con = P2^6;

10 sbit OE = P2^0;

11 sbit START = P2^1;

12 sbit EOC = P2^2;

13 uchar a;

14 uchar buf[N] ={0};

15 void change()

16 {

17 int i;

18 for(i=0;i

19
責任編輯,;zl

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多