




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上吉林建筑大學(xué)電氣與計(jì)算機(jī)學(xué)院信息理論與編碼課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目: 哈夫曼編碼的分析與實(shí)現(xiàn) 專業(yè)班級(jí): 電子信息工程 131 學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)教師: 設(shè)計(jì)時(shí)間: 2016.11.212016.12.2 教師評(píng)語(yǔ):成績(jī) 評(píng)閱教師 日期 專心-專注-專業(yè)第1章 概述1.1設(shè)計(jì)的作用、目的通過(guò)完成具體編碼算法的程序設(shè)計(jì)和調(diào)試工作,提高編程能力,深刻理解信源編碼、信道編譯碼的基本思想和目的,掌握編碼的基本原理與編碼過(guò)程,增強(qiáng)邏輯思維能力,培養(yǎng)和提高自學(xué)能力以及綜合運(yùn)用所學(xué)理論知識(shí)去分析解決實(shí)際問(wèn)題的能力,逐步熟悉開(kāi)展科學(xué)實(shí)踐的程序和方法。主要目的是加深對(duì)理論知識(shí)的理解
2、,掌握查閱有關(guān)資料的技能,提高實(shí)踐技能,培養(yǎng)獨(dú)立分析問(wèn)題、解決問(wèn)題及實(shí)際應(yīng)用的能力。 通過(guò)課程設(shè)計(jì)各環(huán)節(jié)的實(shí)踐,應(yīng)達(dá)到如下要求: 1理解無(wú)失真信源編碼的理論基礎(chǔ),掌握無(wú)失真信源編碼的基本方法; 2根據(jù)哈夫曼編碼算法,考慮一個(gè)有多種可能符號(hào)(各種符號(hào)發(fā)生的概率不同)的信源,得到哈夫曼編碼和碼樹(shù); 3掌握哈夫曼編碼的優(yōu)缺點(diǎn); 4通過(guò)完成具體編碼算法的程序設(shè)計(jì)和調(diào)試工作,提高編程能力,深刻理解信源編碼、信道編譯碼的基本思想和目的,掌握編碼的基本原理與編碼過(guò)程,增強(qiáng)邏輯思維能力,培養(yǎng)和提高自學(xué)能力以及綜合運(yùn)用所學(xué)理論知識(shí)去分析解決實(shí)際問(wèn)題的能力,逐步熟悉開(kāi)展科學(xué)實(shí)踐的程序和方法。1.2設(shè)計(jì)任務(wù)及要求1
3、. 理解無(wú)失真信源編碼的理論基礎(chǔ),掌握無(wú)失真信源編碼的基本方法;2. 掌握哈夫曼編碼/費(fèi)諾編碼方法的基本步驟及優(yōu)缺點(diǎn);3. 深刻理解信道編碼的基本思想與目的,理解線性分組碼的基本原理與編碼過(guò)程;4. 能夠使用MATLAB或其他語(yǔ)言進(jìn)行編程,編寫的函數(shù)要有通用性。1.3設(shè)計(jì)內(nèi)容一個(gè)有8個(gè)符號(hào)的信源X,各個(gè)符號(hào)出現(xiàn)的概率為: 進(jìn)行哈夫曼編碼,并計(jì)算平均碼長(zhǎng)、編碼效率、冗余度。第2章 哈夫曼編碼的分析與實(shí)現(xiàn)2.1哈夫曼編碼介紹及原理哈夫曼編碼(Huffman Coding)是一種熵編碼編碼壓縮方式,哈夫曼編碼是可變字長(zhǎng)編碼(VLC)的一種。哈夫曼壓縮是個(gè)無(wú)損的壓縮算法,一般用來(lái)壓縮文本和程序文件。哈
4、夫曼壓縮屬于可變代碼長(zhǎng)度算法一族。意思是不同符號(hào)(例如,文本文件中的字符)用一個(gè)特定長(zhǎng)度的位序列替代。因此,在文件中出現(xiàn)頻率高的符號(hào),使用短的位序列,而那些很少出現(xiàn)的符號(hào),則用較長(zhǎng)的位序列。 哈夫曼編碼的碼長(zhǎng)是變化的,對(duì)于出現(xiàn)頻率高的信息,編碼的長(zhǎng)度較短;而對(duì)于出現(xiàn)頻率低的信息,編碼長(zhǎng)度較長(zhǎng)。這樣,處理全部信息的總碼長(zhǎng)一定小于實(shí)際信息的符號(hào)長(zhǎng)度。下面給出具體的Huffman編碼算法。(1) 首先統(tǒng)計(jì)出每個(gè)符號(hào)出現(xiàn)的頻率,如本次課程設(shè)計(jì)x1到x7的出現(xiàn)頻率分別為0.39,0.17,0.12,0.1,0.07,0.06,0.05,0.04。(2) 從左到右把上述頻率按從小到大的順序排列。(3) 每
5、一次選出最小的兩個(gè)值,作為二叉樹(shù)的兩個(gè)葉子節(jié)點(diǎn),將和作為它們的根節(jié)點(diǎn),這兩個(gè)葉子節(jié)點(diǎn)不再參與比較,新的根節(jié)點(diǎn)參與比較。(4) 重復(fù)(3),直到最后得到和為1的根節(jié)點(diǎn)。 (5) 將形成的二叉樹(shù)的左節(jié)點(diǎn)標(biāo)0,右節(jié)點(diǎn)標(biāo)1。把從最上面的根節(jié)點(diǎn)到最下面的葉子節(jié)點(diǎn)途中遇到的0,1序列串起來(lái),就得到了各個(gè)符號(hào)的編碼。2.2 哈夫曼編碼步驟(1)將信源消息符號(hào)按其出現(xiàn)的概率大小依次排列為 (2)取兩個(gè)概率最小的字母分別分配以0和1兩個(gè)碼元,并將這兩個(gè)概率相加作為一個(gè)新字母的概率,與未分配的二進(jìn)制符號(hào)的字母重新排隊(duì) 。(3)對(duì)重排后的兩個(gè)概率小符號(hào)重復(fù)步驟(2)的過(guò)程。(4)不斷繼續(xù)上述過(guò)程,直到最后兩個(gè)符號(hào)配
6、以0和1為止。(5)從最后一級(jí)開(kāi)始,向前返回得到各個(gè)信源符號(hào)所對(duì)應(yīng)的碼元序列,即相應(yīng)的碼子。2.4 哈夫曼編碼特點(diǎn) (1)哈弗曼的編碼方法保證了概率大的符號(hào)應(yīng)對(duì)于短碼,概率小的應(yīng)對(duì)于長(zhǎng)碼,充分利用了短碼; (2)縮減信源的最后兩個(gè)碼子總是最后一位不同,從而保證了哈弗曼碼是及時(shí)碼。 (3)哈夫曼碼沒(méi)有錯(cuò)誤保護(hù)功能,在譯碼時(shí),如果碼串中沒(méi)有錯(cuò)誤,那么就能一個(gè)接一個(gè)地正確譯出代碼。但如果碼串中有錯(cuò)誤,哪怕僅是1位出現(xiàn)錯(cuò)誤,不但這個(gè)碼本身譯錯(cuò),更糟糕的是后面的數(shù)據(jù)串也會(huì)接著被譯錯(cuò),全亂了套,這種現(xiàn)象稱為錯(cuò)誤傳播(error propagation)。計(jì)算機(jī)對(duì)這種錯(cuò)誤也無(wú)能為力,說(shuō)不出錯(cuò)在哪里,更談不上
7、去糾正它; (4)哈夫曼編碼只能用整數(shù)來(lái)表示單個(gè)符號(hào)而不能用小數(shù),這很大程度上限制了壓縮效果; (5)哈夫曼所有位都是合在一起的,如果改動(dòng)其中一位就可以使其數(shù)據(jù)變得面目全非。2.5設(shè)計(jì)步驟設(shè)一個(gè)有8個(gè)符號(hào)的信源X,各個(gè)符號(hào)出現(xiàn)的概率為: 則有兩種哈夫曼編碼方法,(0,1)編碼或者(1,0)編碼。表1 哈夫曼(0,1)編碼過(guò)程框圖信源符號(hào) 概率 編碼過(guò)程碼字 碼長(zhǎng) X10.39 0.39 0.39 0.39 0.39 0.39 0.61 111 X20.17 0.17 0.17 0.19 0.25 0.36 0.390013 X30.12 0.12 0.13 0.17 0.19 0.250113
8、 X40.1 0.1 0.12 0.13 0.1700004 X50.07 0.09 0.1 0.1201004 X60.06 0.07 0.0901014 X70.05 0.06000105 X80.04000115該哈夫曼碼的平均碼長(zhǎng) 為 信源熵為編碼效率 冗余度 表2 哈夫曼(1,0)編碼過(guò)程框圖信源符號(hào) 概率 編碼過(guò)程碼字 碼長(zhǎng) X10.39 0.39 0.39 0.39 0.39 0.39 0.61 101 X20.17 0.17 0.17 0.19 0.25 0.36 0.391103 X30.12 0.12 0.13 0.17 0.19 0.251003 X40.1 0.1 0.
9、12 0.13 0.1711114 X50.07 0.09 0.1 0.1210114 X60.06 0.07 0.0910104 X70.05 0.06111015 X80.04111005信源熵為該哈夫曼碼的平均碼長(zhǎng) 為編碼效率 冗余度 通過(guò)以上的兩種不同的編碼方式進(jìn)行比較,我們發(fā)現(xiàn)其實(shí)以上兩種編碼的碼雖然不同,但是其知識(shí)將原來(lái)的1換成了0,0換成了1,他的碼長(zhǎng),編碼效率,冗余度是沒(méi)有變化的。需要注意的是,對(duì)于多進(jìn)制哈夫曼編碼,為了提高編碼效率,就要使長(zhǎng)碼的符號(hào)數(shù)量盡量少,概率盡量小,所以信源符號(hào)數(shù)最好滿足,其中r為進(jìn)制數(shù),n為縮減的次數(shù)。比如說(shuō)如果要進(jìn)行三進(jìn)制編碼,那么最好信源具有7個(gè)符
10、號(hào),第一次合并后減少2個(gè)稱為5個(gè),第二次合并后又減少2個(gè)稱為3個(gè),這樣給每一個(gè)賦予三進(jìn)制符號(hào)就沒(méi)有浪費(fèi)的了。但是如果信源只有6個(gè)符號(hào)的話,為了減少最長(zhǎng)碼的數(shù)量,那么應(yīng)該在第一次合并是添置為零的虛擬符號(hào)1個(gè),事實(shí)上只合并2個(gè)概率最小的符號(hào),后面每次合并3個(gè),就可以是的最長(zhǎng)的碼的符號(hào)數(shù)量最少,也就是長(zhǎng)碼的概率最小,從而得到最高的編碼效率。但是對(duì)于信源的某一個(gè)符號(hào)來(lái)說(shuō),有時(shí)候可能還會(huì)比定長(zhǎng)碼長(zhǎng)。例如當(dāng)信源有5個(gè)是,采用定長(zhǎng)碼方式可用3個(gè)二進(jìn)制符號(hào)組成碼字。而用變長(zhǎng)碼是有時(shí)候碼字卻長(zhǎng)達(dá)4個(gè)二進(jìn)制符號(hào)。所以編碼簡(jiǎn)單化的代價(jià)就是要有大量的儲(chǔ)存設(shè)備用來(lái)緩沖碼字長(zhǎng)度的差異,也就是碼方差小的碼質(zhì)量好的原因。設(shè)一
11、秒鐘送一個(gè)信源符號(hào),輸出碼字卻只有5個(gè)二進(jìn)制符號(hào),若希望平均每秒輸出個(gè)二進(jìn)制的信息率輸出,才能從長(zhǎng)久計(jì)算,輸出和輸入保持平衡。當(dāng)儲(chǔ)存量不夠大的時(shí)候,可能有時(shí)取空,有時(shí)溢出。例如信源連續(xù)發(fā)出短碼時(shí),就會(huì)出現(xiàn)取空,就是說(shuō)還沒(méi)有存入就要輸出。連續(xù)發(fā)出長(zhǎng)碼時(shí),就會(huì)出現(xiàn)溢出,就是說(shuō)存入太多,以致于存滿了還未取出就要再次存入。所以應(yīng)估計(jì)所需的存儲(chǔ)器容量,才能使上述現(xiàn)象發(fā)生的概率小至可以容忍。當(dāng)我們計(jì)算兩個(gè)概率之和時(shí),假設(shè)這兩種的概率之和與上方概率有相同,我們應(yīng)該把這個(gè)和概率放在其相同概率上方還是下方,我們就此進(jìn)行討論;設(shè)我們有一組概率為;0.4,0.2,0.2,0.1,0.1,則離散無(wú)記憶信源 當(dāng)概率相同
12、放在下方時(shí),哈夫曼編碼為: 表3 哈夫曼編碼方法一 信源編碼概率0.4 1.0 0.6編碼過(guò)程碼字碼長(zhǎng)X10.40.4 0.2 0.4 0.4 0.2 0.20.2002X20.2102X30.2112X40.10103X50.10113 當(dāng)概率相同放在上方時(shí),哈夫曼編碼為: 表4 哈夫曼編碼方法二信源編碼概率編碼過(guò)程碼字碼長(zhǎng)X10.4 0.4 0.4 0.6 1.0 0.2 0.4 0.4 0.2 0.2 0.2 11X20.2012X30.20002X40.100104X50.100114 則上面兩表給出的哈夫曼平均碼長(zhǎng)相等,即 =編碼效率也相同,即 = 但是兩種碼的質(zhì)量不完全相同,可用碼
13、方差來(lái)表示,即 由此可見(jiàn)放在上面的哈夫曼編碼比放在下面的哈夫曼編碼得到的碼方差要小許多,故應(yīng)該放在上面。2.6哈弗曼樹(shù)原理及過(guò)程哈夫曼樹(shù)(Huffman tree),又名最優(yōu)樹(shù),指給定n個(gè)權(quán)值作為n的葉子結(jié)點(diǎn),構(gòu)造一棵二叉樹(shù),若帶權(quán)路徑長(zhǎng)度達(dá)到最小,稱這樣的二叉樹(shù)為最優(yōu)二叉樹(shù),也稱為哈夫曼樹(shù)(Huffman tree)。哈夫曼樹(shù)是帶權(quán)路徑長(zhǎng)度最短的樹(shù),權(quán)值較大的結(jié)點(diǎn)離根較近。若將樹(shù)中結(jié)點(diǎn)賦給一個(gè)有著某種含義的數(shù)值,則這個(gè)數(shù)值稱為該結(jié)點(diǎn)的權(quán)。哈夫曼樹(shù)是一種樹(shù)形結(jié)構(gòu),用哈夫曼樹(shù)的方法解編程題的算法就叫做哈夫曼算法。樹(shù)并不是指植物,而是一種數(shù)據(jù)結(jié)構(gòu),因?yàn)槠浯娣欧绞筋H有點(diǎn)象一棵樹(shù)有樹(shù)叉因而稱為樹(shù)。 最
14、簡(jiǎn)哈夫曼樹(shù)是由德國(guó)數(shù)學(xué)家馮。哈夫曼 發(fā)現(xiàn)的,此樹(shù)的特點(diǎn)就是引出的路程最短。 哈弗曼最優(yōu)二叉樹(shù)步驟:1、初始化: 根據(jù)給定的n個(gè)權(quán)值構(gòu)成n棵二叉樹(shù)的集合,其中每棵二叉樹(shù)中只有一個(gè)帶權(quán)的根結(jié)點(diǎn),左右子樹(shù)均空。2、 找最小樹(shù):在F中選擇兩棵根結(jié)點(diǎn)權(quán)值最小的樹(shù)作為左右子樹(shù)構(gòu)造一棵新的二叉樹(shù),且至新的二叉樹(shù)的根結(jié)點(diǎn)的權(quán)值為其左右子樹(shù)上根結(jié)點(diǎn)的權(quán)值之和。3、刪除與加入:在F中刪除這兩棵樹(shù),并將新的二叉樹(shù)加入F中。4、判斷:重復(fù)前兩步(2和3),直到F中只含有一棵樹(shù)為止。該樹(shù)即為哈夫曼樹(shù)。 圖1 哈夫曼(0,1)編碼樹(shù)圖形0 X 0 111100000111 010001001101110111001110
15、11111圖2 哈夫曼(1,0)編碼樹(shù)圖形 哈夫曼樹(shù)也可以是k叉的,只是在構(gòu)造k叉哈夫曼樹(shù)時(shí)需要先進(jìn)行一些調(diào)整。構(gòu)造哈夫曼樹(shù)的思想是每次選k個(gè)權(quán)重最小的元素來(lái)合成一個(gè)新的元素,該元素權(quán)重為k個(gè)元素權(quán)重之和。但是當(dāng)k大于2時(shí),按照這個(gè)步驟做下去可能到最后剩下的元素少于k個(gè)。解決這個(gè)問(wèn)題的辦法是假設(shè)已經(jīng)有了一棵哈夫曼樹(shù)(且為一棵滿k叉樹(shù)),則可以計(jì)算出其葉節(jié)點(diǎn)數(shù)目為式子中的nk表示子節(jié)點(diǎn)數(shù)目為k的節(jié)點(diǎn)數(shù)目。于是對(duì)給定的n個(gè)權(quán)值構(gòu)造k叉哈夫曼樹(shù)時(shí),可以先考慮增加一些權(quán)值為0的葉子節(jié)點(diǎn),使得葉子節(jié)點(diǎn)總數(shù)為這種形式,然后再按照哈夫曼樹(shù)的方法進(jìn)行構(gòu)造即可。第3章 哈夫曼編碼C語(yǔ)言實(shí)現(xiàn)3.1 C語(yǔ)言編程 3
16、.1.1程序介紹本程序的編碼和運(yùn)行都是在VS2008中實(shí)現(xiàn)的, 整個(gè)程序雖然看似龐大,但編寫過(guò)程清晰,采用模塊化編寫,各個(gè)問(wèn)題逐個(gè)擊破,也方便對(duì)程序的管理和運(yùn)行。整個(gè)程序的編寫分為五大部分: main 主函數(shù), xiaoxi 子函數(shù), add 子函數(shù), coding子函數(shù), ordination 子函數(shù)。五大部分緊密相連,環(huán)環(huán)相扣,共同實(shí)現(xiàn)程序的編碼。 Main()主函數(shù)主要負(fù)責(zé)其它函數(shù)的調(diào)用和最后結(jié)果的輸出; Xiaoxi()子函數(shù)主要負(fù)責(zé)輸入需要的概率數(shù)據(jù); Add()子函數(shù)負(fù)責(zé)概率相加以便于排序; coding()子函數(shù)負(fù)責(zé)具體編碼工作。 從右往左逐列編碼,在每一列從下往上逐個(gè)編碼,與上
17、課時(shí)學(xué)習(xí)的方法稍有不同,其原理相同。ordination()子函數(shù)主要負(fù)責(zé)各個(gè)概率間以及概率和的排序。該程序的優(yōu)點(diǎn)有以下四個(gè)方面: 1、程序在剛運(yùn)行的時(shí)候需要輸入概率數(shù)據(jù),程序會(huì)啟動(dòng)蜂鳴器,提示需要輸入數(shù)據(jù);在輸入需要輸入的數(shù)據(jù)個(gè)數(shù)之后,會(huì)再次啟動(dòng)蜂鳴器提醒需要輸入概率數(shù)程序具有的提醒功能是本程序的一大特色。 2、程序在輸入完需要的數(shù)據(jù)后,會(huì)自動(dòng)排序,而不需要再去麻煩的排序。 3、程序在運(yùn)行過(guò)程中會(huì)自動(dòng)檢錯(cuò)(錯(cuò)誤報(bào)警): a、當(dāng)輸入的概率大于 1 或小于 0 的時(shí)候,系統(tǒng)會(huì)自動(dòng)提示錯(cuò)誤; b、當(dāng)輸入的概率之和大于 1 時(shí),系統(tǒng)會(huì)自動(dòng)檢錯(cuò)。 4、程序的編碼過(guò)程清晰,編碼過(guò)程中所有的概率都會(huì)在顯示
18、窗口顯示出來(lái),更清楚易懂。 5、若兩概率之和與另一概率相等,概率之和會(huì)自動(dòng)排在后面。 a、理論上講求和排序的時(shí)候是按照列的形式,但程序按照行的形式。當(dāng)然了,再完美的計(jì)劃也會(huì)有破綻,這個(gè)程序也不可避免地存在些小缺點(diǎn): b、出錯(cuò)報(bào)警時(shí)增加蜂鳴器長(zhǎng)時(shí)間工作; c、add 函數(shù)語(yǔ)句重復(fù),流程圖中已經(jīng)進(jìn)行了修改。程序使用說(shuō)明:該程序是在 VS2008 環(huán)境下編寫的,運(yùn)行也需要在 VS2008 中運(yùn)行,請(qǐng)確保你在裝載有 VS2008 環(huán)境下運(yùn)行。3.2程序流程圖以及說(shuō)明主程序N結(jié)束定義全局?jǐn)?shù)組 a, b, c ,d 定義全局變量定義變量 n, x, y, K,開(kāi)始輸出編碼過(guò)程中產(chǎn)生的新概率輸出碼字輸出平均
19、碼長(zhǎng)、信源熵,編碼效率,冗余度初始輸出提示 獲取y=xiaoxi()ordination(m,a);Y數(shù)組 a 一維,存放輸入概率數(shù)組 b,二維存放編碼過(guò)程概率 數(shù)組 c,三維,存放編碼每個(gè)位置即時(shí)編碼;數(shù)組 d,一維存放碼長(zhǎng) i 為整型變量 計(jì)數(shù)編碼次數(shù) m 為整型n, x 為控制循環(huán)整型變量, y 為檢錯(cuò)控制整型變量, K 為存放平均碼長(zhǎng)浮點(diǎn)型變量, H 為存放信源熵浮點(diǎn)型變量,三重循環(huán)初始化,使其所有值為 2顯示“請(qǐng)輸入消息個(gè)數(shù)”,響蜂鳴器調(diào)用獲取概率函數(shù),將返回值給 yY=0 存在錯(cuò)誤,結(jié)束程序調(diào)用獲取概率函數(shù),將返回值給 y說(shuō)明圖3 主程序流程圖3.3 C語(yǔ)言源程序#include#
20、include#define w 10float aw,bww=0,fw=0;int i,cwww,dw=0,m;xiaoxi()int n;float P=0;printf(n 請(qǐng)分別輸入消息概率(區(qū)間在0,1,概率之和應(yīng)為):na);for(n=0;n=1|an=0)printf(出錯(cuò),概率應(yīng)在0,1 范圍內(nèi)n);return(0);break;P+=an;if(P!=1)printf(出錯(cuò),概率和應(yīng)為1n);return(0);elsereturn(1);ordination(int f,float *e)int g,j;float k;for(g=0;gf-1;g+)for(j=g+1
21、;jf;j+)if(eg=0;i-)t=0;for(k=m-2-i;k=0;k-)if(fi=bi+1k)&(t=0)t=1;for(r=0;ci+1kr!=2;r+)cim-i-2r=ci+1kr;cim-i-1r=ci+1kr;cim-i-2r=0;cim-i-1r=1;for(j=m-i-3;j=0;j-)for(k=m-2-i;k=0;k-)if(bij=bi+1k)for(r=0;ci+1kr!=2;r+)cijr=ci+1kr;add()int j;for(i=0;im;i+)b0i=ai;for(i=1;im;i+)bim-i-1=bi-1m-i-1+bi-1m-i;fi-1=b
22、im-i-1;for(j=0;jm-i-1;j+)bij=bi-1j;ordination(m-i,bi);main()int n,x,y;float K=0,H=0;for(n=0;nw;n+)for(x=0;xw;x+)for(y=0;yw;y+)cnxy=2;printf(n 請(qǐng)輸入消息個(gè)數(shù):na);scanf(%d,&m);printf(n);y=xiaoxi();if(y=1);ordination(m,a);add();coding();printf(n 編碼過(guò)程如下:n);for(n=0;nm;n+)printf(n 第%d列:,n+1);for(x=0;xm;x+)if(bnx
23、=0)break;printf(t%5.4f,bnx);printf(n);printf(n);for(n=0;nm;n+)printf(概率為%5.4f 的符號(hào)編碼后碼字為:t,an);for(x=0;xm;x+)if(c0nx=2) break;printf(%d,c0nx);dn+;K+=an*dn;H+=(-an*log10l(an)/log10l(2);printf(t 其碼長(zhǎng)為: %dn,dn);printf(n 平均碼長(zhǎng)K=);printf(%3.2f,K);printf(n 信源熵=%3.2f,H);printf(n 編碼效率=(H/K)=%3.2f%,H*100/K);pri
24、ntf(n 冗余度=(-)=%3.2fn,1-H/K);3.4程序步驟及運(yùn)行本程序會(huì)對(duì)輸入的概率自動(dòng)檢錯(cuò),任何輸入大于 1 或小于 0 的概率,或概率之和不等于 1 ,系統(tǒng)都會(huì)提示錯(cuò)誤。 圖4 仿真糾錯(cuò)情況及結(jié)果進(jìn)行哈弗曼編碼:第一步,輸入你所需要的概率個(gè)數(shù):如你需要輸入概率 x1x8,請(qǐng)輸入8,點(diǎn)回車鍵。第二步,輸入你所需要的概率,程序會(huì)自動(dòng)排序:如輸入概率x1x8 ,分別點(diǎn)回車鍵確認(rèn),否則請(qǐng)按退格鍵。第三步,輸入完成后,按下回車鍵,程序會(huì)出現(xiàn)結(jié)果。 圖5 哈夫曼(1,0)編碼運(yùn)行結(jié)果顯示各列重新排列的概率值 圖6 哈夫曼(0,1)編碼樹(shù)運(yùn)行結(jié)果顯示各列重新排列的概率值 從運(yùn)行結(jié)果可知該結(jié)果
25、與理論一致,并且可以看出哈夫曼編碼的3個(gè)特點(diǎn): (1) 哈夫曼碼的編碼方法保證了概率大的符號(hào)對(duì)應(yīng)于短碼,概率小的符號(hào)對(duì)應(yīng)于長(zhǎng)碼。 (2) 縮減信源的最后二個(gè)碼字總是最后一位碼元不同,前面各位碼元相同(二元編碼情況),從而保證了哈夫曼是即時(shí)碼。 (3) 每次縮減信源的最長(zhǎng)兩個(gè)碼字有相同的碼長(zhǎng)。 這三個(gè)特點(diǎn)保證了所得的哈夫曼碼一定是最佳碼。因此哈夫曼是一種應(yīng)用廣泛而有效的數(shù)據(jù)壓縮技術(shù)。利用哈夫曼編碼進(jìn)行通信可以大大提高信道利用率,加快信息傳輸速度,降低傳輸成本。數(shù)據(jù)壓縮的過(guò)程稱為編碼,解壓的過(guò)程稱為譯碼。進(jìn)行信息傳遞時(shí),發(fā)送端通過(guò)一個(gè)編碼系統(tǒng)對(duì)待傳數(shù)據(jù)(明文)預(yù)先編碼,而接受端將傳來(lái)的數(shù)據(jù)(密文)
26、進(jìn)行譯碼。第4章 總結(jié)本次課程設(shè)計(jì),讓我對(duì)哈夫曼編碼以及C語(yǔ)言有了更深的理解和操作能力。開(kāi)始針對(duì)題目進(jìn)行分析,將所涉及的知識(shí)點(diǎn),及相關(guān)函數(shù)做了分析,大體能夠把握整體的設(shè)計(jì)流程及思路。再通過(guò)查閱相關(guān)資料,使自己的知識(shí)也更加豐富了,明白了哈夫曼編碼的原理以及仿真的實(shí)現(xiàn)。首先對(duì)給題目進(jìn)行了計(jì)算,進(jìn)行哈夫曼編碼,求出平均碼長(zhǎng),編碼效率,開(kāi)始時(shí)不是很順利,以前學(xué)的很多書本上的東西記得不太清楚了,經(jīng)過(guò)復(fù)習(xí)課本的內(nèi)容,掌握原理后順利求出結(jié)果。然后是利用C語(yǔ)言編寫程序,由于我現(xiàn)在正在公司實(shí)習(xí),接觸到編程的東西比較多,所以對(duì)C語(yǔ)言編程還是比較熟悉的,所以我選擇使用C語(yǔ)言來(lái)實(shí)現(xiàn)仿真,仔細(xì)研究后得到程序的算法,還有我也參考了一部分網(wǎng)上的算法,但是在運(yùn)行時(shí)還是出錯(cuò)了,之后又經(jīng)過(guò)幾次的修改,終于得出了結(jié)果,可是和自己計(jì)算的碼卻是相反的,而其它結(jié)果卻是相同,讓我疑惑了,我又仔細(xì)想了想了,原因應(yīng)該出現(xiàn)在編碼的時(shí)候,在編碼過(guò)程中如果0和1賦值
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)氣體儲(chǔ)存罐區(qū)租賃與氣體泄漏報(bào)警系統(tǒng)合同
- 存儲(chǔ)設(shè)備安全性能測(cè)試與優(yōu)化合同
- 農(nóng)產(chǎn)品品牌授權(quán)與品牌推廣服務(wù)合同
- 建筑工程管理的國(guó)際經(jīng)驗(yàn)試題及答案
- 救助技能與機(jī)制試題及答案
- 幼兒音樂(lè)啟蒙課件:鋼琴伴奏教學(xué)技法
- 宇宙的奧秘 - 課件
- 航空維修人才需求試題及答案
- 手術(shù)室護(hù)理工作-課件
- 高級(jí)會(huì)計(jì)考試備考秘訣試題及答案
- 出貨檢驗(yàn)報(bào)告
- 產(chǎn)品追溯及模擬召回演練計(jì)劃
- 舒普電子套結(jié)機(jī)的設(shè)置和保養(yǎng)
- 植物中鐵的作用及缺鐵癥狀圖文演示文稿
- 合同到期協(xié)議書(3篇)
- IPC-A-610國(guó)際標(biāo)準(zhǔn)中英文對(duì)照(doc 17)
- 山大《毛澤東思想和中國(guó)特色社會(huì)主義理論體系概論》教案第3章 社會(huì)主義改造理論
- 部編版四年級(jí)下冊(cè)語(yǔ)文全一冊(cè)期末總復(fù)習(xí)—重點(diǎn)歸納整理
- (國(guó)開(kāi))2019年春電大本科水利水電工程造價(jià)管理形考3答案
- 金普新區(qū)預(yù)防性體檢人員審核表
- 礦山地質(zhì)環(huán)境保護(hù)與治理恢復(fù)方案編制規(guī)范2011
評(píng)論
0/150
提交評(píng)論