資源描述:
《霍夫曼編碼(含源程序)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、多媒體技術(shù)基礎(chǔ)實(shí)驗(yàn)報告——霍夫曼編碼學(xué)院:電子工程與光電技術(shù)學(xué)院專業(yè):電子信息工程姓名:學(xué)號:任課老師:康其桔實(shí)驗(yàn)時間:一、實(shí)驗(yàn)內(nèi)容及要求1、使用Matlab編程實(shí)現(xiàn)霍夫曼編碼2、通過鍵盤輸入字符串3、在屏幕上顯示編碼結(jié)果二、實(shí)驗(yàn)原理霍夫曼編碼是霍夫曼在1952年提出和描述的“從下到上”的爛編碼方法。根據(jù)給定數(shù)據(jù)集中各元索所出現(xiàn)的頻率來壓縮數(shù)據(jù)的一種統(tǒng)計壓縮編碼方法。這些元素(如字母)出現(xiàn)的次數(shù)越多,其編碼的位數(shù)就越少。其基本步驟為:(1)將壓縮的各字符的出現(xiàn)概率按減少(或增加)的順序進(jìn)行排列。(2)將兩個最小的概率進(jìn)行組合相加得到一個新概率將這一新概率與其它概率一起繼續(xù)執(zhí)行1和2的操作直至
2、最后概率為1.0。⑶對每對組合中的概率較大者指定為1,較小者指定為0。(4)畫出由每個信源符號概率到1.0處的路徑記下路徑的1和0。⑸對每個信源符號由從右到左寫出1/0序列,對概率較高的標(biāo)1,對概率較低的標(biāo)0(或?qū)Ω怕瘦^高的標(biāo)0,對概率較低的標(biāo)1),就得到了對應(yīng)的Huffman碼。下面舉個例子來說明霍夫曼編碼的具體過程。設(shè)需要編碼的信息為:BACDEBACDEBACDEBADEBAEBABABABB,統(tǒng)計各個字符出現(xiàn)的次數(shù)分別為B(10次)、A(8次)、C(3次)、D(4次)、E(5次)。各個字符出現(xiàn)的概率為B(10/30)、A(8/30)、E(5/30).D(4/30)>C(3/30)o霍
3、夫曼編碼的過程如下:B(10/30)A(8/30)E(5/30)D(4/30)C(3/30)18/30012/3030/30B:llA:10E:00D:011C:010霍夫曼編碼后平均碼長為2x(10/30+8/30+5/30)+3x(4/30+3/30)=2.23b。而信源爛H=2.19九由此,我們可以看出,霍夫曼編碼結(jié)果已經(jīng)很接近理想信源爛。三、設(shè)計方案設(shè)計的流程圖如下:讀入字符串并去除空格統(tǒng)計字符種類及概率霍夫曼編碼霍夫曼解碼>各模塊設(shè)計(一)讀入字符串并去除空格在Matalb中使用語句inputstrin薩input('請輸入需要編碼的字符:',‘s'),輸入的字符串存入char型數(shù)
4、組inputstring中。去除空格的思想為:輸出數(shù)組inputlettersi>length(inputletters)?inputletters(i-spacermmber)=inputstring(i);輸岀的inputletters數(shù)組存儲的是輸入字符串去除空格后的字符集的ASCII值,如果需要顯示字符需要用語句:disp(char(inputletters))。這一部分代碼如下:inputstring二input('請輸入需要編碼的字符:’,‘s');%輸入字符并存儲spacenumber=O;%存儲空格數(shù)目fori=l:length(inputstring)ifabs(input
5、string(i))==32spacenumber=spacenumber+l;continueelseinputletters(i-spacenumber)=inputstring(i);endenddisp([,去除空格后字符為:’,char(inputletters)])(-)統(tǒng)計字符種類及概率統(tǒng)計字符的種類,需要去除輸入字符屮的重復(fù)字符,并存入數(shù)組letters?P,其基本流程圖如下:letters(l)=inputieIters(1)輸出矩陣letters這一部分的程序如下:letters(l)二inputletters(1);form=2:length(inputletters)
6、repeatn=0;%定義一個數(shù)記錄是否冇重復(fù)forn二1:length(letters)ifletters(n)=二inputletters(m)repeatn=rcpeatn+l;endendifrepeatn==0letters(length(letters)+1)二inputletters(m);endend概率的統(tǒng)計即是統(tǒng)ipletters中每個元索在inputletters岀現(xiàn)的次數(shù),除以總次數(shù)即可得到每個字符出現(xiàn)的概率。概率統(tǒng)計的程序如2forp二l:length(letters)repeatn=0;%計算巫復(fù)次數(shù)forq=l:lcngth(inputletters)iflet
7、ters(p)==inputletters(q)repeatn=repeatn+l;endendletterp(p)=repcatn/length(inputlcttcrs);end對得到概率letterp進(jìn)行降序排序得到huffmanprob,并使字符集與概率相對應(yīng)生成字符集huffamnletterso這一過程主要是為了方便輸出字符集的輸出。這一部分的程序如下:[huffmanprob,sortindex