文志勇
在多節(jié)點(diǎn)無(wú)線(xiàn)數(shù)據(jù)采集系統(tǒng)的時(shí)間同步技術(shù)當(dāng)中,有多種時(shí)間同步模型[1],如參考廣播同步(RBS)、傳感器網(wǎng)絡(luò)時(shí)間同步(TPSN)和洪泛時(shí)鐘同步(FTSP)等[2],這些時(shí)間同步模型是根據(jù)實(shí)際情況設(shè)計(jì)無(wú)線(xiàn)傳感器時(shí)間同步方法的基礎(chǔ)。多節(jié)點(diǎn)無(wú)線(xiàn)數(shù)據(jù)采集系統(tǒng)在實(shí)際使用當(dāng)中,需要較低的功耗、能夠快速連接網(wǎng)絡(luò)、且時(shí)間同步精確度高,所以時(shí)間同步機(jī)制直接影響著多節(jié)點(diǎn)無(wú)線(xiàn)數(shù)據(jù)采集系統(tǒng)的整體性能。系統(tǒng)在工作過(guò)程中,每個(gè)數(shù)據(jù)采集節(jié)點(diǎn)的時(shí)間基準(zhǔn)都使用本地晶體振蕩器提供,相互之間完全不存在同步關(guān)系。由于晶體振蕩器之間不可避免地存在細(xì)微的頻率偏差和時(shí)鐘漂移,即使進(jìn)行了初始同步,在經(jīng)過(guò)一定時(shí)間的運(yùn)行后也將出現(xiàn)明顯的時(shí)間偏差,從而影響數(shù)據(jù)同步采集的精度。這就需要基于上位機(jī)和下位機(jī)之間的通訊研究多節(jié)點(diǎn)無(wú)線(xiàn)傳感器的時(shí)間同步算法,利用多線(xiàn)程的無(wú)線(xiàn)通訊對(duì)各個(gè)節(jié)點(diǎn)的時(shí)鐘進(jìn)行周期性的校正,可以保證所有數(shù)據(jù)采集節(jié)點(diǎn)的時(shí)間不斷對(duì)齊,最終實(shí)現(xiàn)系統(tǒng)的時(shí)間同步。
目前市面上有多種多通道無(wú)線(xiàn)傳感器同步采集設(shè)備,同步誤差基本都在1 ms 以下[3]。本文的工作是探討影響無(wú)線(xiàn)時(shí)間同步性能的因素,并利用這些因素來(lái)分析現(xiàn)有的時(shí)間同步協(xié)議方法,討論它們?cè)赪LAN 中的優(yōu)勢(shì)和不足,最終以802.11 通訊協(xié)議為基礎(chǔ)為多節(jié)點(diǎn)無(wú)線(xiàn)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)精確的時(shí)間同步方法。
對(duì)多節(jié)點(diǎn)無(wú)線(xiàn)數(shù)據(jù)采集系統(tǒng)進(jìn)行時(shí)間同步的工作分為兩個(gè)步驟,第一個(gè)步驟是通過(guò)上位機(jī)與下位機(jī)的指令交換控制所有節(jié)點(diǎn)同步啟動(dòng)采集,第二個(gè)步驟是在所有節(jié)點(diǎn)穩(wěn)定運(yùn)行之后對(duì)它們進(jìn)行時(shí)間同步修正,這一章分析的無(wú)線(xiàn)傳感網(wǎng)絡(luò)時(shí)間同步技術(shù)主要是分析設(shè)計(jì)同步方法時(shí)需要解決的需求。
基本時(shí)間同步模型主要可分為兩類(lèi):一類(lèi)基于發(fā)送者-接收者(Sender-Receiver,SR)機(jī)制,另一類(lèi)基于接收者-接收者(Receiver-Receiver,RR)機(jī)制。基于SR 機(jī)制的模型以洪泛時(shí)鐘同步協(xié)議(Flooding Time Synchronization Protocol,F(xiàn)TSP)為代表,在該模型中,發(fā)送者會(huì)定期廣播包含自身時(shí)間戳的同步消息,而接收者會(huì)記錄同步消息中的時(shí)間戳以及接收到消息時(shí)自身的時(shí)間戳,并計(jì)算二者的偏差,與此同時(shí),接收者還需根據(jù)偏移位數(shù)與接收速率計(jì)算得到位偏移,根據(jù)和即可計(jì)算出接收者相對(duì)于發(fā)送者的時(shí)間偏移,從而完成同步[4]。該模型采用了線(xiàn)性回歸分析方法,對(duì)節(jié)點(diǎn)的時(shí)鐘漂移進(jìn)行了補(bǔ)償。而基于RR 機(jī)制的模型以參考廣播同步協(xié)議(Reference Broadcast Synchronization,RBS)為代表,該模型的使用一個(gè)參考節(jié)點(diǎn)周期性地向接收者廣播同步信息,這個(gè)同步報(bào)文中不包含參考節(jié)點(diǎn)的時(shí)間信息,節(jié)點(diǎn)接收到此同步信息后,分別記錄并交換接收到信息時(shí)的時(shí)間戳,從而可以通過(guò)各節(jié)點(diǎn)之間接收到信息的時(shí)間差值調(diào)整節(jié)點(diǎn)的時(shí)鐘以實(shí)現(xiàn)同步[5]。
根據(jù)上述介紹,RR 機(jī)制與SR 機(jī)制的核心區(qū)別在于發(fā)送者發(fā)送給接收者的消息中是否包含發(fā)送者的時(shí)間信息。其中,接收者-接收者機(jī)制適用于只需要節(jié)點(diǎn)間進(jìn)行時(shí)間同步的情況,算法開(kāi)銷(xiāo)較小,運(yùn)行速度較快。因此本文設(shè)計(jì)的同步方法的基礎(chǔ)是接收者接收者機(jī)制。另外,在系統(tǒng)長(zhǎng)時(shí)間運(yùn)行的時(shí)間同步方案中,結(jié)合了FTSP 模型中的線(xiàn)性回歸的思想,對(duì)系統(tǒng)硬件時(shí)鐘漂移進(jìn)行修正。
不同節(jié)點(diǎn)之間的時(shí)間同步,需要依靠無(wú)線(xiàn)傳輸同步消息,因此時(shí)間同步的精度與消息傳輸?shù)臅r(shí)延有關(guān),這些時(shí)延具有不確定性,因此是影響時(shí)間同步精度的重要因素。無(wú)線(xiàn)消息傳輸時(shí)間延遲被分為6 個(gè)部分[6],具體結(jié)構(gòu)見(jiàn)圖1。
圖1 無(wú)線(xiàn)傳輸消息時(shí)延結(jié)構(gòu)
其中,發(fā)送、訪(fǎng)問(wèn)、傳輸時(shí)延為消息在發(fā)送者中產(chǎn)生直至完全發(fā)送所消耗的時(shí)間;傳播時(shí)延僅與無(wú)線(xiàn)傳輸介質(zhì)有關(guān);接收、處理時(shí)延為接收者接收到消息并完成相應(yīng)動(dòng)作所消耗的時(shí)間。接下來(lái)將具體介紹基于接收者-接收者機(jī)制的時(shí)間同步方法以及同步效果。
系統(tǒng)中多節(jié)點(diǎn)的啟動(dòng)均通過(guò)上位機(jī)發(fā)送啟動(dòng)命令控制,而節(jié)點(diǎn)從接受命令到初始化再到啟動(dòng)采集這一系列過(guò)程中消耗的時(shí)間不一致,這就導(dǎo)致各節(jié)點(diǎn)的初始時(shí)間會(huì)存在差異,影響同步性能,另外,節(jié)點(diǎn)穩(wěn)定運(yùn)行后,外部晶振作為時(shí)間來(lái)源,會(huì)存在微小的抖動(dòng)漂移,長(zhǎng)時(shí)間運(yùn)行后可能會(huì)積累出較大的誤差。綜上,在時(shí)間同步方法的設(shè)計(jì)中,主要包括兩個(gè)部分,一是實(shí)現(xiàn)兩個(gè)平臺(tái)的同步采集,二是在采集過(guò)程中對(duì)微小的時(shí)鐘漂移進(jìn)行修正。
圖2 同步啟動(dòng)采集流程
在系統(tǒng)初始啟動(dòng)的過(guò)程中,上位機(jī)的子線(xiàn)程通過(guò)指定IP地址和端口的單播方式向兩個(gè)數(shù)據(jù)采集平臺(tái)發(fā)送啟動(dòng)命令,從該命令發(fā)出到各平臺(tái)發(fā)送出第一個(gè)數(shù)據(jù)包的過(guò)程中,會(huì)存在傳播、接收以及處理時(shí)延,其中傳播時(shí)延可以忽略不計(jì),從而必須實(shí)現(xiàn)同步啟動(dòng)采集以消除接收時(shí)延和處理時(shí)延。上位機(jī)通過(guò)兩個(gè)子線(xiàn)程單播指令控制兩個(gè)數(shù)據(jù)采集平臺(tái)完成同步啟動(dòng)采集的具體實(shí)現(xiàn)流程如圖2 所示,流程解釋如下。
(1)首先,上位機(jī)向各節(jié)點(diǎn)發(fā)送初始化命令,節(jié)點(diǎn)接收到命令后開(kāi)始初始化需要用到的外設(shè),之后節(jié)點(diǎn)如果完成初始化會(huì)返回初始化成功的狀態(tài)標(biāo)志,如果上位機(jī)收到初始化錯(cuò)誤的狀態(tài)標(biāo)志則會(huì)停止工作,并需要根據(jù)錯(cuò)誤信息檢查設(shè)備,如果在5 s 內(nèi)有未收到的狀態(tài)標(biāo)志,則需要向未返回狀態(tài)標(biāo)志的平臺(tái)重新發(fā)送初始化命令,直至各節(jié)點(diǎn)均完成初始化。這一過(guò)程是為了確保各節(jié)點(diǎn)的外設(shè)正常工作且消除初始化工作帶來(lái)的部分處理時(shí)延。
(2)然后,上位機(jī)向各節(jié)點(diǎn)發(fā)送采集測(cè)試命令,節(jié)點(diǎn)接收到命令后采集一次相應(yīng)數(shù)據(jù)并打上時(shí)間戳,打包成數(shù)據(jù)包后發(fā)送至上位機(jī),若上位機(jī)接收到的數(shù)據(jù)包中有空包,則向返回空包的節(jié)點(diǎn)重新發(fā)送采集測(cè)試命令,若發(fā)送三次后仍返回空包,則需要檢查節(jié)點(diǎn)的數(shù)據(jù)采集功能。這一過(guò)程是為了確保采集功能正常工作。
(3)最后,上位機(jī)控制各節(jié)點(diǎn)啟動(dòng)采集,每個(gè)數(shù)據(jù)包均打上時(shí)間戳,此時(shí)依然會(huì)有各節(jié)點(diǎn)發(fā)送第一個(gè)數(shù)據(jù)包的時(shí)間不一致的情況,因此,上位機(jī)先接收到數(shù)據(jù)的子線(xiàn)程暫時(shí)不做記錄,并將該線(xiàn)程標(biāo)記為正在接收,等到其他線(xiàn)程也標(biāo)記為正在接收后,主線(xiàn)程得到子線(xiàn)程接收到第一個(gè)數(shù)據(jù)包的時(shí)間差序列,并用該時(shí)間差調(diào)整先發(fā)送數(shù)據(jù)節(jié)點(diǎn)的初始時(shí)間戳,使其與后發(fā)送數(shù)據(jù)節(jié)點(diǎn)的初始時(shí)間戳一致。這一過(guò)程能夠消除節(jié)點(diǎn)接收啟動(dòng)命令產(chǎn)生的接收時(shí)延以及啟動(dòng)采集帶來(lái)的部分處理時(shí)延。
在實(shí)踐中,使用上述實(shí)現(xiàn)同步啟動(dòng)采集的方法,可以將各節(jié)點(diǎn)初始時(shí)間戳的誤差控制在1 ms(即毫秒級(jí)最小級(jí)采樣周期)以?xún)?nèi),因此,該方法通過(guò)上位機(jī)與節(jié)點(diǎn)之間指令和狀態(tài)信息的多次互換,實(shí)現(xiàn)了各節(jié)點(diǎn)數(shù)據(jù)采集的同步啟動(dòng)。
系統(tǒng)中各節(jié)點(diǎn)的晶振在持續(xù)運(yùn)行的過(guò)程當(dāng)中,會(huì)產(chǎn)生微小的抖動(dòng)或漂移,這樣的抖動(dòng)或偏移在長(zhǎng)時(shí)間運(yùn)行的場(chǎng)景中,節(jié)點(diǎn)之間的時(shí)間誤差會(huì)持續(xù)累積,從而造成時(shí)間上的不同步,因此要對(duì)時(shí)鐘漂移帶來(lái)的時(shí)間誤差進(jìn)行修正。
一元線(xiàn)性回歸模型是一種常用的統(tǒng)計(jì)模型,用以描述一個(gè)變量跟隨另一個(gè)變量的變化情況,本文將上位機(jī)系統(tǒng)時(shí)間作為參考時(shí)間,設(shè)為自變量x,下位機(jī)時(shí)間戳設(shè)為因變量t,則二者的一元線(xiàn)性樣本回歸模型表示如式1 所示。
該模型中,ei表示隨機(jī)誤差,通常假ei定的均值為0,xi和ti為上位機(jī)系統(tǒng)時(shí)間和時(shí)間戳的樣本觀(guān)測(cè)值,假設(shè)有n 組,表示時(shí)鐘偏移,β0表示時(shí)鐘頻率,β1均為未知參數(shù)。本文采用普通最小二 乘法(OLS)對(duì)未知參數(shù)進(jìn)行估計(jì),該方法只關(guān)注因變量方向上的誤差,且算法復(fù)雜度適中,適用于本系統(tǒng)的情況。設(shè)時(shí)間戳估計(jì)值為,則因變量的平方損失函數(shù)表示如式2 所示。
平方損失函數(shù)取得最小值的點(diǎn),即為使得偏導(dǎo)數(shù)方程為0的點(diǎn),令上述方程組等于0,解得式4。
因此,在獲得上位機(jī)系統(tǒng)時(shí)間和時(shí)間戳的觀(guān)測(cè)值和之后,可以將某一時(shí)間段內(nèi)各平臺(tái)的時(shí)鐘偏移和時(shí)鐘頻率計(jì)算出來(lái),從而得到唯一的擬合直線(xiàn)。
利用一元線(xiàn)性最小二乘回歸模型對(duì)各節(jié)點(diǎn)進(jìn)行時(shí)間同步的具體流程如圖3 所示。
(1)同步啟動(dòng)的方法在3.1 小節(jié)中進(jìn)行了具體的介紹,該步驟同步啟動(dòng)了兩個(gè)平臺(tái)的計(jì)時(shí),目的是消除時(shí)間同步過(guò)程中存在的接收時(shí)延以及處理時(shí)延,提升時(shí)間同步的精度。
(2)在下位機(jī)向上位機(jī)發(fā)送數(shù)據(jù)的過(guò)程當(dāng)中,丟包是不可避免的現(xiàn)象,由于節(jié)點(diǎn)的采樣頻率可能為毫秒級(jí),數(shù)據(jù)量較大,在網(wǎng)絡(luò)狀況較好的情況下,丟包對(duì)數(shù)據(jù)的影響可以忽略不計(jì),但時(shí)間戳的丟失會(huì)影響時(shí)間同步的精度,因此需要對(duì)丟失數(shù)據(jù)包的時(shí)間戳進(jìn)行補(bǔ)償。上位機(jī)使用多個(gè)子線(xiàn)程接收各節(jié)點(diǎn)的數(shù)據(jù),每接收到一個(gè)數(shù)據(jù)包會(huì)記錄上位機(jī)系統(tǒng)時(shí)間,通過(guò)對(duì)相鄰系統(tǒng)時(shí)間做差比較,若時(shí)間差值大于相應(yīng)平臺(tái)的采樣周期,則說(shuō)明有數(shù)據(jù)包丟失,上位機(jī)會(huì)根據(jù)差值情況補(bǔ)齊丟失的時(shí)間戳。
(3)在對(duì)下位機(jī)時(shí)鐘漂移實(shí)際測(cè)試的過(guò)程中,發(fā)現(xiàn)最快在一分鐘左右兩個(gè)平臺(tái)的時(shí)間戳偏差會(huì)累積到1 ms,為了保證時(shí)間同步誤差小于1 ms,需要在一分鐘內(nèi)完成一次線(xiàn)性回歸的參數(shù)計(jì)算,每次線(xiàn)性回歸之間的時(shí)間差即為時(shí)間同步周期??紤]到數(shù)據(jù)量和計(jì)算量,本文將同步精度測(cè)試時(shí)的時(shí)間同步周期定為10 s(該周期可根據(jù)具體需求改變),上位機(jī)每10 s 對(duì)下位機(jī)時(shí)間戳分別進(jìn)行線(xiàn)性回歸計(jì)算,算出各自的f 和offset 之后對(duì)相應(yīng)的下位機(jī)進(jìn)行時(shí)間戳補(bǔ)償,依此循環(huán),保證在長(zhǎng)時(shí)間運(yùn)行的情況下各節(jié)點(diǎn)的數(shù)據(jù)一直保持時(shí)間同步。
本文的同步控制方案采用的是中心對(duì)各節(jié)點(diǎn)(Centerpoint-point,CPP)的方式,該方法需要一個(gè)主節(jié)點(diǎn)作為AP,其他子節(jié)點(diǎn)都通過(guò)該AP 來(lái)進(jìn)行通訊。本文使用兩個(gè)獨(dú)立的無(wú)線(xiàn)采集平臺(tái)對(duì)時(shí)間同步方法的同步效果進(jìn)行驗(yàn)證,兩個(gè)平臺(tái)的采樣頻率分別為1ms 和10ms,因此,無(wú)線(xiàn)傳感器時(shí)間同步網(wǎng)絡(luò)由上位機(jī)、路由器以及兩個(gè)無(wú)線(xiàn)數(shù)據(jù)采集平臺(tái)組成。上位機(jī)算出各平臺(tái)的時(shí)鐘頻率f 和時(shí)鐘偏移offset 之后再對(duì)硬件時(shí)間戳進(jìn)行補(bǔ)償。
為驗(yàn)證時(shí)間同步方法的有效性,本文進(jìn)行了持續(xù)500s 的數(shù)據(jù)采集實(shí)驗(yàn),在數(shù)據(jù)采集的過(guò)程當(dāng)中,上位機(jī)每10s 對(duì)各平臺(tái)數(shù)據(jù)包中的時(shí)間戳進(jìn)行時(shí)間同步計(jì)算,并調(diào)整各平臺(tái)的時(shí)間戳,采集到的數(shù)據(jù)和時(shí)間戳均保存成txt 文件。
對(duì)兩個(gè)平臺(tái)同步后的時(shí)間戳進(jìn)行同步誤差分析,以確定時(shí)間同步的效果,兩個(gè)平臺(tái)同步后的時(shí)間戳與上位機(jī)參考時(shí)間之間的差值如圖5 所示,橫坐標(biāo)均表示上位機(jī)參考時(shí)間,縱坐標(biāo)均表示對(duì)應(yīng)信號(hào)采集平臺(tái)同步后的時(shí)間戳與參考時(shí)間之間的差值。從圖4 中可以看出,經(jīng)過(guò)時(shí)間同步后,兩個(gè)平臺(tái)的時(shí)間戳與參考時(shí)間之間的誤差均在0.2 ms 以?xún)?nèi),小于1 ms。
測(cè)試的最終目標(biāo)是完成兩個(gè)平臺(tái)之間的時(shí)間同步,因此重點(diǎn)關(guān)注的是時(shí)間同步后兩個(gè)平臺(tái)間的時(shí)間誤差,對(duì)兩個(gè)平臺(tái)進(jìn)行時(shí)間同步后,平臺(tái)硬件時(shí)間戳之間的差值在-0.04 ms~0.06 ms之間,為微秒級(jí)的誤差,由于表面肌電信號(hào)采集平臺(tái)的采樣周期為1 ms,要實(shí)現(xiàn)兩個(gè)平臺(tái)之間的時(shí)間同步,需要時(shí)間誤差在1 ms 以下,因此,本文的時(shí)間同步方法精度較高,且很好地滿(mǎn)足了時(shí)間同步的需求。
圖4 數(shù)據(jù)采集平臺(tái)時(shí)間同步后相對(duì)參考時(shí)間的誤差
圖5 同步后兩個(gè)平臺(tái)間時(shí)間偏差示意
本文詳細(xì)介紹了用于多節(jié)點(diǎn)無(wú)線(xiàn)傳感系統(tǒng)基于接收者-接收者機(jī)制的時(shí)間同步方法,該方法主要分為兩個(gè)部分,一是實(shí)現(xiàn)多節(jié)點(diǎn)的同步啟動(dòng),該部分的工作通過(guò)上位機(jī)的各子線(xiàn)程在局域網(wǎng)上建立端口,再與各節(jié)點(diǎn)之間進(jìn)行指令和狀態(tài)信息的多次互換來(lái)完成,可以將各節(jié)點(diǎn)初始時(shí)間戳的誤差控制在1ms以?xún)?nèi);二是對(duì)運(yùn)行過(guò)程中的時(shí)鐘偏移進(jìn)行補(bǔ)償,該部分工作采用了線(xiàn)性最小二乘回歸模型,將上位機(jī)的系統(tǒng)參考時(shí)間作為自變量,在同步周期內(nèi)進(jìn)行同步計(jì)算,分別對(duì)多節(jié)點(diǎn)的時(shí)間戳進(jìn)行補(bǔ)償,從而完成時(shí)間同步。最后對(duì)本文設(shè)計(jì)的時(shí)間同步方法進(jìn)行了實(shí)驗(yàn)效果驗(yàn)證,結(jié)果表明,使用本文設(shè)計(jì)的方法對(duì)采樣頻率不同的兩個(gè)數(shù)據(jù)采集平臺(tái)進(jìn)行時(shí)間同步,可以將兩個(gè)平臺(tái)之間的時(shí)間誤差控制在-0.04ms~0.06ms,即微秒級(jí)別的誤差,同步精度較高,能夠很好的滿(mǎn)足時(shí)間同步的需求,從而應(yīng)用于多節(jié)點(diǎn)無(wú)線(xiàn)數(shù)據(jù)采集系統(tǒng)的時(shí)間同步。