[問題] 有人huffman 編/解碼的vhdl code..嗎
有人huffman 編/解碼的vhdl code..嗎
huffman壓縮的演算法大意如下:
假設一篇文章共出現五種符號:a、b、c、d、e、f
其出現次數各為:a:23次、b:5次、c:8次、d:13次、e:103次、f:25次
原本其各為8-bit的input,如:a=>00000000、f=>00000110
需將其使用huffman演算法壓縮,過程如下:
每步驟將兩兩最小的兩個數相加,以此法建huffman tree,
一:(b+c)、d、a、f、e
   13
  /  \
b    c     d      a     f       e
(5)  (8)   (13)   (23)  (25)   (103)
二:((b+c)+d)、a、f、e
      26
     /  \
   13    d
  /  \  (13)
b    c          a     f       e
(5)  (8)        (23)  (25)   (103)
三:((b+c)+d)、(a+f)、e
      26
     /  \
   13    d         48
  /  \  (13)      /  \
b    c          a    f       e
(5)  (8)        (23) (25)   (103)
四:(((b+c)+d)+(a+f))、e
          74
        /    \
      26      48
     /  \    /  \
   13    d  a    f
  /  \ (13)(23) (25)
b    c                   e
(5)  (8)                (103)
五:((((b+c)+d)+(a+f))+e)
             177
            /   \
          74     e
        /    \  (103)
      26      48
     /  \    /  \
   13    d  a    f
  /  \ (13)(23) (25)
b    c
(5)  (8)
以root為起點,向樹葉節點前進,每向左前進值填0,向右填1
所以壓縮後的編號為:a=>010、b=>0000、c=>0001、d=>001、e=>1、f=>011
與壓縮前的8-bit明顯少很多,此為huffman大致的用意。
不需要做的太好,只要能達到要求既可,大致的設計如下:
我們只設定這huffman程式能對64種符號解碼,
所以之前先定死這64個符號給其特定的8-bit的address
a~z => 00000000~00011001
A~Z => 00011010~00110011
0~9 => 00110100~00111101
逗號   => 00111110
空白鍵 => 00111111
第一階段:存值
讀檔 ---->
將與其相對應的address給存在ROM裡面 ---->
將在ROM裡的address值一一output出來 ---->
第二階段:計算各符號出現次數
設64個變數counter計算每個符號出現的次數counter初始值為0 ---->
若該符號出現則其相對應的counter <= counter +1 ---->
當檔案內的所有符號都讀完且計算完出現的counter後將64個變數output出來 ---->
第三階段:建huffman tree
寫一個if判斷式,將值大於0的counter拿出來做sort排序大小 ---->
將每次sort完最小的前兩個值相加後存至一變數,此變數再回去和剩下的counter再sort
---->
建好後的tree找出其相對應的編碼值 ---->
第四階段:將編碼後的值output出來
將各符號編碼後的值output出來 ---->
--
※ 發信站: 批踢踢實業坊(ptt.cc) 
◆ From: 220.137.92.27
推
07/09 16:01, , 1F
07/09 16:01, 1F
推
07/09 16:01, , 2F
07/09 16:01, 2F
推
07/09 16:02, , 3F
07/09 16:02, 3F
推
07/09 16:37, , 4F
07/09 16:37, 4F
推
07/09 19:12, , 5F
07/09 19:12, 5F
推
07/09 22:46, , 6F
07/09 22:46, 6F
推
07/10 00:21, , 7F
07/10 00:21, 7F
推
07/10 03:03, , 8F
07/10 03:03, 8F
Programming 近期熱門文章
PTT數位生活區 即時熱門文章