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