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