確定字符與二進制數之間的對應關系僅是向前邁出了第一步,若要使數據為計算機所用,還需要將二進制數轉變成為電信號。在數據通信中有很多種采用直流信號表示二進制中0和1的方式,其中用直流信號表示二進制中0和1的信號形式被稱為碼型。表0-1中列出了幾種常見碼型的編碼方式,下面分別對這幾種常見碼型進行詳細的介紹。
表0-1:常見碼型的編碼方式
欲進一步詳細了解相關編碼方式的請進入:常用字符集編碼方式;基帶信號的常用編碼方式
1、二電平碼
二電平碼是最簡單、最基本的一種碼型,它采用兩種不同的電平來分別表示二進制中的0和1。例如,用恒定的正電平表示1,用無電壓的狀態表示0。而更為常見的方法則是用一個正電平表示0,用一個負電平表示1,這種碼型被稱為非歸零電平碼(NRZ-L)。圖1-1描述了非歸零電平碼對數據流110001011010進行編碼的情形。與第一種情況不同,在采用NRZ-L的情況下,若線路上的電壓為0,則說明當前線路上沒有信號傳輸。
圖1-1:非歸零電平碼
這種碼型的思想簡單,便于實現。但是它具有直流分量,不適于使用變壓器和交流耦合的情況。此外,它還難于確定一個比特的開始和停止時刻,特別是在傳輸連續的比特1或連續的比特0的情況下。為此收發雙方需要從其他途徑獲取同步信息,以便實現同步控制。
2、差分碼
與二電平碼不同,差分碼是一種以電平跳轉狀況來表示數據信息的碼型。值得注意的是,以差分碼傳輸數據時,在一個比特持續的時間內信號電平不會出現跳變,而且這段時間內電平的值與數據信息不相關。而與數據信息相關的電平跳轉只發生在比特傳輸的開始時刻。非歸零反相碼(NRZ-I,Non Return to Zero-Invert on ones)就是一種差分碼。采用這種碼型時,如果傳輸一個比特的起始時刻電平發生了跳轉,那么這個比特就表示二進制的1;如果此刻電平沒有發生跳轉,那么這個比特就代表二進制的0。圖2-1描述了非歸零反相碼對數據流110001011010進行編碼的情況。
圖2-1:非歸零反相碼
由于差分碼不是用信號電平的絕對狀態表示數據信息,所以在接收信號時只需檢測信號電平是否發生跳變,不必將其與閾值進行比較,從而在有噪聲影響的情況下這種碼型更為可靠,而且在傳輸過程中某些環節引起的基帶信號反相也不會影響最終的接收結果。但是差分碼也有其不足之處,它仍缺乏完善的同步機制。以非歸零反相碼為例,雖然在傳輸連續的比特1時,每個比特開始時刻都將發生電平的轉換,此時信號自身具備了同步信息,但是對于傳輸連續比特0的情況它卻無能為力。
3、雙極碼
雙極碼是一種采用三個電平表示二進制數的碼型。目前在數據通信中得到廣泛應用的雙極碼是信號交替反轉碼(AMI)、8零替換碼(B8ZS)和高密度雙極性3零碼(HDB3)。其中8零替換碼和高密度雙極性3零碼均是信號交替反轉碼的變種,此二者與AMI碼的實現基本相同,只是在遇到長0串時其實現方式與AMI碼略有差別。它們分別以各自的方式對長0串進行替換,以便使收發雙方更有效地實現步調一致。
1)雙極性信號交替反轉碼:雙極性信號交替反轉碼用無電壓的狀態表示二進制0,用交替的正、負電平表示二進制1。圖3-1描述了用雙極性信號交替反轉碼對數據110001011010進行編碼的情況。雙極性信號交替反轉碼用交替變換的正、負電平表示比特1的方法使其所含的直流分量為零。而且在傳輸比特1時,無論其前導數據是比特0還是比特1都將引起信號電平的變化,這在一定程度上為收發雙方取得同步提供了方便。特別是在傳輸連續的比特1時,信號電平將連續出現反轉。但對于較長的比特0序列,它還是無法提供同步信息。
圖3-1:雙極性信號交替反轉碼
2)雙極性8零替換碼:8零替換碼(B8ZS,Bipolar with 8-Zero Substitution)是北美地區使用的一種AMI變形碼,它在一定程度上解決了為長0串提供同步信息的問題。B8ZS通過對連續8個比特0進行替換來實現上述功能,具體的替換方法如圖3-2所示。兩種模式的選擇取決于待轉換序列的前導比特1所采用的極性。但無論選擇哪種模式,在替換后的序列中均會出現兩次相鄰非零電平同極的現象。接收端正是通過檢測這個特征來確定被替換序列的位置的,以便把它還原成連續的8個比特0。
圖3-2:8零替換碼的替換方式
3)高密度雙極性3零碼和雙極訊號3零替換:高密度雙極性3零碼(HDB3,High-Density Bipolar 3-Zero)是日本和歐洲地區用于處理長0串的一種AMI變形碼。采用這種碼型時,如果遇到由連續的4個比特0組成的序列,則根據位于上一次已轉換序列和本次待轉換序列之間比特1的數量來決定待轉換序列的轉換模式。
另外,類似HDB3碼的雙極訊號3零替換(B3ZS,Bipolar with 3-Zero Substitution)是一種如果用戶數據流包含一行三個或三個以上連續零值時,雙極變異值(bipolar violations)就會被插入的T型載波線路編碼。雙極訊號三零替換被用來確保當用戶數字流所包含的“1”值不充足時,確保充分數量的轉換以維護系統的同步性。
例如,若采用B8ZS碼對數據10100000000010進行編碼,假設序列中第一個比特1的極性為正,注意長0串前導比特1的極性,編碼后如圖3-3所示。若采用HDB3碼將數據100000000010000進行編碼,假設位于這段數據序列首部的比特1極性為正,且其后繼數據是4個連續的比特0,則編碼后如圖3-4所示。
圖3-3:雙極性8零替換碼 圖3-4:高密度雙極性3零碼
欲詳細了解HDB3、B3ZS碼編碼規則的請進入。
4、裂相碼
裂相碼是一種在比特中點位置上電平跳轉為相反極的碼型。目前,最常用的兩種裂相碼是曼徹斯特碼和差分曼徹斯特碼。
1)曼徹斯特碼:曼徹斯特碼(Manchester Encoding)是一種將出現在比特中點位置的電平跳變既作為數據信息又作為同步信息的裂相碼。它以在比特中點位置上出現的從負電平到正電平的跳變表示二進制的1,將此刻出現從正電平到負電平的跳變表示二進制的0。圖4-1描述了用曼徹斯特碼對數據 110001011010進行編碼的情況。
圖4-1:曼徹斯特碼
2)差分曼徹斯特碼:差分曼徹斯特碼(Differential Manchester Encoding)是一種融入了差分碼特點的裂相碼。這種碼型以比特中點位置的電平跳轉作為同步信息,以比特開始時刻是否出現電平跳變的情況作為數據信息。若在比特開始時刻出現電平跳變,則該比特表示0,否則表示1。圖4-2描述了用差分曼徹斯特碼對數據110001011010進行編碼的情況。
圖4-2:差分曼徹斯特碼
由上述兩種碼型的實現方式可知,裂相碼通過位于比特中點的電平轉換使數據信號自身夾帶了時鐘節拍,從而確保收發雙方能夠同步工作。但這卻使得在傳輸裂相碼時需要更大的帶寬。
5、密勒碼
密勒碼也是一種利用電平的跳變表示數據信息的碼型。它以位于比特中點的電平跳轉表示二進制的1,而比特中點沒有出現電平跳轉時則表示二進制的0。若當前傳輸的比特0后面緊跟另一個比特0,則該比特0的傳輸要進行電平跳轉。圖5-1描述了用密勒碼對數據110001011010進行編碼的情況。這種編碼方式消除了裂相碼出現的頻帶過寬的問題,并且較完善地解決了同步問題。
圖5-1:密勒碼
6、多電平碼
多電平碼是一種以M個電平狀態表示由n個比特組成的碼元的編碼(其中n與M的關系是n = log2M)。較為常見的多電平碼有自然碼和格雷碼。一般地,多電平碼所需的M個電平是以0電平為中心對稱等距設置的。例如,當M=4時多電平碼所選用的4個電平為3a,a,-a和-3a。表6-1分別列出了在四電平自然碼和四電平格雷碼中電平與碼元之間的對應關系。
表6-1:M=4時自然碼和格雷碼的定義表
多電平碼的優點是提高了傳輸效率和頻帶利用率。在輸入比特率一定的情況下,M的取值越大頻帶利用率就越高。但在發送功率一定的情況下,M越大抗噪聲干擾的能力就越低。鑒于此,M的取值一般不宜超過16。例如分別采用四電平自然碼和四電平格雷碼對數據001110011000進行編碼,如圖6-1和圖6-2所示。
圖6-1:四電平自然碼 圖6-2:四電平格雷碼
7、雙二進制碼
雙二進制碼是一種通過電平狀態表示數據信息的碼型。它用無電壓狀態表示二進制中的1,用正、負電平交替表示二進制的0。當兩個比特0之間出現奇數個比特1時,則位置靠后的那個比特0需改變電平極性。圖7-1描述了用雙二進制碼對數據110001011010進行編碼的情況。
圖7-1:雙二進制碼
通過上述介紹可知,常用的碼型種類很多,每種碼型都有其各自的特點,例如,不同碼型所采用的電平數量可能不同,包含的同步信息量不同,所具有的直流成分不同等。于是在選擇碼型的過程中,需要根據實際情況從差錯檢測能力、信號自同步能力、抗干擾能力、實現費用等因素出發進行綜合考慮。
欲更多了解信道編碼原理的請進入。