源 → 通道:兩階段編碼
漢明的第 10 章以香農通信模型開篇,該模型適用於每個移動信息的系統:電話通話、廣播、硬盤、DNA 複製、計算機內存。
兩階段架構
階段 1:源編碼(壓縮)。將源消息轉換為緊湊表示。目標:消除源本身的冗餘。莫爾斯電碼就是這樣做的:常見字母得到短碼,罕見字母得到長碼。
階段 2:通道編碼(錯誤保護)。添加根據通道噪聲特性調整的受控冗餘。嘈雜的電話線需要比光纖電纜更多的冗餘。兩個階段解耦:為各自的任務獨立優化每個階段。
兩個階段之間的通用接口——標準化比特流——意味著任何源都可以與任何通道配對。這種模塊性是香農的關鍵架構見解。
通過時間進行存儲通信。 漢明指出,通過空間發送消息(傳輸)和通過時間發送消息(存儲)使用相同的模型。備份驅動器是時間上的嘈雜通道。
噪聲的角色
香農的模型做出了一個激進的假設:噪聲是不可避免的。每個通道、每個存儲介質、每個開關電路都會引入某種錯誤概率。問題不是「我們如何消除噪聲?」而是「我們如何在噪聲存在的情況下恢復原始消息?」
這與古典物理學形成對比,在古典物理學中噪聲作為事後考慮進入(不確定性原理)。香農將噪聲視為基礎條件——所有理論都基於此構建。
現在,第 10 章重點關注無噪聲情況:源編碼沒有錯誤。通道編碼問題(錯誤更正)等待後續章節。
何時可以唯一解碼?
對於可變長度碼有用,接收者必須明確地解碼比特流。漢明用一個 4 符號碼說明了這個失敗的測試,然後介紹了修復方案:前置碼。
前置碼條件
前置碼(或瞬時碼)是沒有碼字是任何其他碼字的前置的碼。給定接收的比特流,當你到達解碼樹中的葉子時,你知道符號已經結束——不需要前瞻。
示例 {s1, s2, s3, s4} 的前置碼:s1 = 0, s2 = 10, s3 = 110, s4 = 111。
驗證:0 不是 10、110 或 111 的前置。10 不是 110 或 111 的前置(10 後面跟著更多位給出 100... 或 101...,其中都不以 110 或 111 開頭)。該碼符合條件。
解碼過程:跟隨樹,根據每個傳入比特進行分支,當你到達葉子時發出符號,返回根。
克拉夫特不等式
對於任何二進制前置碼,碼字長度為 l_1, l_2, ..., l_n:
Σ 2^(−l_i) ≤ 1
當碼是完整的時等號成立(葉子平鋪完整的二進制樹,沒有間隙)。這是一個必要條件:沒有前置碼可以違反它。相反,對於滿足克拉夫特不等式的任何長度集合,存在前置碼。
應用克拉夫特不等式
給定碼字長度,驗證克拉夫特:Σ 2^(−l_i) ≤ 1。
對於 {s1=0, s2=10, s3=110, s4=111}:長度為 1, 2, 3, 3。
Σ = 2^(−1) + 2^(−2) + 2^(−3) + 2^(−3) = 1/2 + 1/4 + 1/8 + 1/8 = 1。 ✓
香農熵
可變長度碼的平均碼長:L = Σ p_i · l_i,其中 p_i 是符號 s_i 的概率,l_i 是其碼長。
L 能變多短?香農的答案:不能低於源熵。
香農熵: H = −Σ p_i · log₂(p_i) (單位:比特/符號)
熵測量每個符號的平均信息。高熵意味著符號大致等概率(最大不可預測性)。低熵意味著某些符號主導(高可預測性,更易壓縮)。
無噪聲編碼定理
對於任何前置碼,H(源) ≤ L ≤ H(源) + 1。
沒有碼能beat熵。哈夫曼編碼(下章)達到上界:L < H + 1。對於 n 個符號的塊碼,界變得更緊:H ≤ L/n < H + 1/n。
熵也是理論壓縮限制:你不能在不損失信息的情況下將源壓縮到低於 H 比特每符號。
計算熵
示例:4 個符號,概率 p = [1/2, 1/4, 1/8, 1/8]。
H = −(1/2)·log₂(1/2) − (1/4)·log₂(1/4) − (1/8)·log₂(1/8) − (1/8)·log₂(1/8)
= (1/2)·1 + (1/4)·2 + (1/8)·3 + (1/8)·3
= 0.5 + 0.5 + 0.375 + 0.375 = 1.75 比特/符號
而哈夫曼碼 {0, 10, 110, 111} 精確達到 L = 1.75 = H。
為什麼熵是下界
無噪聲編碼定理的下界不只是一個公式——它反映了關於信息的深層次東西:你不能壓縮已經最大不可預測的東西。
當所有符號等概率時(均勻分佈),熵 H = log₂(n)(n 個符號)。碼長 log₂(n) 比特的塊碼精確達到 H。沒有碼能做得更好。
當一個符號主導時(比如,p(A) = 0.99, p(B) = 0.01),H 很小——接近 0。可變長度碼可以為 A 分配一個非常短的碼,非常有效地編碼流。
實用收穫:大的壓縮增益只在符號概率差異很大時存在。如果源已經「均勻」(看起來隨機),哈夫曼編碼無法獲得任何東西。