1. 程式人生 > >幾種編碼方式(RZ、NRZ、NRZI、曼徹斯特編碼)

幾種編碼方式(RZ、NRZ、NRZI、曼徹斯特編碼)

 此文轉自:http://blog.sina.com.cn/s/blog_78e87ba10102wj9g.html

在數位電路中,組成一連串資訊的基元就是0和1,無論是在CPU、DSP、MCU甚至是個數字計數器中,數位電路在其中能夠處理的資訊也只有0和1,而對於任何外界的資訊,計算機都能通過兩個量來描述,那就是0和1。而對於數字通訊來說,想要用0和1來傳遞你想傳達的資訊,則必須要通過一種特殊的約定來進行同步,這種約定就是編碼。兩臺裝置要想進行有線通訊,最終都是將想要傳達的資訊轉變成一串位元流,進而在傳輸線上進行傳輸。常規數字通訊為資料線+時鐘線的形式,但對於高速訊號而言,時鐘線和資料線長度的稍稍偏差,就會造成接收端無法滿足資料取樣的建立時間,故會導致資料出錯。而最好的方式就是將時鐘訊號和資料訊號用同一根線來傳遞,所以出現了一些比較特殊的編碼,是的時鐘和資料能夠融合在一起。下面主要討論5中常用的編碼方式:

 

1.RZ(Return Zero Code)編碼

       RZ編碼也成為歸零碼,歸零碼的特性就是在一個週期內,用二進位制傳輸資料位,在資料位脈衝結束後,需要維持一段時間的低電平。舉個圖例吧:

RZ、NRZ、NRZI、曼徹斯特編碼
 

圖1 RZ碼示意圖

圖中紅色的線表示資料,只佔據一部分的週期,剩下週期部分為歸零段。而歸零碼而分為單極性歸零碼和雙極性歸零碼,圖1表示的是單極性歸零碼,即低電平表示0,正電平表示1。對於雙極性歸零碼來說,則是高電平表示1,負電平表示0。如下圖所示:

RZ、NRZ、NRZI、曼徹斯特編碼

圖2 雙極性RZ碼示意圖

這種編碼方式雖說能夠同時傳遞時鐘訊號和資料訊號,但由於歸零需要佔用一部分的頻寬,故傳輸效率也就收到了一定的限制,假設資料傳輸時間為t,一個週期時間為T,則這種傳輸效率η=t/T。

 

2.NRZ(Non Return Zero Code)編碼

       NRZ編碼也成為不歸零編碼,也是我們最常見的一種編碼,即正電平表示1,低電平表示0。它與RZ碼的區別就是它不用歸零,也就是說,一個週期可以全部用來傳輸資料,這樣傳輸的頻寬就可以完全利用。一般常見的帶有時鐘線的傳輸協議都是使用NRZ編碼或者差分的NRZ編碼。因此,使用NRZ編碼若想傳輸高速同步資料,基本上都要帶有時鐘線,因為本身NRZ編碼無法傳遞時鐘訊號。但在低速非同步傳輸下可以不存在時鐘線,但在通訊前,雙方裝置要約定好通訊波特率,例如UART。

RZ、NRZ、NRZI、曼徹斯特編碼

圖3 NRZ編碼示意圖

 

3.NRZI(Non Return Zero Inverted Code)編碼

       NRZI編碼的全稱為反向不歸零編碼,這種編碼方式集成了前兩種編碼的優點,即既能傳輸時鐘訊號,又能儘量不損失系統頻寬。對於USB2.0通訊的編碼方式就是NRZI編碼。其實NRZI編碼方式非常的簡單,即訊號電平翻轉表示0,訊號電平不變表示1。例如想要表示00100010(B),則訊號波形如下圖所示:

RZ、NRZ、NRZI、曼徹斯特編碼

圖4 NRZI編碼示意圖

由圖可以看到,當電平狀態發生變化時,表示的資料為0。在傳輸的資料中,很少出現全1的狀態,故接收端可以根據傳送端的電平變化確定取樣時鐘頻率。但是有時候依然會出現資料為全1的狀態,也就是說訊號線一直保持一個狀態,這個時候時鐘訊號就無法傳輸,接收端就無法同步時鐘訊號,這該如何解決呢?解決方式就是在一定數量的1之後強行插入一個0,就是說若訊號線狀態一直持續一段時間不變的話,傳送端強行改變訊號線的狀態,接收端則只需要將這個變化忽略掉就可以了。在USB2.0的協議中規定為傳輸7個1則在資料中插入一個0。例如有一段資料為:1111 1111 (B)要傳送,則整個傳輸線上的電平狀態是這樣的:

RZ、NRZ、NRZI、曼徹斯特編碼

圖5

 

5.曼徹斯特編碼

曼徹斯特編碼方式和NRZI編碼十分相似,只不過它是利用訊號的跳變方向來決定資料的。在位中間,訊號由高向低跳變表示資料0,訊號由低向高跳變表示資料1。舉個圖例吧,若要表示資料1001 1010(B),則訊號波形圖如下圖所示:

RZ、NRZ、NRZI、曼徹斯特編碼
 

圖6 曼徹斯特編碼示意圖

 

       曼徹斯特編碼方式也如前面所說,雖然傳輸了時鐘訊號,但也損失了一部分的頻寬,主要表現在相鄰相同資料上。但對於高速資料來說,這種編碼方式無疑是這幾種編碼方式中最優的,相比NRZI編碼,曼徹斯特編碼不存在長時間訊號狀態不變導致的時鐘訊號丟失的情況,所以在這種編碼方式在乙太網通訊中是十分常用的。

 

       總結了以上這幾種編碼方式,其實最終體現的都是一個問題,就是如何將時鐘訊號傳遞出去,對於任何數字通訊而言,時鐘訊號都是首先要考慮的問題,因為同步通訊在接收端對資料進行取樣時,都是利用傳送端發出的時鐘訊號作為取樣基準源,只有保證優質的資料訊號和時鐘訊號被傳送出來,才能夠保證取樣端不會在亞穩態區中進行取樣而導致資料的錯誤。以上內容都是個人的淺見,如有不足或不對之處,歡迎指正!