摘 要: 針對(duì)稱重儀表檢測(cè)電路中輸入與輸出值之間存在非線性關(guān)系的特性,在比較了幾種非線性校正方法的基礎(chǔ)上,給出了一種易于微處理器實(shí)現(xiàn)的正交多項(xiàng)式的非線性校正方法,求取稱重儀表檢測(cè)電路的非線性特征,實(shí)現(xiàn)了稱重儀表的非線性校正。同時(shí)討論了該算法的原理、校正參數(shù)的空間復(fù)雜度和算法的時(shí)間復(fù)雜度,從而論證了此算法在簡(jiǎn)單微處理器上的可用性,并以3階多項(xiàng)式為例介紹了該算法的實(shí)驗(yàn)效果。實(shí)踐表明,該算法簡(jiǎn)單實(shí)用,效果較好。
關(guān)鍵詞: 正交多項(xiàng)式;傳感器;非線性校正
稱重儀表是電子衡器的心臟部件,它融合了當(dāng)今先進(jìn)的信息技術(shù)和計(jì)算機(jī)技術(shù),在工業(yè)過程控制和貿(mào)易結(jié)算等方面得到了廣泛應(yīng)用。隨著微型計(jì)算機(jī)技術(shù)和嵌入式系統(tǒng)的迅速發(fā)展,現(xiàn)代測(cè)控系統(tǒng)對(duì)稱重儀表準(zhǔn)確度、穩(wěn)定性和工作條件等方面提出了更高的要求。然而,由于電子元器件性能參數(shù)的離散性、穩(wěn)定性和敏感性等因素的影響,使得壓力傳感器的反饋信號(hào)X和被測(cè)物體的質(zhì)量Y不是標(biāo)準(zhǔn)的線性關(guān)系。因此,需要對(duì)稱重儀表增加非線性校正環(huán)節(jié)。
非線性校正可以通過模擬電路來實(shí)現(xiàn),但是模擬電路的接入不但增大了儀表的體積和成本,而且還會(huì)帶來新的非線性因素。隨著智能化儀表的發(fā)展,軟件非線性校正方法得到了廣泛應(yīng)用。目前,非線性校正方法主要有遺傳算法[1]、神經(jīng)網(wǎng)絡(luò)法[2]、支持向量機(jī)法[3]、插值法[4]、函數(shù)擬合法等,這些方法取得了良好的校正效果,但是由于算法的復(fù)雜性對(duì)稱重儀表的處理器速度和存儲(chǔ)器容量提出更高要求,使得其中一些算法在普通的智能儀表中實(shí)現(xiàn)困難。鑒于這個(gè)原因,參考文獻(xiàn)[5]和參考文獻(xiàn)[6]分別采用了分段插值法和最小二乘法擬合曲線函數(shù)達(dá)到了較好的效果。然而分段插值法雖然算法簡(jiǎn)單,但是需要保存的浮點(diǎn)數(shù)參數(shù)隨著插值節(jié)點(diǎn)的增加而增多,對(duì)于存儲(chǔ)空間有限的稱重儀表來說浪費(fèi)了過多的資源;最小二乘法擬合曲線函數(shù)雖然算法成熟,需保存的參數(shù)也不多,但是在工程實(shí)踐中經(jīng)常會(huì)出現(xiàn)參數(shù)差異較大的病態(tài)方程,使得出的數(shù)據(jù)不可靠。本文基于正交多項(xiàng)式構(gòu)造了一個(gè)稱重儀表的非線性校正系統(tǒng),既降低了曲線擬合算法的運(yùn)算復(fù)雜度,又節(jié)省了存儲(chǔ)空間,提高了稱重儀表的可靠性和穩(wěn)定性。
1 稱重儀表的非線性校正原理
如圖1所示,稱重儀表由稱重壓力傳感器、放大電路、濾波器、采樣保持器、A/D轉(zhuǎn)換電路、微處理器及相關(guān)附屬配件組成。其中,微處理器和A/D轉(zhuǎn)換電路是稱重儀表的核心部件,負(fù)責(zé)將壓力傳感器反饋的模擬量轉(zhuǎn)換為數(shù)字量,同時(shí),依據(jù)計(jì)量算法將此數(shù)字量轉(zhuǎn)換成稱重物體的稱重值。
軟件實(shí)現(xiàn)稱重儀表的非線性校正就是在測(cè)量系統(tǒng)中為被測(cè)物重量與電信號(hào)輸出之間構(gòu)造理想的非線性函數(shù)關(guān)系。假設(shè)被測(cè)物體的質(zhì)量為m,傳感器及其采集電路的電信號(hào)輸出為v,其校正模型表示為v=g(m)。在A/D轉(zhuǎn)換之后增加一個(gè)由微處理器實(shí)現(xiàn)的非線性校正環(huán)節(jié)y=f(v),使補(bǔ)償后的輸出y與被測(cè)質(zhì)量u之間具有良好的線性特征,即:
Y=u=g-1(m)(1)
由式(1)可知,當(dāng)非線性校正環(huán)節(jié)為稱重儀表的反函數(shù)時(shí),則可實(shí)現(xiàn)稱重儀表輸出的非線性校正。由于g(m)函數(shù)具有高度的非線性,因此f(v)很難直接獲得。本文利用正交多項(xiàng)式構(gòu)造了稱重儀表的擬合函數(shù),實(shí)現(xiàn)了稱重儀表的非線性校正。
2 正交多項(xiàng)式的非線性校正原理
稱重儀表的非線性特征可以用m次多項(xiàng)式的非線性曲線來逼近,該多項(xiàng)式方程通過構(gòu)造正交多項(xiàng)式[7]來獲得。對(duì)于稱重儀表通過靜態(tài)實(shí)驗(yàn)標(biāo)定獲得的數(shù)據(jù)點(diǎn)(xi,yi)(i=1,2,…,n),此處x為稱重儀表通過A/D轉(zhuǎn)換后獲得的數(shù)字量,y為稱重值,選取一組在這些點(diǎn)上的正交的多項(xiàng)式函數(shù)系{Qi(xi),j=0,1,…,m}作為基函數(shù)組,其中Qi(xi)是j次多項(xiàng)式。擬合多項(xiàng)式記為:
式(4)中,k,j=0,1,…,m,一般m遠(yuǎn)小于n。
根據(jù)格拉姆-施密特正交化方法,構(gòu)造給定點(diǎn)上的正交多項(xiàng)式Qj(x)(j=0,1,…,m-1)的方法如下:
Q0(x)=1Q1(x)=(x-?琢0)Qj+1(x)=(x-?琢j)Qj(x)-?茁jQj-1(x)(5)
其中:
通過以上遞推公式,可以將式(2)推導(dǎo)為m次多項(xiàng)式的一般形式:
將q0Q0(x)項(xiàng)展開后累加到式(7),得:
當(dāng)j=1時(shí),令Q1(x)=t0+t1x,顯然,t0=0,t1=1。由遞推公式(3)得:
將q1Q1(x)項(xiàng)展開后累加到多項(xiàng)式(7)中,即有:
a0+q1t0?圯a0
q1t1?圯a1
對(duì)于j=2,3,…,m,逐步遞推Qj(x),根據(jù)式(5)有:
3 算法設(shè)計(jì)
3.1 校正方程參數(shù)的數(shù)據(jù)結(jié)構(gòu)和空間復(fù)雜度
由式(7)可知,m階正交多項(xiàng)式的非線性校正方程常駐內(nèi)存參數(shù)由m+1個(gè)多項(xiàng)式系數(shù)組成,即a0,a1,…,am,在算法中將這些參數(shù)定義為一個(gè)數(shù)組a[0],a[1],…,a[m]。在稱重儀表稱重過程中實(shí)時(shí)用到這些參數(shù)進(jìn)行非線性校正。如果使用3階正交多項(xiàng)式,只需要4個(gè)浮點(diǎn)數(shù),一般的微處理器完全可以支持。
由式(14)可以看到,m階多項(xiàng)式系數(shù)的計(jì)算過程中還需要3個(gè)長(zhǎng)度為m+1的數(shù)組(即公式中的s、t、b)作為臨時(shí)輔助變量,在算法中,分別定義為s[m]、t[m]、 b[m],其中m=0,1,…,m,共需3×(m+1)個(gè)浮點(diǎn)數(shù)。此外,通過算法優(yōu)化,可以將式(3)和式(6)中的3個(gè)長(zhǎng)度為m+1的參數(shù)值(即公式中的α、β、q)縮減為3個(gè)變量重復(fù)使用,在算法中定義為α、β、q三個(gè)浮點(diǎn)數(shù)。
同時(shí),由遞推公式(3)和(6),n個(gè)數(shù)據(jù)采樣點(diǎn)也要占用2n個(gè)浮點(diǎn)數(shù)分別存放采樣值x和稱重值y作為臨時(shí)變量。在算法中定義為長(zhǎng)度為n的數(shù)組x[n]、y[n]。
綜上所述,構(gòu)造n個(gè)采樣點(diǎn)的m階正交多項(xiàng)式所需臨時(shí)變量的空間復(fù)雜度為:
2n+3(m+1)+(m+1)+3
由此計(jì)算,如果構(gòu)造10個(gè)采樣點(diǎn)的3階正交多項(xiàng)式,構(gòu)造過程共需39個(gè)浮點(diǎn)數(shù),其中,臨時(shí)變量35個(gè),常駐內(nèi)存變量4個(gè)。如果微處理器的存儲(chǔ)內(nèi)存資源不能達(dá)到要求,可以用離線方式構(gòu)造正交多項(xiàng)式,只將多項(xiàng)式系數(shù)保存在稱重儀表中在線使用。
3.2 正交多項(xiàng)式校正算法流程和時(shí)間復(fù)雜度
以下給出m階正交多項(xiàng)式算法流程,其中m≥3。
算法預(yù)備:通過稱重儀表靜態(tài)標(biāo)定,獲取n個(gè)采樣點(diǎn)(xi,yi)分別存入數(shù)組x[n]、y[n],并定義其他上述相關(guān)變量。
(1)當(dāng)j=0時(shí),依據(jù)式(8)求取式(2)中的q0,并且將q0的值放入多項(xiàng)式系數(shù)a[0]中保存,依據(jù)式(9)計(jì)算α0并保存到α中,令b[0]=1。
?。?)當(dāng)j=1時(shí),t[0]=-α0,t[1]=1。依據(jù)式(10)~式(12)計(jì)算式(2)和式(5)的α1、β1、q1并分別保存到變量α、β、q中。同時(shí),更新多項(xiàng)式系數(shù)a[0]=a[0]-α×q,a[1]=q。
?。?)當(dāng)j=2,3,…,m時(shí),依據(jù)式(14)和式(15)依次進(jìn)行以下運(yùn)算和變量更新:
?、賡[j]=t[j-1];
?、趕[j-1]=-α×t[j-1]+t[j-2];
?、郛?dāng)j≥3時(shí),依次對(duì)k=j-2,j-3,…,1進(jìn)行如下運(yùn)算:
s[k]=α×t[k]+t[k-1]-β×b[k];
?、躶[0]=-α×t[0]-β×b[0];
⑤當(dāng)k=j-1,j-2,…,0時(shí),由式(3)、式(6)計(jì)算當(dāng)前的αj、βj、qj并分別保存到變量α、β、q中,在下一次循環(huán)中使用;
?、蕻?dāng)k=j-1,j-2,…,0時(shí),更新如下變量:b[k]=t[k]; t[k]=s[k];
⑦由式(15),更新多項(xiàng)式系數(shù)a[j]=q×s[j];
⑧由式(15),更新當(dāng)k=j-1,j-2,…,0時(shí)多項(xiàng)式系數(shù)a[k]=q×s[k]+a[k]。
?。?)保存正交多項(xiàng)式系數(shù)a[0],a[1],…,a[m]。
可以看出,構(gòu)造正交多項(xiàng)式的時(shí)間復(fù)雜度主要集中在步驟(3)。其中,計(jì)算①、②、③中s[j]的累計(jì)時(shí)間復(fù)雜度為(m+2)(m-1)/2,⑥、⑦、⑧的計(jì)算可放在同一循環(huán)中,其時(shí)間復(fù)雜度為(m+2)(m-1)/2。除此之外,計(jì)算⑤中αj、βj、qj還需要n(m+2)(m-1)/2次的運(yùn)算。總的時(shí)間復(fù)雜度為:
?。╪+1)(m+2)(m-1)/2
當(dāng)用10個(gè)采樣點(diǎn)構(gòu)造3階正交多項(xiàng)式時(shí),其時(shí)間復(fù)雜度為55,這個(gè)值對(duì)于一般的微處理器來說完全可以支持。
4 實(shí)驗(yàn)結(jié)果分析
4.1 實(shí)驗(yàn)方案
為了檢驗(yàn)正交多項(xiàng)式對(duì)稱重儀表輸入電壓值u和重量值x的實(shí)際逼近效果,實(shí)驗(yàn)分兩步進(jìn)行:
?。?)選取0~380 kg作為稱重儀表的量程,每隔40 kg測(cè)量一次,一共獲得10個(gè)數(shù)據(jù)作為數(shù)據(jù)標(biāo)定點(diǎn)(xi,ui),結(jié)果如表1所示。用這10個(gè)采樣點(diǎn)構(gòu)造3階正交多項(xiàng)式,獲得多項(xiàng)式系數(shù)。
?。?)以20 kg為間隔,在0~380 kg之間測(cè)量電壓值作為測(cè)試點(diǎn),共獲得20個(gè)測(cè)試點(diǎn)并代入正交多項(xiàng)式進(jìn)行檢驗(yàn)(結(jié)果如表2所示)。
最后計(jì)算所有測(cè)試點(diǎn)的相對(duì)誤差,分析實(shí)驗(yàn)結(jié)果。
4.2 實(shí)驗(yàn)結(jié)果
由表1所列的數(shù)據(jù)標(biāo)定點(diǎn),按照正交多項(xiàng)式構(gòu)建方法求得正交多項(xiàng)式系數(shù)為:a0=12.8278,a1=1.2659,a2= -4.3691×10-5,a3=-2.8491×10-8,從而求得此稱重儀表非線性校正環(huán)節(jié)的表達(dá)式為:
w(u)=-12.8278+1.2659u-4.3691×10-5u2-2.8491×10-8u3(16)
將表2中的20個(gè)測(cè)試值ui代入式(16),求得實(shí)際測(cè)量值wi,從表2可以看出,最大誤差為0.283,最小誤差為-0.005,誤差的算術(shù)平均值為0.003。
圖2是根據(jù)相對(duì)誤差計(jì)算公式式(17)繪制的各稱重測(cè)試點(diǎn)相對(duì)誤差直方圖。從圖中可以看出,所有試驗(yàn)點(diǎn)的相對(duì)誤差均未超過1%,19個(gè)相對(duì)誤差測(cè)試點(diǎn)中,相對(duì)誤差最大的是稱重載荷最小的點(diǎn),其相對(duì)誤差是 0.9%,其次是第二個(gè)測(cè)試點(diǎn),相對(duì)誤差是0.3%,其他測(cè)試點(diǎn)的相對(duì)誤差逐漸減小,最大不超過0.2%,平均相對(duì)誤差0.03%,當(dāng)稱重載荷大于300 kg時(shí)相對(duì)誤差小于 0.01%,其精度完全符合測(cè)試要求。從相對(duì)誤差的變化趨勢(shì)上看,當(dāng)稱重載荷質(zhì)量較小時(shí),相對(duì)誤差較大;稱重載荷越大,相對(duì)誤差呈鋸齒狀減小。這說明正交多項(xiàng)式與稱重儀表的實(shí)際值很接近,誤差值很平均,稱重越重,相對(duì)誤差就越小。因此,在精度要求較高時(shí),正交多項(xiàng)式校正算法更適用于接近滿量程的應(yīng)用。
δ=?駐k/xi×100%(17)
本文針對(duì)稱重儀表采集信號(hào)輸入和稱重值輸出呈非線性特征,在稱重系統(tǒng)中加入了由軟件方法實(shí)現(xiàn)的非線性校正環(huán)節(jié),利用正交多項(xiàng)式擬合法進(jìn)行了非線性補(bǔ)償。實(shí)驗(yàn)結(jié)果表明,稱重儀表通過非線性校正之后最大相對(duì)誤差小于1%,稱重越大,相對(duì)誤差越小,其校正效果能達(dá)到實(shí)際需要。
實(shí)際應(yīng)用中也表明,正交多項(xiàng)式非線性校正技術(shù)算法簡(jiǎn)單可靠、運(yùn)算過程中所需存儲(chǔ)器容量較小,易于在只配備簡(jiǎn)單微處理器的稱重儀表中實(shí)現(xiàn)。在實(shí)際應(yīng)用中提高了稱重計(jì)量準(zhǔn)確性和靈敏度,降低了誤差,具有廣泛的應(yīng)用價(jià)值。
參考文獻(xiàn)
[1] 范鎧.傳感器軟件非線性校正方法綜述[J].上海計(jì)量測(cè)試,2004,31(2):8-12.
[2] 陳俊杰,蘆俊,黃惟一.基于遺傳神經(jīng)網(wǎng)絡(luò)的傳感器系統(tǒng)的非線性校正[J].儀器儀表學(xué)報(bào),2003,24(2):201-204.
[3] 劉濤,王華.傳感器非線性校正的遺傳支持向量機(jī)方法[J].電子測(cè)量與儀器學(xué)報(bào),2011,25(1):56-60.
[4] 劉少?gòu)?qiáng),黃惟一.基于插值計(jì)算與優(yōu)化的鉑電阻非線性校正方法[J].儀器儀表學(xué)報(bào),2003,24(2):215-217.
[5] 文其知,戴永.智能儀表非線性自動(dòng)校正方法研究[J].自動(dòng)化儀表,2009,30(6):75-78.
[6] 魏國(guó),王昕,雷苗,等.基于B樣條遞推最小二乘的溫度傳感器非線性校正[J].傳感器與微系統(tǒng),2008,27(12):54-56.
[7] 徐士良.計(jì)算方法[M].北京:人民郵電出版社,2009.