English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

guest
1 / ?
back to lessons

源 → 通道:兩階段編碼

漢明的第 10 章以香農通信模型開篇,該模型適用於每個移動信息的系統:電話通話、廣播、硬盤、DNA 複製、計算機內存。

Shannon Communication Model

兩階段架構

階段 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。 ✓

一個 5 符號源提出碼:s1=0, s2=10, s3=110, s4=1110, s5=1111。驗證或反駁前置碼可解碼性,然後計算克拉夫特和。克拉夫特 = 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。

計算 3 符號源的 H:p(A) = 1/2, p(B) = 1/3, p(C) = 1/6。顯示所有項。然後提出一個前置碼並驗證 L ≥ H。

為什麼熵是下界

無噪聲編碼定理的下界不只是一個公式——它反映了關於信息的深層次東西:你不能壓縮已經最大不可預測的東西。

當所有符號等概率時(均勻分佈),熵 H = log₂(n)(n 個符號)。碼長 log₂(n) 比特的塊碼精確達到 H。沒有碼能做得更好。

當一個符號主導時(比如,p(A) = 0.99, p(B) = 0.01),H 很小——接近 0。可變長度碼可以為 A 分配一個非常短的碼,非常有效地編碼流。

實用收穫:大的壓縮增益只在符號概率差異很大時存在。如果源已經「均勻」(看起來隨機),哈夫曼編碼無法獲得任何東西。

兩個源:源 X 有 p = [0.5, 0.5](兩個等概率符號)。源 Y 有 p = [0.99, 0.01](一個主導符號)。計算每個的 H。這對每個源的壓縮潛力說什麼?