無線傳感器網(wǎng)絡(luò)CSMA協(xié)議的設(shè)計
④ 如果m次擴展采樣,依靠前兩個規(guī)則仍然不能判斷信道狀態(tài),且最后一次擴展采樣的結(jié)果仍然介于兩者之間,那就使用統(tǒng)計值extCSVal來輔助判斷。規(guī)則如下:如果extCSVal> = ((minSignal + noiseLevel)1),那么就判定信道忙;反之,則判定信道空閑。
⑤ 最后是最壞的一種情況:當(dāng)擴展采樣的最后一次采樣發(fā)生錯誤,讀取RSSI值失敗時,并不知道信道的實際狀況,但也不能一直擴展下去,所以判斷為信道繁忙以避免出錯。
通過基本規(guī)則和擴展規(guī)則已經(jīng)可以得出一個準(zhǔn)確性較高的信道活動狀態(tài)判定,擴展規(guī)則彌補了基本規(guī)則可能會出現(xiàn)的錯誤。在實際的測試中,如果兩個閾值的初值選擇得很合適,那么一般并不會進入擴展采樣。若閾值初值選擇得不貼切,如mingSignal初值過大,則noiseLevel初值過小時都會導(dǎo)致進入擴展采樣。
這里還需要說明的是m的取值。本文中采樣定時器設(shè)置為1 ms,即1 ms采樣一次。擴展采樣次數(shù)m取值越大,準(zhǔn)確性自然就越高,但是整個網(wǎng)絡(luò)性能有所下降(花去的額外時間過多)。m的值也不能過小,不然extCSVal統(tǒng)計值就不能發(fā)揮其作用。由于本文使用的初始閾值是經(jīng)過大量測試確定的精確值(參照信號強度閾值初值的選擇),因此使用該初始閾值進行的測試結(jié)果顯示: 只有極少情況進入擴展采樣(約5 000次監(jiān)測進入一次擴展采樣)。鑒于這種實際情況,m的取值不需要很大,本文取其值為3。如果初始閾值不能精確設(shè)定,那么可將m值放大。
3 信號強度閾值的選擇和更新維護
從信道監(jiān)測的基本規(guī)則和擴展規(guī)則可以看出,信號強度的兩個閾值對信道狀態(tài)的判定十分重要,因此這兩個閾值的初始值選擇必須十分慎重;而且必須要根據(jù)當(dāng)前信道狀態(tài)動態(tài)更新閾值的機制。
3.1 信號強度閾值的更新機制
閾值的動態(tài)更新必須使用大量的實時RSSI值作為統(tǒng)計值,且需要把RSSI值分為兩類: 一類是信道繁忙時的RSSI,本文稱為busyRSSI;另一類是信道空閑時的RSSI值,本文稱為noiseRSSI。這兩個值可以在物理層每接收到一個數(shù)據(jù)包時獲取,因為CC2420接收到一個數(shù)據(jù)包時將在數(shù)據(jù)包的倒數(shù)第二個字節(jié)(FCS域)自動填充接收時的RSSI值,因此busyRSSI值就無條件地得到了;而在剛接收完數(shù)據(jù)包后信道一般都是空閑的,所以這時立即讀取當(dāng)前的RSSI值,就可以得到noiseRSSI值。為避免例外,可將得到的noiseRSSI值與minSignal進行比較,如果大于等于minSignal就丟棄。
在獲得busyRSSI和noiseRSSI后就對其進行統(tǒng)計操作,為實現(xiàn)這個目的需要維護一個統(tǒng)計變量avgSignal,用來統(tǒng)計所有的busyRSSI值。avgSignal的初值等于minSignal的初值即初始閾值,并按1/4的權(quán)重進行統(tǒng)計,即avgSignal = (avgSignal1) + ((avgSignal + busyRSSI)2)。noiseRSSI的值并不需要統(tǒng)計,這是因為讀出noiseRSSI的值很穩(wěn)定幾乎不變。
noiseLevel閾值的更新相對簡單,因為噪聲信號強度十分穩(wěn)定,因此不必對noiseRSSI做統(tǒng)計,每次讀取noiseRSSI后可直接對noiseLevel進行更新。更新規(guī)則也是采用1/4權(quán)重,即noiseLevel = (noiseLevel 1) + ((noiseLevel + noiseRSSI) 2)。
minSignal閾值需要針對兩種互補的情況來進行更新調(diào)整。第一種情況是一段時間內(nèi)的采樣結(jié)果全是信道空閑,說明所有的采樣值都小于minSignal,因此有可能minSignal的值過高,應(yīng)對其調(diào)整將其適當(dāng)降低。該情況在監(jiān)測信道結(jié)果為空閑時觸發(fā)更新,更新方法是直接利用當(dāng)前的busyRSSI來更新;只要busyRSSI的值小于當(dāng)前的minSignal值,那么就將busyRSSI的值作為最新的minSignal值。這樣做是因為在busyRSSI的信號強度下已經(jīng)能夠接收數(shù)據(jù)了,而busyRSSI又比當(dāng)前的minSignal要小,所以更接近實際的閾值。
第二種情況是對第一種情況的補充。在做了第一種情況的修改后,如果長時間內(nèi)監(jiān)測到的都是信道繁忙(如載波監(jiān)聽幾次回退后都返回繁忙),那么就可能是minSignal的值設(shè)置得太低,因此要適當(dāng)調(diào)高該值,以避免使用第一種更新方式后由于設(shè)置的minSignal值太低而導(dǎo)致不能使用信道的情況。該情況提供一個接口由上層(MAC層)來調(diào)用更新。更新需要借助統(tǒng)計量avgSignal,更新的偽代碼如下(其中initBusySingal指的是minSignal的最初值)://如果minSignal大于或等于初值,就說明沒有進行第一種更新,所以沒有進行第二種更新的必要
if (minSignal initBusySignal){//更合理地提高minSignal值,不能一下將minSignal大幅度提高,且要保證更新后minSignal比initBusySignal小
if (avgSignal initBusySignal){
minSignal = (minSignal + avgSignal) 1;
}
else{
minSignal = (minSignal + initBusySignal) 1;
}
}
initBusySignal的選擇將在后面介紹,它的選擇對更新機制尤為重要。因為minSignal的更新機制建立的基礎(chǔ)就是initBusySignal非常接近實際臨界值。initBusySignal本身也是經(jīng)過大量測試后選擇的一個信道活動最小強度值,而它肯定會大于(最小等于)實際的臨界值,所以minSignal更新后應(yīng)該比initBusySignal小才對。
3.2 信號強度閾值初始值的選擇
信號強度閾值的初始值必須根據(jù)實際測試岀的大量強度值來設(shè)定,如果設(shè)置失誤,將導(dǎo)致信道狀態(tài)判斷不準(zhǔn)確。本文假設(shè)兩個初值分別是initNoiseSignal和initBusySignal。下面給出部分測試強度的數(shù)據(jù),如表1所列。測試時使用兩個節(jié)點,且兩個節(jié)點都是使用新電池(即電源充沛)。表中,“阻隔”指的是一堵大約10 cm厚的墻。
表1 信號強度測試數(shù)據(jù)
在雙方節(jié)點能通信的前提下,本文測到的busyRSSI的最小值為0x54。根據(jù)上一小節(jié)的論述,initBusySignal的值可以略高,但因為該值是在電量充足且有阻隔的情況下測試岀的最小強調(diào)值,因此可以直接取為busyRSSI的最小值,即initBusySignal的值設(shè)置為0x54。對于initNoiseSignal的取值,從表1可以看出,檢測到的RSSI值非常穩(wěn)定,信道空閑時噪聲強度幅度不大,因此取值比0x4D略大就可以了。本文中initNoiseSignal取值為0x4E。
3.3 本文實現(xiàn)的信道監(jiān)測機制的優(yōu)點
本文實現(xiàn)的信道監(jiān)測機制比較完善且十分靈活。完善是指信道活動狀態(tài)判定規(guī)則十分完備,不僅有基本判定和擴展判定,而且還有閾值更新機制,進一步確保了判定結(jié)果的正確性;靈活是指向調(diào)用方提供了采樣窗口數(shù)的設(shè)置,使得調(diào)用方可以在每次監(jiān)測時使用不同的采樣窗口數(shù),可以被LPL、BMAC等有特殊要求的基于競爭的MAC協(xié)議直接調(diào)用。
4 CSMA協(xié)議的實現(xiàn)
本文實現(xiàn)的CAMA協(xié)議是基于使用廣泛的非持續(xù)性CSMA協(xié)議的,即節(jié)點在發(fā)送數(shù)據(jù)包之前先監(jiān)測信道,如果監(jiān)測到信道空閑,則該節(jié)點就自己開始發(fā)送數(shù)據(jù)包。反之,如果監(jiān)測結(jié)果為信道繁忙,即信道已經(jīng)被鄰居節(jié)點占用,則該節(jié)點回退一段隨機時間后,再次開始監(jiān)測,重復(fù)上面的操作。
在具體實現(xiàn)CSMA協(xié)議時,本文結(jié)合信道監(jiān)測提供的接口對協(xié)議做了一些優(yōu)化調(diào)整。另外,由于無線傳感器網(wǎng)絡(luò)中節(jié)點間距離很短,一般忽略傳播延遲,因此具體的實現(xiàn)與標(biāo)準(zhǔn)的CSMA協(xié)議有些不同,但原理一致,其實現(xiàn)如下:
如果節(jié)點要發(fā)送數(shù)據(jù)包,需要先進行載波監(jiān)聽,首先隨機選擇一個采樣窗口數(shù)(即信道采樣次數(shù)),該采樣數(shù)屬于某一個范圍,本文選擇為8~32。采樣數(shù)隨機選擇的目的是減少沖突,舉例說明:假設(shè)信道目前空閑,A、B、C三個節(jié)點都是鄰居節(jié)點,且A、B節(jié)點有數(shù)據(jù)包要發(fā)送給節(jié)點C;A、B兩個鄰居節(jié)點同時開始監(jiān)測,如果采樣窗口數(shù)固定,根據(jù)信道監(jiān)測的規(guī)則,信道空閑必須等到采樣數(shù)用完才能下結(jié)論,那么A、B節(jié)點都在用完所有的采樣數(shù)后得岀信道空閑的結(jié)論,然后都發(fā)送數(shù)據(jù)包,這樣數(shù)據(jù)在節(jié)點C處就發(fā)生了沖突,最后A、B兩節(jié)點就必須依靠隨機回退一段時間后再次監(jiān)測信道。采用隨機的采樣窗口數(shù)可以降低上面情況的發(fā)生率。因為采樣窗口數(shù)小的節(jié)點(假設(shè)為節(jié)點A)先得出信道空閑的結(jié)論并發(fā)送數(shù)據(jù)包,采樣窗口數(shù)大的節(jié)點B在后面的采樣中發(fā)現(xiàn)信道繁忙(因為節(jié)點A已經(jīng)占用了信道)就回退,避免了發(fā)生沖突。
評論