曼徹斯特編碼,也叫做相位編碼(PE),是一個同步時鐘編碼技術,在以太網媒介系統中,被物理層使用來編碼一個同步位流的時鐘和數據。它的每一個數據比特都是由至少一次電壓轉換的形式所表示的。曼徹斯特編碼因此被認爲是一種自定時碼。自定時意味着數據流的精確同步是可行的。每一個比特都準確的在一個預先定義時間時期的時間中被傳送。這樣的編碼方式可以在長時間沒有電平跳變的情況下,仍然對任意的二進制數據進行編碼,並且防止在這種情況下同步時鐘信號的丟失以及防止低通模擬電路中低頻直流飄移所引起的比特錯誤。同時,如果保證傳送的編碼交流信號的直流分量爲零並且能夠防止中繼信號的基線漂移,那麼就很容易實現信號的恢復和防止能量的浪費。另外,曼徹斯特碼還具有豐富的位定時信息。
原理:曼徹斯特碼是通過電平的跳變來對二進制數據“0”和“1”進行編碼的,對於何種電平跳變對應何種數據,實際上有兩種不同的數據約定:第一種約定是由G. E. Thomas,Andrew S. Tanenbaum等人在1949年提出的,它規定“0”是由低到高的電平跳變表示,“1”是由高到低的電平跳變;第二種約定則是在IEEE 802.4(令牌總線)以及IEEE 802.3 (以太網)中規定,按照這樣的說法,由低到高的電平跳變表示“1”,由高到低的電平跳變表示“0”。在實際工程上,這兩種約定在一定範圍內均有應用。爲了便於描述,若無特殊說明,曼徹斯特碼的編碼規則均採用第二種約定,即從低電平跳變到高電平表示“1”,從高電平跳變到低電平表示“0”。
普通數字信號與曼徹斯特編碼對比如圖。
優點:數據和同步時鐘統一編碼,曼碼中含有豐富的時鐘信號,直流分量基本爲零,接收器能夠較容易恢復同步時鐘,並同步解調出數據,具有很好的抗干擾性能,這使它更適合於信道傳輸。
曼徹斯特編碼器的設計
對比普通二進制碼的波形和曼徹斯特碼的波形可知,曼徹斯特碼在一個碼元的開始時刻要對普通信號進行一次採樣,並且有可能會發生一次跳變,在碼元的中間位置一定發生跳變,因此編碼信號的頻率是數據時鐘頻率的兩倍。
曼徹斯特碼是用“01”和“10”來表示普通二進制數據中的“1”和“0”的,因此在實際電路設計中,我們可以用採一個2選1數字選擇器來完成此項功能。
曼徹斯特解碼電路設計的關鍵是如何準確地從曼徹斯特碼的數據流中提取出“10”和“01”信號,並且把它們轉換成普通二進制編碼中的“0”和“1”。例如對於曼徹斯特碼“01010101”,如果從第一位開始解碼,得到的二進制編碼就是“1111”,而若從第二位開始解碼,得到的二進制編碼就是“000”和頭尾兩個曼徹斯特碼。由此可見,如果曼徹斯特碼數據流中只有“1”或“0”是不能得到正確的譯碼結果的,如果曼徹斯特編碼數據流中出現“00”,則“00”前後的碼元必定是“1”;如果曼徹斯特編碼數據流中出現“11”,則“00”前後的碼元必定是“0”,因此,我們可以將“00”與“11”作爲曼徹斯特碼譯碼的標誌位。
爲了更準確得解碼曼徹斯特碼,我們需要一個頻率不小於奈奎斯特頻率的採樣時鐘,即採樣時鐘的頻率至少是曼徹斯特碼頻率的兩倍,曼徹斯特碼的頻率是普通二進制編碼信號頻率的兩倍,因此採樣頻率至少是數據頻率的4倍。
在實際設計電路時,我們可以採用一個緩存器,儲存上一個時鐘採集到的信號和當前時鐘採集到的信號,當緩存器的內容是“01”時,輸出“1”;當緩存器的內容是“10”時,輸出“0”;當緩存器的內容是“00”或“11”時,輸出維持不變。
曼徹斯特編碼是非常常見的編碼,網線就是採用這種編碼。課本上說的“含有豐富的時鐘信息”。
編碼的步驟,是用01表示0,用10表示1。正是因爲用跳變沿表示電平,使得它的頻率是信號的兩倍。
以下是編碼的程序:
仿真的波形:
從波形可以看出,曼碼可以避免連0或者連1。
這裏有問題,我默認了時鐘信號的頻率是曼碼頻率的兩倍,因爲我必須利用時鐘沿編碼。不太清楚實際情況是什麼樣的,因爲網上都是時鐘信號頻率等於編碼頻率,很奇怪。
下面介紹譯碼。譯碼的難度不是01以爲0,10譯爲1,而是確定是嗎時候開始譯碼。參考了一些書,他們是從檢測到00或11後開始譯碼,因爲00後一定是1,11後一定是0,所以就可以確認開始,然後兩個爲一組譯碼。
代碼如下:
仿真結果:
由圖中可以看出,譯碼從檢測到11開始,因爲11後面跟着0,所以譯01,按順序來是10,所以輸出1,後面每隔兩個碼譯一次,因爲不能和前一個碼混在一起。這樣如果傳輸過程沒有誤碼,後面再也不會出現翻譯00或11的情況。在這裏我故意弄出了個11,讓fail錯誤信號置了1。