1 / 35

編碼 用於資料傳輸及壓縮

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

sabina
Download Presentation

編碼 用於資料傳輸及壓縮

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 編碼用於資料傳輸及壓縮 漢明碼 霍夫曼編碼

  2. 漢明碼(Hamming Code)奇偶檢驗碼 • 漢明碼(Hamming Code),奇偶檢驗碼,是在電信領域的一種線性偵錯碼,以發明者Richard Hamming的名字命名。 • 漢明碼在傳輸的訊息流中插入驗證碼,以偵測並更正單一位元錯誤。由於簡單的漢明編碼,它們被廣泛應用於內部記憶體(RAM)。其 SECDED (single error correction, double error detection) 版本另外加入一檢測位元,可以偵測兩個以下同時發生的位元錯誤,並能夠更正單一位元的錯誤。 • 當傳送端與接收端的位元樣式的漢明距離 (Hamming distance) 小於或等於1時(僅有 1 bit 發生錯誤),可實現可靠的通訊。相對的,簡單的奇偶檢驗碼除了不能糾正錯誤之外,也只能偵測出奇數個的錯誤。

  3. 在數學方面,漢明碼是一種二元線性碼。對於每一個整數m > 2,存在一個編碼,帶有m個奇偶校驗位2m − m − 1個資料位。該奇偶檢驗矩陣的漢明碼是通過列出所有欄的長度是兩兩獨立 。 • 奇偶校驗是一種添加一個奇偶位用來指示之前的資料中包含有奇數還是偶數個1的檢驗方式。 • 如果在傳輸的過程中,有奇數個位發生了改變,那麼這個錯誤將被檢測出來(注意奇偶位本身也可能改變)。一般來說,如果資料中包含有奇數個1的話,則將奇偶位設定為1;反之,如果資料中有偶數個1的話,則將奇偶位設定為0。換句話說,原始資料和奇偶位組成的新資料中,將總共包含偶數個1.

  4. 奇偶校驗並不十分可靠,如果資料中有偶數個位(置)發生變化,則奇偶位校驗仍將認為正確,因此不能檢測出錯誤。奇偶校驗並不十分可靠,如果資料中有偶數個位(置)發生變化,則奇偶位校驗仍將認為正確,因此不能檢測出錯誤。 • 即使奇偶校驗檢測出了錯誤,他也無法指出哪一位(置)出現了錯誤,從而進行更正。資料必須整體丟棄並且重新傳輸。在一個噪音較大的媒介中,成功傳輸資料可能需要很長時間或者不可能完成。雖然奇偶校驗的效果不佳,但是由於他只需要佔用一位額外的空間,因此這是開銷最小的檢測方式。並且,如果知道了發生錯誤的位(置) ,奇偶校驗還可以恢複數據。 • 如果一條資訊中包含更多用於糾錯的位,且透過妥善安排這些糾錯位使得不同的出錯位產生不同的錯誤結果,那麼我們就可以找出出錯位了。在一個7(or 8)位的資訊中,單個位出錯有7(or 8)種可能,因此3個錯誤控制位就足以確定是否出錯及哪一位出錯了。

  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

  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  

  7. r=4真值表: 0. 0 0 0 0 8. 1 0 0 0 • 0 0 0 1 9. 1 0 0 1 • 0 0 1 0 10. 1 0 1 0 • 0 0 11 11. 1 0 11 • 0 1 0 0 12. 1 1 0 0 • 0 1 0 1 • 0 11 0 • 0 111 有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的個數為偶數。

  8. 根據位置檢查資料編碼﹐並產生檢查碼(漢明碼)﹐使得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 • 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 10

  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個碼發生錯誤。

  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個碼發生錯誤。

  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表示沒有發生錯誤。

  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個錯誤碼機率很低。

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

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

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

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

  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 資訊位元

  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) 。

  19. 編碼方式

  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

  21. 霍夫曼編碼(Huffman Coding) 用於資料壓縮 • 霍夫曼編碼(Huffman Coding)是一種編碼方式,是一種用於無損數據壓縮的熵編碼(權編碼)演算法。1952年,David A. Huffman在麻省理工攻讀博士時所發明的,並發表於《一種構建極小多餘編碼的方法》(A Method for the Construction of Minimum-Redundancy Codes)一文。 • 在電腦資料處理中,霍夫曼編碼使用變長編碼表對源符號(如文件中的一個字母)進行編碼,其中變長編碼表是通過一種評估來源符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則使用較長的編碼,這便使編碼之後的字元串的平均長度、期望值降低,從而達到無損壓縮數據的目的。

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

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

  24. 歷史 • 1951年,霍夫曼和他在MIT信息論的同學需要選擇是完成學期報告還是期末考試。導師Robert M. Fano給他們的學期報告的題目是,尋找最有效的二進制編碼。由於無法證明哪個已有編碼是最有效的,霍夫曼放棄對已有編碼的研究,轉向新的探索,最終發現了基於有序頻率二叉樹編碼的想法,並很快證明了這個方法是最有效的。 • 由於這個演算法,學生終於青出於藍,超過了他那曾經和信息論創立者香農共同研究過類似編碼的導師。霍夫曼使用自底向上的方法構建二叉樹,避免了次優演算法Shannon-Fano編碼的最大弊端──自頂向下構建樹。

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

  26. Huffman Code 產生的方式在建立一二元樹,此二元樹的產生是一連串的排序和合併直至剩下二筆資訊機率和等於 1,然後再根據此二元樹找出每一原始資料的 Huffman-Code,找法是由上而下有分枝即每分枝給1和0。 • 排序時,機率大的排在上面,如果資料的機率分配很不平均,則此二元樹也不平均,且機率大的事件因為經過的合併次數少,所以在此二元樹的上層,故碼長也較短,合併及排序的經過如圖2,所得到的二元樹及編碼如圖3。

  27. 圖2 Huffman Code 二元樹之建立

  28. 圖3 Huffman Code

  29. 圖4 8×8 範例影像

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

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

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

  33. 圖7-17 DPCM 解碼結構

More Related