版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 信息論與編碼課程設(shè)計報告</p><p> 設(shè)計題目: 統(tǒng)計信源熵與香農(nóng)編碼 </p><p><b> 設(shè)計任務(wù)與要求</b></p><p><b> 1、 統(tǒng)計信源熵</b></p><p> 要求:統(tǒng)計任意文本文件中各字符(區(qū)分大小寫)數(shù)量,計算字符
2、概率,并計算信源熵。</p><p><b> 2、香農(nóng)編碼</b></p><p> 要求:任意輸入消息概率,利用香農(nóng)編碼方法進(jìn)行編碼,并計算信源熵和編碼效率。</p><p><b> 設(shè)計思路</b></p><p> 本次課程設(shè)計中主要運(yùn)用C語言編程以實現(xiàn)任務(wù)要求,分析所需要的統(tǒng)計量
3、以及相關(guān)變量,依據(jù)具體公式和計算步驟編寫語句,組成完整C語言程序。運(yùn)行環(huán)境為VC++6.0。 </p><p><b> 1、統(tǒng)計信源熵 </b></p><p> 定義:信源各個離散消息的自信息量的數(shù)學(xué)期望為信源的平均信息量,一般稱為信源的信息熵,也叫信源熵或香農(nóng)熵,有時稱為無條件熵或熵函數(shù),簡稱熵,記為H(X)。 </p><p>&l
4、t;b> 計算公式:。</b></p><p> 統(tǒng)計信源熵就是對一篇英文文章,或者是輸入一段字符串,通過對其中的a,b,c,d/A,B,C,D.....(區(qū)分大小寫)和數(shù)字符號1,2,3,4…以及各個符號如:, 。 !等統(tǒng)計符號的個數(shù)N和每一個符號的數(shù)目n,有這個公式P=n/N可得每個字母的概率,最后又信源熵計算公式 ,可計算出信源熵H,所以整體步驟就是先統(tǒng)計出英文段落的總字符數(shù),或者是輸
5、入字符串的總個數(shù)。包括字母(區(qū)分大小寫)、數(shù)字、標(biāo)點等,然后再統(tǒng)計每個字符的個數(shù),即每遇到同一個字符就++1,直到算出每個字符的個數(shù),進(jìn)而算出每個字符的概率,再由信源熵計算公式計算出信源熵。</p><p><b> 2、香農(nóng)編碼: </b></p><p> 香農(nóng)編碼主要通過一系列步驟支出平均碼長與信源之間的關(guān)系,同時使平均碼長達(dá)到極限值,即選擇的每個碼字的長度
6、滿足下式:</p><p><b> 具體步驟如下: </b></p><p> 將信源消息符號按其概率從大到小排列</p><p> 確定滿足下列不等式的整數(shù)碼長Ki</p><p> 令P1=0,計算第i個消息的累加概率</p><p> 將累加概率Pi變換成二進(jìn)制數(shù),取小數(shù)點后Ki
7、位為該消息的碼字</p><p> 在香農(nóng)編碼中對于求解編碼效率主要是依靠這個公式:R=H(X)/K,其中</p><p><b> ? </b></p><p> 對于求解信源熵主要依靠公式: </p><p><b> 設(shè)計流程圖</b></p><p><
8、b> 1、統(tǒng)計信息熵</b></p><p><b> 2、香農(nóng)編碼</b></p><p><b> 程序運(yùn)行及結(jié)果</b></p><p><b> 1、統(tǒng)計信息熵</b></p><p><b> 2、香農(nóng)編碼</b>&l
9、t;/p><p><b> 心得體會</b></p><p> 這真是一次有意義的學(xué)習(xí)旅程。在設(shè)計期間,我和我的團(tuán)隊一直沉浸于探索、探討之中,各種有意思的想法層出不窮。我們總是想盡可能的把課程設(shè)計做的足夠的完美,足夠的精彩,可是同時又不得不面臨一個又一個的技術(shù)難題。有些經(jīng)過我們的努力,通過不斷地修改不斷的翻閱資料得以解決,可是仍有好多的的問題是我們苦思冥想所參索不透的
10、!真是知識用時方恨少??!</p><p> 課程設(shè)計很是考察個人能力和團(tuán)隊合作協(xié)調(diào)能力,在面對自己所不熟悉甚至不了解的問題時,是怎樣一步步的設(shè)計完成給定的任務(wù),及時有成效的解決面臨的問題的。從整體的分析設(shè)計到后面語句變量的敲定最終完成課題是對自己極其有益的鍛煉,從中收獲的不僅是知識上的,也是學(xué)習(xí)經(jīng)驗的積累和思維能力的提升,雖然一次課程設(shè)計任務(wù)不是那么繁重,可是認(rèn)真去完成其中的一個個細(xì)節(jié)也是一種難得的體驗。還有就
11、是在此過程中,經(jīng)常遇到自己不能解決的問題,就會請教其他組員,一起共同討論,直到解決,這是的我們充分認(rèn)識到了團(tuán)隊協(xié)作的重要性,也體驗到了在問題得到解決的時候所獨有的那份喜悅。也體會到了與隊友的合作更是一件快樂的事情,只有彼此都付出,彼此都努力維護(hù)才能將作品做的更加完美。</p><p> 在此次課程設(shè)計中,我們主要是做了統(tǒng)計信源熵與香農(nóng)編碼這兩個題目,初一看題目感覺應(yīng)該很簡單,但真正的去做的時候才發(fā)現(xiàn)并不是想象的
12、那么簡單,本次課設(shè)的困難主要集中在程序的編寫上。我們團(tuán)隊是基于C語言編寫的程序。C語言雖然一直都在用,可每次都感覺非常難。雖然我們的思路是正確的、明確的,可是由于變量的定義,語法的不規(guī)范,以及指針的指向錯誤等等一系列問題阻礙了我們走向勝利。不過我們是不會輕易放棄的。我們起早貪黑,熬夜到半夜一點,翻書翻了好幾本。</p><p> 我認(rèn)為本次課程設(shè)計是成功的,在這學(xué)期的課程設(shè)計中,在收獲知識的同時,還收獲了閱歷,
13、收獲了成熟,在此過程中,我們通過查找大量資料,請教學(xué)長,以及不懈的努力,不僅培養(yǎng)了獨立思考,在各種其它能力上也都有了提高。更重要的是,在課程設(shè)計上,我們學(xué)會了很多學(xué)習(xí)的方法。而這是日后最實用的,真的是受益匪淺。要面對社會的挑戰(zhàn),只有不斷的學(xué)習(xí)、實踐,再學(xué)習(xí)、再實踐</p><p><b> 參考文獻(xiàn)</b></p><p> [1]曹雪虹,張宗橙.信息論與編碼.北
14、京:清華大學(xué)出版社,2009.</p><p> [2]楊永國,張冬明.Visual C++6.0實用教程.北京:清華大學(xué)出版社,2007.</p><p> [3]賈宗璞,許合利.《C語言程序設(shè)計》人民郵電出版社.2014.</p><p><b> 附錄</b></p><p><b> 1、統(tǒng)計信
15、息熵</b></p><p> #include <stdio.h></p><p> #include <math.h></p><p> #include <stdlib.h> </p><p> #define N 1000</p><p> int m
16、ain(void)</p><p><b> { </b></p><p> char s[N],M[N]; </p><p> int i = 0,j=0,n=0,L=0; </p><p> int len, num[95] = {0}; </p><p> dou
17、ble result=0,p[95]= {0}; </p><p> FILE *f; </p><p> char temp[N]; </p><p><b> char c;</b></p><p> int sum=0;</p><p> printf("p
18、lease input an essay:\n"); </p><p><b> gets(s); </b></p><p> sum=strlen(s);</p><p> printf("%d",sum);</p><p> for(i=0; i<sum; i++)<
19、;/p><p><b> { </b></p><p> if(s[i]>=' '&&s[i]<='~')</p><p> num[s[i]-32]++;</p><p><b> }</b></p><p>
20、; printf("英文文本文件中各字符數(shù)量:\n");</p><p> for(j=0; j<95; j++)</p><p><b> { </b></p><p> M[j]=num[j]; </p><p> printf("%4c:%d\t",j+32,
21、M[j]);/*輸出格式,%4c在該字符前在空三個空格*/</p><p><b> L++; </b></p><p> if(L==15)/*輸出格式,每行十五個字符*/</p><p><b> {</b></p><p> printf("\n");
22、</p><p><b> L=0;</b></p><p><b> } </b></p><p><b> } </b></p><p> /*****計算各個字符出現(xiàn)概率****/ </p><p> printf(&quo
23、t;\n文本文件中各個字符概率:\n");</p><p> for(i=0; i<95; i++)</p><p><b> { </b></p><p> p[i]=(double)num[i]/sum; </p><p> printf(" P(%c)=%f\t",i
24、+32,p[i]);</p><p><b> n++;</b></p><p> if(n==5)/*輸出格式,每行五個字符概率*/</p><p><b> { </b></p><p> printf("\n");</p><p>
25、;<b> n=0;</b></p><p><b> }</b></p><p><b> } </b></p><p> for(i=0; i<95; i++) /*計算信源熵*/</p><p><b> { </b></p
26、><p> if (p[i]!=0) </p><p> result=result+p[i]*log(p[i])*1.433;/*信源熵,I(x)=-logp(x)*/</p><p><b> } </b></p><p> result=-result; </p><p> print
27、f("信源熵為:%f",result); </p><p> printf("\n");</p><p> return 0; </p><p><b> } </b></p><p><b> 2、香農(nóng)編碼</b></p><p
28、> #include<stdio.h> </p><p> #include<math.h> </p><p> void main() </p><p><b> { </b></p><p> int i,n, j,k; </p><p> fl
29、oat sum=0;</p><p> float b[100]={0};</p><p> float p[100]={0}; </p><p> float m,H1=0,H2=0; </p><p> float Pi[100]={0}; </p><p> int L[100]; </p
30、><p> char c[100][100]; </p><p> printf("輸入X的個數(shù) \n"); </p><p> scanf("%d",&n); </p><p> printf("\n"); </p><p> printf
31、("輸入P[i]的概率分布\n"); </p><p> for(i=0;i<n;i++) </p><p> scanf("%f",&p[i]); </p><p> for(i=0;i<n;i++) </p><p> sum=sum+p[i]; </p&g
32、t;<p> if (fabs(sum-1) > 1e-6) </p><p><b> { </b></p><p><b> sum=0;</b></p><p> printf("錯誤輸入,請重新輸入\n"); </p><p>
33、printf("輸入X的個數(shù)\n"); </p><p> scanf("%d",&n); </p><p> printf("\n"); </p><p> printf("輸入P[i]的概率分布\n"); </p><p> for
34、(i=0;i<n;i++) </p><p> scanf("%f",&p[i]); </p><p> for(i=0;i<=n;i++) </p><p> sum=sum+p[i]; </p><p><b> }</b></p><p
35、> for(j=0;j<n-1;j++) </p><p><b> { </b></p><p> for(i=0;i<n-1-j;i++) </p><p> if(p[i]<p[i+1]) </p><p><b> { </b><
36、;/p><p><b> m=p[i];</b></p><p> p[i]=p[i+1];</p><p> p[i+1]=m; </p><p><b> }</b></p><p><b> }</b></p><p>
37、; Pi[0]=0; </p><p> for(j=1;j<n+1;j++) </p><p><b> { </b></p><p> Pi[j]=Pi[j-1]+p[j-1];</p><p><b> } </b></p><p> for
38、(i=0;i<n;i++) </p><p><b> { </b></p><p> m=log(1/p[i])/log(2); </p><p><b> b[i]=m;</b></p><p> if(m==(int)m) </p><p>
39、L[i]=(int)m; </p><p><b> else </b></p><p> L[i]=(int)(m+1); </p><p><b> } </b></p><p> for(i=0;i<n;i++) </p><p><b>
40、{ </b></p><p><b> m=Pi[i]; </b></p><p> for(k=0;k<L[i];k++) </p><p><b> { </b></p><p><b> m=m*2.00;</b></p>
41、<p> if(m>=1) </p><p><b> { </b></p><p> m=m-1.00; </p><p> c[i][k]='1'; </p><p><b> } </b></p><p
42、><b> else </b></p><p> c[i][k]='0'; </p><p><b> } </b></p><p><b> }</b></p><p> printf("P[i]序列為 累加概率pi為 -logp(
43、x)為 碼長L為\t");</p><p> printf(" 碼字為\n"); </p><p> for(i=0;i<n;i++) </p><p><b> { </b></p><p> printf("%5.2f\t %5.2f\t\t %5.2
44、f\t\t%d\t",p[i],Pi[i],b[i],L[i]); </p><p> for(k=0;k<L[i];k++) </p><p> printf(" %c",c[i][k]); </p><p> printf("\n");</p><p><b> }
45、 </b></p><p> for(i=0;i<n;i++) </p><p><b> { </b></p><p> H1=H1-p[i]*log10(p[i])/log10(2); </p><p> H2=H2+p[i]*L[i]; </p><p>&l
46、t;b> }</b></p><p> printf("信息熵為:%0.3f\n",H1);</p><p> printf("平均碼長為:%0.3f\n",H2);</p><p> printf("編碼效率為:%0.3f\n",H1/H2); </p><p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息論與編碼課程設(shè)計--統(tǒng)計信源熵與哈夫曼編碼
- 信息論與編碼 信源與信息熵2
- 信息論與編碼課程設(shè)計
- 信息論與編碼課程設(shè)計
- 信息論與編碼課程設(shè)計
- 信息論與編碼課程設(shè)計
- 信息論編碼課程設(shè)計--霍夫曼碼研究與設(shè)計
- 信息論與編碼課程設(shè)計(哈夫曼編碼的分析與實現(xiàn))
- 信息論與編碼答案
- 信息論與編碼論文
- 信息論與編碼論文
- 信息論與編碼-教案
- 信息論與編碼習(xí)題(2)
- 信息論與編碼習(xí)題答案
- 信息論與糾錯編碼題庫
- 信息論與編碼實驗一
- 信息論與編碼復(fù)習(xí)總結(jié)
- 信息論與編碼b課程教學(xué)大綱
- 信息論與編碼b課程教學(xué)大綱
- 信息論與編碼b課程教學(xué)大綱
評論
0/150
提交評論