35
編編 編編編編編編編編編 編編編 編編編編編

編碼 用於資料傳輸及壓縮

  • Upload
    sabina

  • View
    123

  • Download
    0

Embed Size (px)

DESCRIPTION

編碼 用於資料傳輸及壓縮. 漢明碼 霍夫曼編碼. 漢明碼 (Hamming Code) 奇偶檢驗碼. 漢明碼 (Hamming Code) ,奇偶檢驗碼,是在電信領域的一種線性偵錯碼,以發明者 Richard Hamming 的名字命名。 漢明碼在傳輸的訊息流中插入驗證碼,以偵測並更正單一位元錯誤。由於簡單的漢明編碼,它們被廣泛應用於內部記憶體 (RAM) 。其 SECDED (single error correction, double error detection) 版本另外加入一檢測位元,可以偵測兩個以下同時發生的位元錯誤,並 能夠更正單一位元的錯誤 。 - PowerPoint PPT Presentation

Citation preview

Page 1: 編碼 用於資料傳輸及壓縮

編碼用於資料傳輸及壓縮

漢明碼霍夫曼編碼

Page 2: 編碼 用於資料傳輸及壓縮

112/04/21 2

漢明碼 (Hamming Code)奇偶檢驗碼

• 漢明碼 (Hamming Code) ,奇偶檢驗碼,是在電信領域的一種線性偵錯碼,以發明者 Richard Hamming 的名字命名。

• 漢明碼在傳輸的訊息流中插入驗證碼,以偵測並更正單一位元錯誤。由於簡單的漢明編碼,它們被廣泛應用於內部記憶體 (RAM) 。其 SECDED (single error correction, double error detection) 版本另外加入一檢測位元,可以偵測兩個以下同時發生的位元錯誤,並能夠更正單一位元的錯誤。

• 當傳送端與接收端的位元樣式的漢明距離 (Hamming distance) 小於或等於 1 時(僅有 1 bit 發生錯誤),可實現可靠的通訊。相對的,簡單的奇偶檢驗碼除了不能糾正錯誤之外,也只能偵測出奇數個的錯誤。

Page 3: 編碼 用於資料傳輸及壓縮

112/04/21 3

• 在數學方面,漢明碼是一種二元線性碼。對於每一個整數 m > 2 ,存在一個編碼,帶有 m 個奇偶校驗位 2m − m − 1 個資料位。該奇偶檢驗矩陣的漢明碼是通過列出所有欄的長度是兩兩獨立 。

• 奇偶校驗是一種添加一個奇偶位用來指示之前的資料中包含有奇數還是偶數個 1 的檢驗方式。

• 如果在傳輸的過程中,有奇數個位發生了改變,那麼這個錯誤將被檢測出來(注意奇偶位本身也可能改變)。一般來說,如果資料中包含有奇數個 1 的話,則將奇偶位設定為 1 ;反之,如果資料中有偶數個 1 的話,則將奇偶位設定為 0 。換句話說,原始資料和奇偶位組成的新資料中,將總共包含偶數個 1.

Page 4: 編碼 用於資料傳輸及壓縮

112/04/21 4

• 奇偶校驗並不十分可靠,如果資料中有偶數個位 ( 置 ) 發生變化,則奇偶位校驗仍將認為正確,因此不能檢測出錯誤。

• 即使奇偶校驗檢測出了錯誤,他也無法指出哪一位 ( 置 )出現了錯誤,從而進行更正。資料必須整體丟棄並且重新傳輸。在一個噪音較大的媒介中,成功傳輸資料可能需要很長時間或者不可能完成。雖然奇偶校驗的效果不佳,但是由於他只需要佔用一位額外的空間,因此這是開銷最小的檢測方式。並且,如果知道了發生錯誤的位 ( 置 ) ,奇偶校驗還可以恢複數據。

• 如果一條資訊中包含更多用於糾錯的位,且透過妥善安排這些糾錯位使得不同的出錯位產生不同的錯誤結果,那麼我們就可以找出出錯位了。在一個 7(or 8) 位的資訊中,單個位出錯有 7(or 8) 種可能,因此 3 個錯誤控制位就足以確定是否出錯及哪一位出錯了。

Page 5: 編碼 用於資料傳輸及壓縮

112/04/21 5

• 漢明研究了包括五取二碼在內的編碼方案,並歸納了它們的思想。

• 舉例而言﹐先決定漢明碼的長度• 公式﹕ m+r+1<=2^r• 其中﹕ m 為資料所具有的位元數﹐例如

m=8表示有 8 位元。 r 為檢查位元數 ( 漢民碼的長度 )

• 假設資料有 4 位元﹐ m=4﹐ 則(4+1)+r<=2^r r﹐ 為 3﹐ 因為 (4+1)+3<=2^3

• 假設資料有 8 位元﹐ m=8﹐ 則(8+1)+r<=2^r r﹐ 為 4﹐ 因為 (8+1)+4<=2^4

Page 6: 編碼 用於資料傳輸及壓縮

112/04/21 6

• 如何產生漢明碼 :

• 假設資料為 75( 十進制 ) 75=01001011(﹐ 二進制 ) 。

• 因為資料為 8 位元﹐所以 r=4﹐ 漢民碼分別佈置於 2^0=1 2^1=2 2^2=4 2^3=8﹐ ﹐ ﹐ 四個位置 :( 用方形表示 )

• 12 11 10 09 08 07 06 05 04 03 02 01 ( 位置 )

• 0 1 0 0 1 0 1 1

Page 7: 編碼 用於資料傳輸及壓縮

112/04/21 7

• r=4真值表 :0. 0 0 0 0 8. 1 0 0 01. 0 0 0 1 9. 1 0 0 12. 0 0 1 0 10. 1 0 1 03. 0 0 1 1 11. 1 0 1 14. 0 1 0 0 12. 1 1 0 05. 0 1 0 16. 0 1 1 07. 0 1 1 1

有 1 的位置為﹕• 2^0: 01,03,05,07,09,11• 2^1: 02,03,06,07,10,11• 2^2: 04,05,06,07,12• 2^3: 08,09,10,11,12

根據位置檢查資料編碼﹐並產生檢查碼 ( 漢明碼 )﹐ 使得 1 的個數為偶數。

Page 8: 編碼 用於資料傳輸及壓縮

112/04/21 8

有 1 的位置為﹕• 2^0: 01,03,05,07,09,11

• 2^1: 02,03,06,07,10,11

• 2^2: 04,05,06,07,12

• 2^3: 08,09,10,11,12

• 12 11 10 09 08 07 06 05 04 03 02 01 ( 位置 )

• 0 1 0 0 1 0 1 1

例如第一個漢明碼的產生是 :

,1,1,1,0,1 =0,才能讓 1 的個數為偶數 第二個漢明碼的產生是 :

,1,0,1,0,1 =1,才能讓 1 的個數為偶數依此類推﹐產生同位元檢查碼﹕ 1010傳輸資料變為 : 0 1 0 0 1 1 0 1 0 1 1 0

根據位置檢查資料編碼﹐並產生檢查碼 ( 漢明碼 )﹐ 使得 1 的個數為偶數。

Page 9: 編碼 用於資料傳輸及壓縮

112/04/21 9

• 檢查﹕假設傳輸過程有一個位元發生錯誤﹐如 :• 12 11 10 9 8 7 6 5 4 3 2 1

• 原始資料 : 0 1 0 0 1 1 0 1 0 1 1 0

• 接收資料 : 0 1 0 1 1 1 0 1 0 1 1 0• 檢查同位元 ( 如果為偶數個 1﹐ 則表示正確﹐用 0表示﹐有錯誤用 1表示 )

• 2^0: 01,03,05,07,09,11 => 0,1,1,1,1,1 => 1

• 2^1: 02,03,06,07,10,11 => 1,1,0,1,0,1 => 0

• 2^2: 04,05,06,07,12 => 0,1,0,1,0 => 0

• 2^3: 08,09,10,11,12 => 1,1,0,1,0 => 1

• 所以 1001=9表示第 9 個碼發生錯誤。

Page 10: 編碼 用於資料傳輸及壓縮

112/04/21 10

• 檢查﹕假設傳輸過程有一個位元發生錯誤﹐如 :• 12 11 10 9 8 7 6 5 4 3 2 1

• 原始資料 : 0 1 0 0 1 1 0 1 0 1 1 0

• 接收資料 : 0 1 0 0 0 1 0 1 0 1 1 0• 檢查同位元 ( 如果為偶數個 1﹐ 則表示正確﹐用 0表示﹐有錯誤用 1表示 )

• 2^0: 01,03,05,07,09,11 => 0,1,1,1,0,1 => 0

• 2^1: 02,03,06,07,10,11 => 1,1,0,1,0,1 => 0

• 2^2: 04,05,06,07,12 => 0,1,0,1,0 => 0

• 2^3: 08,09,10,11,12 => 0,0,0,1,0 => 1

• 所以 1000=8表示第 8 個碼發生錯誤。

Page 11: 編碼 用於資料傳輸及壓縮

112/04/21 11

• 檢查﹕假設傳輸過程沒有位元發生錯誤﹐如 :• 12 11 10 9 8 7 6 5 4 3 2 1

• 原始資料 : 0 1 0 0 1 1 0 1 0 1 1 0

• 接收資料 : 0 1 0 0 1 1 0 1 0 1 1 0• 檢查同位元 ( 如果為偶數個 1﹐ 則表示正確﹐用 0表示﹐有錯誤用 1表示 )

• 2^0: 01,03,05,07,09,11 => 0,1,1,1,0,1 => 0

• 2^1: 02,03,06,07,10,11 => 1,1,0,1,0,1 => 0

• 2^2: 04,05,06,07,12 => 0,1,0,1,0 => 0

• 2^3: 08,09,10,11,12 => 1,0,0,1,0 => 0

• 所以 0000=0表示沒有發生錯誤。

Page 12: 編碼 用於資料傳輸及壓縮

112/04/21 12

• 檢查﹕假設傳輸過程有 2 位元發生錯誤﹐如 :• 12 11 10 9 8 7 6 5 4 3 2 1

• 原始資料 : 0 1 0 0 1 1 0 1 0 1 1 0

• 接收資料 : 0 1 0 1 1 0 0 1 0 1 1 0• 檢查同位元 ( 如果為偶數個 1﹐ 則表示正確﹐用 0表示﹐有錯誤用 1表示 )

• 2^0: 01,03,05,07,09,11 => 0,1,1,0,1,1 => 0

• 2^1: 02,03,06,07,10,11 => 1,1,0,0,0,1 => 1

• 2^2: 04,05,06,07,12 => 0,1,0,0,0 => 1

• 2^3: 08,09,10,11,12 => 1,1,0,1,0 => 1

• 所以 1110=14表示有 1 個以上發生錯誤,但是無法更正﹐幸虧現今的技術同時發生 2 個錯誤碼機率很低。

Page 13: 編碼 用於資料傳輸及壓縮

112/04/21 13

Test it now!

• 請編 125 的漢明碼,將漢明碼插入資料碼中,並假設其中一個碼出錯,演算偵錯過程。

Page 14: 編碼 用於資料傳輸及壓縮

112/04/21 14

壓縮的編碼• 壓縮的編碼方式種類繁多,因不同的應用而有不同的選擇,

它們可分成兩大類:失真編碼和不失真編碼。• 失真編碼方式,壓縮後的影像還原回來和原始影像不同,

在一些應用裏影像變黑一點或亮一點,線條變粗一點或細一點不會影響我們對影像的認知,此時我們可以應用失真編碼來壓縮影像,因為壓縮碼的過程中,我們允許資料損失,因此可以做到較高的壓縮比 ( 原影像的資料量和壓縮影像資料量的比值 ) ,一般 10 : 1 是很容易達到的。但是某些影像,如 X 光片的影像,影像稍微有點失真往往會讓醫生做出不同的診斷,此時就不允許編碼後的影像和原影像不同,此時需利用不失真編碼壓縮影像。

Page 15: 編碼 用於資料傳輸及壓縮

112/04/21 15

• 我們將源編碼過程細分為 (1) 映射 (mapping) , (2) 量化和 (3) 編碼等三個程序。源編碼的主要目的是去掉多餘的資訊。此三程序如能完全反向回去,此種編碼即是不失真編碼,一般失真的發生都是重新量化所造成的。

映射 編碼量化輸入影像 編碼結果ix iy i'y ic

編碼的程序

Page 16: 編碼 用於資料傳輸及壓縮

112/04/21 16

基本理論消息的意義 (Information)

Page 17: 編碼 用於資料傳輸及壓縮

112/04/21 17

熵 (entropy)

Example:

假設符號源 S={s1, s2, s3, s4}

且 p1=0.5, p2=0.25, p3 = p4 = 0.125 。 以 a = 2 為基底我們可以得到熵為 H2(S) = 0.5 log22+0.25 log24

+0.125 log28+ 0.125 log28

= 0.5 + 0.5 + 0.375 + 0.375

= 1.75 資訊位元

Page 18: 編碼 用於資料傳輸及壓縮

112/04/21 18

Example:丟擲一個兩面出現機率相等的銅板。 S = {s1, s2} 且 p1=p2=0.5 。以 a = 2 為基底個別事件的資訊量 I(s1) = I(s2) = -log2(1/2)= log22=1

我們可以得到熵為 H2(S) = 0.5 log22+0.5 log22 = 1

H2(S) 的值等於 I(si) 。

Page 19: 編碼 用於資料傳輸及壓縮

112/04/21 19

編碼方式

Page 20: 編碼 用於資料傳輸及壓縮

112/04/21 20

Example:

假設符號源 S={s1, s2, s3, s4}

且 p1=0.5, p2=0.25, p3 = p4 = 0.125 。 以 a = 2 為基底我們可以得到熵為 H2(S) = 0.5 log22+0.25 log24

+0.125 log28+ 0.125 log28

= 0.5 + 0.5 + 0.375 + 0.375

= 1.75 資訊位元

假設編碼後的結果分別為 (00)2, (01)2, (10)2, (11)2

L=0.5*2+0.25*2+0.125*2+0.125*2

= 2

Redundancy=1-(1.75/2)=1/8

編碼方式

Page 21: 編碼 用於資料傳輸及壓縮

112/04/21 21

Page 22: 編碼 用於資料傳輸及壓縮

112/04/21 22

霍夫曼編碼 (Huffman Coding) 用於資料壓縮

• 霍夫曼編碼 (Huffman Coding) 是一種編碼方式,是一種用於無損數據壓縮的熵編碼(權編碼)演算法。 1952年, David A. Huffman 在麻省理工攻讀博士時所發明的,並發表於《一種構建極小多餘編碼的方法》( A Method for the Construction of Minimum-Redundancy Codes )一文。

• 在電腦資料處理中,霍夫曼編碼使用變長編碼表對源符號(如文件中的一個字母)進行編碼,其中變長編碼表是通過一種評估來源符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則使用較長的編碼,這便使編碼之後的字元串的平均長度、期望值降低,從而達到無損壓縮數據的目的。

Page 23: 編碼 用於資料傳輸及壓縮

112/04/21 23

• 例如,在英文中, e 的出現機率最高,而 z的出現機率則最低。當利用霍夫曼編碼對一篇英文進行壓縮時, e極有可能用一個位元來表示,而 z 則可能花去 25 個位元(不是 26 )。用普通的表示方法時,每個英文字母均佔用一個位元組( byte ),即 8 個位元。二者相比, e 使用了一般編碼的 1/8的長度, z 則使用了 3倍多。倘若我們能實現對於英文中各個字母出現機率的較準確的估算,就可以大幅度提高無損壓縮的比例。

Page 24: 編碼 用於資料傳輸及壓縮

112/04/21 24

• 霍夫曼樹又稱最優二叉樹,是一種帶權路徑長度最短的二叉樹。所謂樹的帶權路徑長度,就是樹中所有的葉結點的權值乘上其到根結點的路徑長度(若根結點為 0層,葉結點到根結點的路徑長度為葉結點的層數)。樹的路徑長度是從樹根到每一結點的路徑長度之和,記為WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln) ,N 個權值Wi(i=1,2,...n)構成一棵有 N 個葉結點的二叉樹,相應的葉結點的路徑長度為 Li(i=1,2,...n) 。可以證明霍夫曼樹的WPL 是最小的。

Page 25: 編碼 用於資料傳輸及壓縮

112/04/21 25

歷史• 1951年,霍夫曼和他在 MIT 信息論的同學需要選擇是完成學期報告還是期末考試。導師 Robert M. Fano給他們的學期報告的題目是,尋找最有效的二進制編碼。由於無法證明哪個已有編碼是最有效的,霍夫曼放棄對已有編碼的研究,轉向新的探索,最終發現了基於有序頻率二叉樹編碼的想法,並很快證明了這個方法是最有效的。

• 由於這個演算法,學生終於青出於藍,超過了他那曾經和信息論創立者香農共同研究過類似編碼的導師。霍夫曼使用自底向上的方法構建二叉樹,避免了次優演算法 Shannon-Fano 編碼的最大弊端──自頂向下構建樹。

Page 26: 編碼 用於資料傳輸及壓縮

112/04/21 26

this is an example of a huffman tree統計每個字母 ( 包括空白字元 ) 出現的次數,從小到大從下而上建立二元樹

字母 頻率 編碼space 7 111

a 4 010

e 4 000

f 3 1101

h 2 1010

i 2 1000

m 2 0111

n 2 0010

s 2 1011

t 2 0110

l 1 11001

o 1 00110

p 1 10011

r 1 11000

u 1 00111

x 1 10010

0 1

0 10 1

Page 27: 編碼 用於資料傳輸及壓縮

112/04/21 27

• Huffman Code 產生的方式在建立一二元樹,此二元樹的產生是一連串的排序和合併直至剩下二筆資訊機率和等於 1 ,然後再根據此二元樹找出每一原始資料的 Huffman-Code ,找法是由上而下有分枝即每分枝給 1 和 0 。

• 排序時,機率大的排在上面,如果資料的機率分配很不平均,則此二元樹也不平均,且機率大的事件因為經過的合併次數少,所以在此二元樹的上層,故碼長也較短,合併及排序的經過如圖 2 ,所得到的二元樹及編碼如圖 3 。

Page 28: 編碼 用於資料傳輸及壓縮

112/04/21 28圖 2 Huffman Code 二元樹之建立

Page 29: 編碼 用於資料傳輸及壓縮

112/04/21 29

圖 3 Huffman Code

1X

1 0

2X

1 0

3X

1 0

4X

1 0

1 0

5X

1 0

7X

1 0

8X 6X

Page 30: 編碼 用於資料傳輸及壓縮

112/04/21 30圖 4 8×8 範例影像

Page 31: 編碼 用於資料傳輸及壓縮

112/04/21 31

Page 32: 編碼 用於資料傳輸及壓縮

112/04/21 32

DPCM (Differential Pulse Code Modulation) 影像編碼

圖 7-14 DPCM 編碼結構

DPCM 為一簡單且效率高的編碼方式,故常應用到信號的資料壓縮上,如聲音和影像壓縮,主要是利用信號點和點間皆存在著多餘的資料 ( 共同的部份 ) 。DPCM 的結構如圖 7-14 ,因為相鄰點差的信號振幅通常小於個別點的振幅,因此可以較少能階量化,較少位元編碼,如我們可以二個能階量化相鄰兩點的差 (+△和-△ ) ,量化的結果可以一個位元編碼,此種編碼方式又稱為 DM (Delta Modulation) 。

量 化 編 碼

暫存器

i =d

ic

1ix

ix

ix 1ix

Page 33: 編碼 用於資料傳輸及壓縮

112/04/21 33

DPCM (Differential Pulse Code Modulation) 影像編碼 當信號變化太快,且 DPCM 量化能階太少此時編碼後的信號無法趕上原信號此種現象稱為斜率過載 (Slope Overload) ,又量化能階減少時編碼後信號每一步進的變化不會和原信號的差剛好相同此時會造成振盪現象,稱為粒化誤差 (granular noise) 我們以差調為例說明,如圖 7-15 。

圖 7-15 差調的斜率超載和粒化誤差 (1:代表+, 0:代表- )

斜率超載

粒化誤差

原信號

編碼後信號

編碼

1 01 1 1 1 11 00 0 0

Page 34: 編碼 用於資料傳輸及壓縮

112/04/21 34

圖 7-16 加入預測器的 DPCM 編碼結構圖

量 化 編 碼

預 測 器ix̂

icix

1ix

Page 35: 編碼 用於資料傳輸及壓縮

112/04/21 35

圖 7-17 DPCM 解碼結構

預 測 器 解碼器ic ix̂