天天看點

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

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

RZ(Return Zero Code)編碼

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

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

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

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

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

NRZ(Non Return Zero Code)編碼

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

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

___

NRZI(Non Return Zero Inverted Code)編碼

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

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

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

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

___

曼徹斯特編碼

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

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

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

參考文章