唐偉 鐘偉 段國(guó)艷
(四川工程職業(yè)技術(shù)學(xué)院電氣信息工程系 四川省德陽市 618000)
在測(cè)量數(shù)據(jù)中,無論是用儀器自動(dòng)測(cè)量還是手動(dòng)測(cè)量,總會(huì)包含誤差,如粗大誤差、系統(tǒng)誤差、隨機(jī)誤差,在這些誤差中粗大誤差對(duì)測(cè)量數(shù)據(jù)的準(zhǔn)確性危害最大,所以在測(cè)量結(jié)果中找出粗大誤差并剔除尤為重要。然而關(guān)于誤差的算法計(jì)算量巨大且復(fù)雜,因此,通過軟件程序?qū)崿F(xiàn)粗大誤差分析與處理將有效提高誤差處理的速度和準(zhǔn)確性;因?yàn)闇y(cè)量誤差跟測(cè)量條件和測(cè)量次數(shù)等有密切關(guān)系,不同的粗大誤差判據(jù)有不同的優(yōu)勢(shì),所以研究根據(jù)等精度有限次的測(cè)量次數(shù)選擇不同的粗大誤差處理算法,對(duì)數(shù)據(jù)的處理有著重要的意義。
誤差是測(cè)得值與被測(cè)量的真值之間的差[1],其數(shù)學(xué)表達(dá)式為△x=x-x0,其中△x 為誤差,x 為測(cè)量值,x0為真值。在測(cè)量中,真值本質(zhì)上是不存在的,實(shí)際上常用滿足規(guī)定精度的量值來代替真值使用。根據(jù)誤差的產(chǎn)生的原因,通常將誤差分為系統(tǒng)誤差、隨機(jī)誤差、粗大誤差。
粗大誤差是對(duì)測(cè)量結(jié)果的明顯歪曲。產(chǎn)生粗大誤差的原因主要是因?yàn)闇y(cè)量人員的疏忽造成讀值或記錄的錯(cuò)誤,也可能因?yàn)橥饨绲脑蛟斐桑缯駝?dòng)、熱沖擊等引起測(cè)量?jī)x器的示值改變。一旦發(fā)現(xiàn)粗大誤差就應(yīng)該被剔除[1]。判別粗大誤差的方法有多種,同時(shí)各具優(yōu)缺點(diǎn)。
圖1:主程序框圖
圖2:3σ 判據(jù)子程序框圖
粗大誤差是明顯超統(tǒng)計(jì)規(guī)律預(yù)期值的誤差,如果測(cè)量值xi遵循公式(3)的計(jì)算結(jié)果,則說明引起該誤差的測(cè)量值xi為粗大誤差[2]。
λ 實(shí)際上是正態(tài)分布置信系數(shù),可以通過查肖維納準(zhǔn)則表得到,也可以通過查正態(tài)分布積分表獲得。
判別的依據(jù)是:先假設(shè)測(cè)量列中某個(gè)測(cè)得值xj為粗大誤差,去掉xj后再計(jì)算測(cè)量列的算術(shù)平均值若式(4)成立則說明xj含有粗大誤差;否則,認(rèn)為xj不含有粗大誤差。
圖3:對(duì)101 個(gè)測(cè)量值中的包含粗大誤差的數(shù)據(jù)剔除仿真結(jié)果
將測(cè)量值xi,按測(cè)得值大小順序排成順序統(tǒng)計(jì)量x(i),即規(guī)定選取為判別粗大誤差的臨界值,其中n 為測(cè)量次數(shù), 為顯著度。若則說明x(i)包含粗大誤差。否則,x(i)則不含粗大誤差??梢酝ㄟ^程序自動(dòng)查詢格羅布斯準(zhǔn)則表得到。在計(jì)算出x(i)為粗大誤差后,應(yīng)該剔除x(i)并重新計(jì)算測(cè)得值的個(gè)數(shù)n。對(duì)測(cè)得值個(gè)數(shù)要求不多,判斷的可靠性要求較高的場(chǎng)合比較適用。
根據(jù)不同的測(cè)量次數(shù)和要求,可選擇不同的判斷依據(jù)[3],最終做出粗大誤差的優(yōu)化處理選擇。主流程框圖如圖1 所示。主程序根據(jù)測(cè)量列的數(shù)據(jù)多少和具體要求選擇相應(yīng)的粗大誤差處理子程序,每個(gè)子程序負(fù)責(zé)將含有粗大誤差的測(cè)得值挑選出來并返回給主程序,主程序剔除含有粗大誤差的數(shù)據(jù)后對(duì)測(cè)量數(shù)據(jù)列重新排列,然后計(jì)算出
子程序流程樣例如圖2 所示,本文以萊以特準(zhǔn)則判據(jù)為例,其余判據(jù)子程序處理流程類似圖2。在每個(gè)子程序中含有計(jì)算及vi和殘余誤差,目的是使主程序簡(jiǎn)單。為了保證計(jì)算結(jié)果的正確性,在程序中引入了算術(shù)平均值校核算法。每個(gè)子程序結(jié)構(gòu)基本上相同,保證了子程序的簡(jiǎn)潔性。子程序基本上分為4 個(gè)模塊及查表模塊,計(jì)算及校核模塊,判據(jù)比較和數(shù)據(jù)剔除與重排模塊。在數(shù)據(jù)剔除與重排時(shí)先將要剔除的數(shù)據(jù)暫存,再將數(shù)組從剔除點(diǎn)順序搬移,從而構(gòu)成一個(gè)新的數(shù)據(jù)列,然后將被剔除的數(shù)據(jù)放于數(shù)組的最后,待下次計(jì)算時(shí)程序不將被剔除的數(shù)據(jù)包含進(jìn)去,這樣用最簡(jiǎn)單的算法實(shí)現(xiàn)了數(shù)據(jù)的剔除與重排。
根據(jù)圖1 和圖2 流程圖,采用C 語言實(shí)現(xiàn)主程序和3σ 粗大誤差判別算法,以給定的101 個(gè)測(cè)量值為例,完成包含粗大誤差數(shù)據(jù)的剔除。
主程序主要對(duì)粗大誤差處理的子函數(shù)調(diào)用和處理后數(shù)據(jù)列的顯示,根據(jù)測(cè)量列數(shù)據(jù)的規(guī)模,主程序自動(dòng)調(diào)用3σ 粗大誤差判斷算法程序,在子程序中實(shí)現(xiàn)了對(duì)包含粗大誤差的測(cè)量值的剔除和數(shù)據(jù)列的重新排列,最后將壞值個(gè)數(shù)返回給主程序,并整理出來不包含粗大誤差的測(cè)量值。在Win-Turbo C 環(huán)境下仿真運(yùn)行,可以準(zhǔn)確的對(duì)測(cè)量數(shù)據(jù)列進(jìn)行粗大誤差的處理。仿真結(jié)果如圖3 所示。
在運(yùn)行結(jié)果中,xp 是平均值,dx 是標(biāo)準(zhǔn)差,j 是當(dāng)前需要處理的數(shù)據(jù)個(gè)數(shù),每剔除一個(gè)包含粗大誤差的測(cè)量值,j 就會(huì)自減1,a是子程序處理過程中定義的數(shù)組名,org 代表原測(cè)量列數(shù)組。因?yàn)槠蓿@里只給出了程序運(yùn)行的后期結(jié)果。從程序運(yùn)行的結(jié)果可知,j=92 時(shí)表示當(dāng)前還剩92 個(gè)測(cè)量數(shù)據(jù),已經(jīng)判斷出9 個(gè)測(cè)量值包含粗大誤差而被剔除,程序繼續(xù)對(duì)剩下的92 個(gè)數(shù)據(jù)進(jìn)行計(jì)算并判斷,最后又剔除一個(gè),剩下91 個(gè)測(cè)量數(shù)據(jù)不包含粗大誤差。
本文針對(duì)誤差處理計(jì)算量大的問題,用軟件算法實(shí)現(xiàn)了對(duì)測(cè)量數(shù)據(jù)列中包含有粗大誤差的數(shù)據(jù)剔除,并完成對(duì)原始測(cè)量數(shù)據(jù)的重新排列;同時(shí)為提高誤差處理的準(zhǔn)確性,根據(jù)等精度測(cè)量的次數(shù),采用不同的軟件算法對(duì)測(cè)量數(shù)據(jù)處理,實(shí)現(xiàn)了對(duì)粗大誤差精確的剔除。根據(jù)文中提出的軟件算法,通過程序仿真驗(yàn)證,軟件程序計(jì)算的快速性和運(yùn)行結(jié)果的準(zhǔn)確性達(dá)到了工程使用要求。同時(shí)該軟件算法程序也可以作為一個(gè)獨(dú)立的粗大誤差處理工具應(yīng)用于科研和工程測(cè)量中。