編碼理論

最後更新: 2026-03-05 08:45:19 +0800 +0800
原文以英文撰寫。您正在閱讀AI翻譯版本。

編碼理論描述符號如何表示、傳輸與復原。在軟體系統中,「編碼」可能指壓縮、錯誤碼、線路層級訊號或訊框慣例。這些機制會彼此作用,但解決的是不同問題。

來源編碼與通道編碼 #

來源編碼以資訊內容允許的最少位元來表示來源。無損壓縮器會移除統計冗餘,且必須精確重現原始位元組;有損編解碼器則根據應用程式特定的失真模型捨棄資訊。

通道編碼會在傳輸或儲存前加入結構化冗餘。接收端利用該冗餘偵測資料損毀或修正錯誤。同位元只能偵測部分錯誤模式。重複碼可透過多數決修正錯誤,但會耗用大量頻寬。漢明碼及現代區塊碼或卷積碼能以相同額外負擔提供更實用的距離。

因此,壓縮與通道編碼的位元預算方向相反:

  • 壓縮會減少冗餘,因為它假設通道可靠;
  • 通道編碼會增加冗餘,因為它假設通道有雜訊。

在錯誤更正碼之後套用壓縮器,通常找不到多少冗餘。在壓縮之後套用錯誤更正則有效,因為壓縮後的串流仍需保護。

漢明距離、冗餘與碼率 #

兩個等長位元字串之間的漢明距離,是兩者內容不同的位置數量。區塊碼的最小距離 d 是任兩個有效碼字之間的最小距離。解碼器必定能偵測最多 d - 1 個位元錯誤,而有界距離解碼器最多能修正 floor((d - 1) / 2) 個錯誤。

若編碼將 k 個資訊位元映射為 n 個傳輸位元,其碼率為 R = k/n。其餘 n - k 個位元為冗餘。提高最小距離通常會降低 R,因此實作會選擇符合通道錯誤模型的碼率與解碼器。總和檢查碼或 CRC 也會加入冗餘,但設計目標是偵測而非修正:檢查失敗表示收到的訊息無效,但不會指出原始位元。

線路編碼與轉態行為 #

線路編碼會將位元映射為實體訊號準位或轉態。它會影響時脈回復、頻譜與基線行為;它不會識別訊息邊界,也不會修復位元錯誤。

不歸零(NRZ) #

在 NRZ 準位慣例中,一種位元值會在完整位元週期內選擇一個訊號準位,另一種位元值則選擇另一個準位。因此,連續相同位元不會產生轉態。接收端必須從獨立時脈、富含轉態的編碼,或位元填充等規則中回復時序。

「NRZ」也可描述轉態慣例,而非單一通用映射,因此通訊協定規格必須說明其極性與時序規則。實作不得僅根據名稱推斷映射方式。

反相不歸零(NRZI) #

NRZI 將一種位元值編碼為轉態,另一種編碼為不轉態。USB 採用的常見慣例如下:

輸入位元訊號行為
0切換準位
1維持先前準位

其他通訊協定會對調位元意義。初始準位確立後,NRZI 不受極性影響,但無法消除長時間沒有轉態的情形:連續的「維持」位元仍需要時脈規則。因此 USB 使用位元填充。NRZI 也不提供訊框、錯誤偵測或錯誤更正。

保持各層分離 #

健全的鏈路可包含以下所有層次:

  1. 實體訊號傳遞將位元轉換成電壓、光學符號或轉態。
  2. 訊框標示邊界、位址,有時也包含長度欄位。
  3. 來源編碼壓縮承載資料。
  4. 完整性檢查(例如 CRC)偵測意外變更。
  5. 通道編碼加入可供偵測或修正的冗餘。

各層具有不同的失效模式。轉態規則無法判斷訊框結束位置,訊框分隔符無法修正承載資料中翻轉的位元,而壓縮器無法驗證位元組是否在傳輸後保持完整。明確指出層次,可避免將 NRZI、CRC 與霍夫曼碼視為可互換的「編碼」。

參考資料 #

評論

在 GitHub 上閱讀或評論(發表評論需要登入)