編碼(NRZ、NRZI、曼徹斯特、4B/5B)

將節點和鏈路變成可用構件的第一步,是清楚它們如何連接,以使比特從一個節點傳輸到另一個節點。正如在前一節中提到的,信號是在物理鏈路上傳播的。因此,我們的任務是將源節點準備發送的二進制數據編碼爲鏈路能夠傳送的信號,然後在接收節點將信號解碼成相應的二進制數據。我們忽略調製的細節並假設處理兩種離散信號,即高信號電平和低電平。實際上,這些信號可能對應着銅線鏈路上的兩個不同電壓或光纖鏈路上的兩個不同能量級。

 

正如之前已提到的,本章討論的大部分功能是由網絡適配器(network adaptor)完成的,它是一個將節點連接到鏈路上的硬件。網絡適配器包括一個信令構件,它在發送節點把比特編碼爲信號,而在接收節點將信號解碼爲比特。因此,如圖2-3所示,信號在兩個信令構件之間的鏈路上傳輸,而比特在兩個網絡適配器之間流動。

 

 

回到將比特編碼爲信號的問題。顯然,要做的就是將數值1映射爲高電平,數值0映射爲低電平。這是一種稱爲不歸零(NonReturn to Zero, NRZ)的編碼方案所採用的映射。例如,圖2-4以圖解方式描述了一個特定的比特序列(圖的上部)及其對應的NRZ編碼信號(圖的下部)。

 

 

NRZ的問題是,幾個連續的1表示在一段時間內信號在鏈路上保持爲高電平,類似地,幾個連續0表示信號在一段時間內保持爲低電平。一長串0和1導致兩個基本問題。第一個問題是,它會導致基線漂移(baseline wander)狀態。尤其是接收方保持一個它所看到的信號平均值,然後用這個平均值區分高、低電平。當收到的信號遠低於這個平均值時,接收方就斷定看到了0,同樣,遠高於這個平均值的信號被認爲是1。當然,問題是太多連續的1或0會使這個平均值發生改變,使得檢測信號中很難出現明顯的變化。

 

第二個問題是,由高到低和由低到高的頻繁轉換必須使用時鐘恢復(clock recovery)。直觀地講,時鐘恢復問題就是:編碼和解碼過程都由一個時鐘來驅動,每個時鐘週期發送方發送1比特,接收方恢復1比特。爲了使接收方能恢復發送方發送的比特,發送方和接收方的時鐘必須精確同步。如果接收方時鐘比發送方時鐘稍快或稍慢,那麼,接收方就不能正確地解碼信號。可以採用在另一條線上發送時鐘給接收方的方法,但這種方案不太可行,因爲這使佈線費用增加一倍,所以接收方改由收到的信號得到時鐘,這就是時鐘恢復過程。無論何時,只要信號有從1到0或從0到1的跳變,接收方就知道這是在時鐘週期的邊界上,它能夠自己進行重新同步。然而,若長時間沒有這樣的跳變就會導致時鐘漂移。所以,無論傳送什麼數據,時鐘恢復都依賴於信號內有許多跳變。

 

有一種方法可以解決這個問題,稱爲不歸零反轉(NonReturn to Zero Inverted,NRZI),發送方將當前信號的跳變編碼爲1,將當前信號的保持編碼爲0。這樣就解決了連續1的問題,但是顯然未解決連續0的問題。NRZI如圖25所示。還有一種方法稱爲曼徹斯特編碼(Manchester encoding),這種頗具獨創性的方法通過傳輸NRZ編碼數據與時鐘的異或值使時鐘與信號結合在一起。(把本地時鐘看作一個從低到高變化的內部信號,一對低/高變化的電平看作一個時鐘週期。)圖25也給出了曼徹斯特編碼。注意,曼徹斯特編碼將0作爲由低到高的跳變,1作爲由高到低的跳變。因爲0和1都導致信號的跳變,所以接收方能有效地恢復時鐘。(還有一種曼徹斯特編碼的變種,稱爲差分曼徹斯特(differential Manchester)編碼。其方法是若信號的前一半與前一比特信號的後一半信號相等則編碼爲1,若信號的前一半與前一比特信號的後一半信號相反則編碼爲0。)

 

 

曼徹斯特編碼方案存在的問題是使鏈路上信號跳變的速率加倍,這意味着接收方有一半的時間在檢測信號的每一個脈衝。信號變化的速率稱爲鏈路的波特率(baud rate)。在曼徹斯特編碼中,比特率是波特率的一半,所以認爲編碼的效率僅爲50%。記住,如果接收方保持比圖25中的曼徹斯特編碼要求的更快的波特率,那麼在相同的時間段中,NRZ和NRZI能傳輸2倍的比特數。

 

我們考慮的最後一種編碼方法稱爲4B/5B,它力求不擴大高信號或低信號的持續期而解決曼徹斯特編碼的低效問題。4B/5B的思想是在比特流中插入額外的比特以打破一連串的0或1。準確地講,就是用5個比特來編碼4個比特的數據,之後再傳給接收方,因此稱爲4B/5B。5比特代碼是由以下方式選定的:每個代碼最多有1個前導0,並且末端最多有兩個0。因此,當連續傳送時,在傳輸過程中任何一對5比特代碼連續的0最多有3個。然後,再將得到的5比特代碼使用NRZI編碼傳輸,這種方式說明了爲什麼僅需關心多個連續0的處理,因爲NRZI已解決了多個連續1的問題。注意,4B/5B編碼的效率爲80%。

 

表2-2給出了16個可能的4比特數據符號對應的5比特代碼。注意,由於5比特足以編碼32個不同的代碼,因此我們僅用了16個,剩下的16個可用於其他目的。其中,11111

 

可用於表示線路空閒,00000表示線路不通,00100表示停止。在剩下的13個碼中,7個是無效的(因爲它們違反了1個前導、0或兩個末尾0的規則),另外6個代表各種控制符號。在本章後面將會看到,某些組幀協議會使用這些控制符號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章