編碼 | 解碼 | 壓縮

> tunstall | 變長 | 定長 <

// Tunstall 編碼——由變長至定長的最佳壓縮

0 字元
0 字元

>> 功能特色

[變長→定長]

V2F 編碼

將變長符號序列對應到固定長度的二進位碼字。

[最佳化]

機率驅動

依據符號機率分佈建立最適化字典。

[易於解碼]

簡單解碼流程

固定長度碼字讓解碼流程簡單、容易實作。

>> 技術細節

Tunstall 編碼原理

Tunstall 編碼從單一符號開始建立字典,將變長符號序列映射到固定長度的二進位碼字。演算法每一步會找到目前機率最高的序列,將其從字典移除,再把該序列與字母表中所有符號做一次延伸,加入新的條目,如此反覆直到字典大小達到目標(n 位元碼對應 2^n 個碼字)。

Tunstall 編碼範例

文字:"aabaa",其中 P(a)=0.8,P(b)=0.2

字典建立(3 位元碼):
初始:a, b
展開「a」:aa, ab
展開「aa」:aaa, aab
展開「ab」:aba, abb

最終字典(8 個碼字):
aaa → 000
aab → 001
aba → 010
abb → 011
aa  → 100
ab  → 101
a   → 110
b   → 111

編碼:「aabaa」→ 001 100(aab + aa)

為什麼要使用 Tunstall 編碼?

  • 輸出為固定長度碼字,利於串流與緩衝控制
  • 解碼邏輯簡單,適合硬體實作與嵌入式系統
  • 不易出現前綴碼的同步問題
  • 常用於語音壓縮、影像編碼等需固定碼率的場景
  • 對無記憶(memoryless)來源可達到理論上接近最優的效能

>> 常見問題

什麼是 Tunstall 編碼?

Tunstall 編碼是一種「變長輸入、定長輸出」的熵編碼方式。不同於 Huffman(定長輸入、變長輸出),Tunstall 會將變長來源序列映射為固定長度碼字,非常適合需要固定位元率的通訊與儲存系統。

Tunstall 和 Huffman 有何差異?

Huffman:固定長度輸入 → 變長輸出(例如「a」→「0」,「b」→「10」);Tunstall:變長輸入 → 固定長度輸出(例如「aa」→「000」,「ab」→「001」)。Tunstall 在硬體實作與同步控制上較有優勢,但壓縮率通常略低於 Huffman。

Tunstall 字典是如何建立的?

從單一符號開始,反覆進行:1)找出目前機率最高的序列;2)將該序列自字典移除;3)將此序列與所有可能的一個符號延伸後加入字典;4)直到字典大小達到目標(n 位元碼約對應 2^n 個條目)。

Tunstall 編碼通常用在什麼場合?

Tunstall 編碼常見於語音壓縮、影像與多媒體編碼,以及各種需要定長輸出的即時系統,特別適合以硬體或 FPGA 實作的編碼器。