電磁流量計輸入數據處理
由于外界隨機干擾的影響,系統采集到的數據有時會隨機偏離實際的流量值。為消除干擾噪聲,工程中常將一組輸入數字序列進行一定的運算后轉換成另一組輸出數字序列,這就是數字濾波。此外,由于流量傳感器的輸入輸出特性往往只在一定范圍內近似呈線性,而在某些范圍內則明顯呈非線性。而我們希望傳感器在檢測過程中靈敏度一致,最終顯示儀器顯示的測量值是均勻的,即輸出輸入呈線性關系,以便于數據的分析處理。為了消除測量信號與實際流量值間非線性誤差的影響,我們對采集到的數據實施了非線性補償。因此,需要建立非線性補償程序使數據的輸入輸出近似為線性。對于智能電磁流量計系統來說,輸入輸出曲線的斜率變化不是非常的大,因此我們采用基本的線性插值法來補償和校正以上誤差陋刪。
一、數字濾波
數字濾波實際上是一種程序濾波。它通過~定的計算程序,減少干擾在有用信號中的比重。與常規的硬件模擬濾波器相比,有以下幾個優點:
1)N為用程序濾波,無需硬件設備,且可多通道共享一個濾波器(共同調用同一個子程序);
2油于不用硬件設備,各回路問不存在阻抗匹配等問題,故可靠性高,穩定性好;
3)可以對頻率很低的信號濾波,克服了模擬信號濾波的缺陷。且可根據需要選擇不同的濾波方式,或改變濾波器的參數,方便、靈活。因此數字濾波得到了廣泛利用。
數字濾波主要有以下幾種方法:
1、流量計程序判斷濾波
當采樣信號由于隨機干擾、誤檢測或變送器不穩定引起嚴重失真時,可采用程序判斷濾波。程序判斷濾波是根據生產經驗。確定出兩次連續采樣輸入信號可能出現的偏差,若超過此偏差值,認為是虛假的干擾信號應該去掉,否則保留該采樣值。基本程序是比較判斷,其中還可分為限幅和限速兩種方法。
2、中值濾波
中值濾波是對連續采樣輸入的三個信號進行比較后取中間值。設三次采樣輸入分別為Yl、Y2、Y3,若M<y2‘y3,則取為本次采樣有效信號。中值濾波對偶然因素引起的脈沖性干擾十分有效。對緩慢變化的過程參數采用此法有良好的效果,但不宜用于快速變化的過程參數。
3、算術平均值濾波算術平均值濾波是尋找一個Y值,使該值與各采樣值間的誤差的平方和為最小,即E:耐蘭《]-nlin陟-x,2](4-1) Lk-I J LI—l J 由一元函數求極值的原理可求得y=髭卅(4-2) 式中黽為第Jj}次采樣值:為采樣次數;),為Ⅳ次采樣的算術平均值。顯然,Ⅳ越大,結果越準確,但計算時間也越長。算術平均值濾波將Ⅳ次采樣值同等對待,這就削弱了當前采樣值在程序中的比重,有時為了提高濾波效果,將各次采樣值取不同的比例系數,然后再相加, 這種方法又常被稱為加權平均濾波,其運算表達式為y=Σq一(4—3) 式中cf為比例系數,它應該滿足Σq=1,一般情況下,采樣次數越靠后,c,取的比例越大,這樣可提高新近采樣l值在平均值中的比重。
4、一階慣性濾波程序
無源濾波器RC電路是模擬量輸入通道常用的濾波方法,但對于低頻干擾卻因為RC參數難以實現,往往不能取得良好的效果。而一階慣性濾波是一種以數字形式實現低通濾波的動態濾波法。在濾波時間常數要求較大的場合,這種方法尤為實用。己知RC低通濾波器的濾波常數為GG)=yG)/zG)=l/∞s+1)(4-4) 其中,L=胄C為低通濾波器的時間常數。將上式離散后可得y女=(1一口炒I-1+6口氣(4·5) 這就是一階慣性濾波的數字表達式。n,y。分別為第七次及k一1次采樣濾波后濾波器輸出值,濾波系數口=l—e-rIT,,T為采樣周期,當r遠小于巧時,Cg=糾乃。在程序濾波時,可通過實驗選擇適當的乃值,直到被檢測的信號不產生明顯的紋波為止。然而在電磁流量計的數據采集系統中,現場干擾因素較多,不可避免地會產生尖狀脈沖干擾,這種干擾一般持續時間短,峰值大,對這樣的數據進行數字濾波處理時,僅僅采用常用的算術平均法時,盡管對脈沖干擾進行了1In的處理,但其剩余值仍然較大。這種場合策略是:將被認為是受干擾的信號數據去掉,這就是我們采用的防脈沖干擾平均值濾波法的原理。防脈沖干擾平均值濾波法的算法是:對連續的n個數據進行排序,去掉其中和最小的2個數據,將剩余數據求平均值。一般在單片機的應用中為了加快數據處理速度,n可以取值6。而對于具有較快速度的處理器,則n值可以適當取大一些。但是n=2*k+2,k為整數,因為這樣在求平均值average=SUM/(n-2)=SUM/2*k時,可以寫成average=SUM>>k,用移位的方法, 可以加快處理速度。
上述算法顯然還存在一個不足之處,就是每采集一個數據就要進行一次排序, 這樣會大量占用系統寶貴的時間。這可以通過存儲當前數據中的值和最小值來改進。具體做法是:系統中用兩個變量來存儲當前n個數據的值和最小值在這個數組中的偏移量(也就是數組下標,存儲數組下標而直接不存儲數據本身是因為:在一般的系統中,n不會超無符號短整形的表示范圍,因此用一個char形變量就可以存儲了而如果直接存儲數據本身,則許多情況下要用int形變量,甚至更長的類型)。這樣只要在當前輸入的數據將要覆蓋的數據正好是當前的值或最小值時才在下個數組中查找值或最小值,而其他情況下則只要將輸入的數據與值和最小值比較就可以修改下值和最小值了,而且不用進行數據排序。其具體c語言實現如下,程序流程圖如圖4.2所示: #define LEN 6 //移動算術平均的個數+2=SHIFT<<2+2 #define SHIFT2 //2‘SHIFT unsigned char pdata; f黟動抬鑄unsigned char pmax,pmin; //記錄數據表中值和最小值的位置, unsigned hat datas[LEN]; unsigned int szlb(unsigned hat+data) { unsigned char i; unsigned int average=O; //清零,用來計算平均值pdata=(pdata+1)%LEN; //指針下標在0到LEN.1上滑動datask'data]=*data; ,/采樣所得數據存入數據表中for(i=0;i<LEN;i++) average+=datas[i]; //求所有數據總和產¨$¨·去除被認為是脈沖的數據¨¨”/ if(4data>datas[pmax]) pmax=pdata; //得到值的指針else if(+data<datas[r'mini) pmin=pdata; //得到最小值的指針if(pdata=pmax) //如果當前輸入值將存入當前值的位置時{ //由以上方法將不可行,必須從其他位置中查找極值for(i=0;i<LEN;i++) if(datas[i]>datas[pmax]) pmax--i;圖4.2數字濾波程序流程圖else i勛data鄧in),/如果當前輸入值將存入當前最小值的位置時f ∥由以上方法將不可行,必須從其他位置中查找極值for(i=0;i<LEN;i++) if(datas[i]<datas[pmin]) pmin--i; }average=average-datas[pmax]-da_tas陌m.m】;肋我去脈沖rettu'n(average>>SHIFT); //求算術平均值}
二、非線性補償
線性插值法的算法:先用實驗法測出傳感器的輸入輸出特性曲線,假定如圖4.3所示,關系式y=f(x)是非線性的。然后把該曲線分成若干段,把相鄰兩點之間的曲線用直線近似,這樣可以利用線性方法求出輸入值x所對應的輸出值。例如,設輸入值在(一一t+,)之間.則其對應的輸出值Y可由下式求得尸y,+(x一工,)盟弄I“一^ 簡化后得產Y,+毛O一而) 式中毛——第f段直線的斜率,屯=絲盟Jj“一工f 因此,只要萬取得足夠大就可獲得良好的精度。(描) (4.7)圖4.3傳感器的輸入輸出特性非線性補償程序: unsignedintx【】={l.3 5 7,9,1l,13,15); unsigned int y[】--{1.3 5 7,9,11,13,15}; tmsigned int k【】=(1.1 1 1,1.1 1 l,; 室unsigned int xi; unsigned tat yo; ,,試驗法所測得的傳感器的輸入輸出值/,通過測量得到的輸入輸出值計算出的斜∥數據輸入刪}線性補償后的輸出unsigned int chazlli() (unsigned char巧; if(xi>x[O]lxi<x[7】) { if((x【0】<xi)&cxi<x【l】))i=O j=l; else if((x【1]硝)&(Xi<X【2】))i-1 j---2; else if((x【2】硝)&(xi<x[3】))i=2,j--3; else if((x【3]<瓤)&od<x【4】))i=3 j=4; else if((x【4】硝)&(xi<x【5】))i=4 j=5; else if((x【5】<xi)&(xi<x[6]))i=5 j=6; else if((xf61≮,【i)&od<x【7】))i=6 j=7; yo=y[jl+k[i]+(xi-xD】); } else{yo=O;) retl.1rn(yo); }
免責聲明
客服熱線: 15267989561
加盟熱線: 15267989561
媒體合作: 0571-87759945
投訴熱線: 0571-87759942
下載儀表站APP
Ybzhan手機版
Ybzhan公眾號
Ybzhan小程序