信息論實(shí)驗(yàn)報告2信源編碼(共8頁)_第1頁
信息論實(shí)驗(yàn)報告2信源編碼(共8頁)_第2頁
信息論實(shí)驗(yàn)報告2信源編碼(共8頁)_第3頁
信息論實(shí)驗(yàn)報告2信源編碼(共8頁)_第4頁
信息論實(shí)驗(yàn)報告2信源編碼(共8頁)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上成績遼寧工程技術(shù)大學(xué)上機(jī)實(shí)驗(yàn)報告實(shí)驗(yàn)名稱信源編碼院系姓名實(shí)驗(yàn)?zāi)康暮喪霰敬螌?shí)驗(yàn)?zāi)康模?1、 理解并掌握香農(nóng)編碼2、 理解并掌握費(fèi)諾編碼3、 理解并掌握霍夫曼編碼實(shí)驗(yàn)準(zhǔn)備你為本次實(shí)驗(yàn)做了哪些準(zhǔn)備: 認(rèn)真閱讀信息論教材,熟悉三種編碼的原理以及相應(yīng)的MATLAB函數(shù)指令實(shí)驗(yàn)進(jìn)度本次共有 6 個練習(xí),完成 6 實(shí)驗(yàn)總結(jié)日本次實(shí)驗(yàn)的收獲、體會、經(jīng)驗(yàn)、問題和教訓(xùn):1、香農(nóng)編碼Matlab源碼function W,L,q=shannon(p) if (length(find(p<=0) =0) error('Not a prob.vector,negative comp

2、onent'); end if (abs(sum(p)-1)>10e-10) error('Not a prob.vector,component do not add up to 1'); end n=length(p); x=1:n;p,x=array(p,x);% 1)排序l=ceil(-log2(p); % 2)計算代碼組長度lP(1)=0;n=length(p);%3)計算累加概率Pfor i=2:n P(i)=P(i-1)+p(i-1); endfor i=1:n % 4)求得二進(jìn)制代碼組W for j=1:l(i) temp(i,j)=floor(P

3、(i)*2); P(i)=P(i)*2-temp(i,j); endendfor i=1:n for j=1:l(i) if (temp(i,j)=0); W(i,j)=48; else W(i,j)=49; end endendL=sum(p.*l); % 計算平均碼字長度 H=entropy(p,2); % 計算信源熵 q=H/L; % 計算編碼效率for i=1:n Bi=i; endn,m=size(W);TEMP=32*ones(n,6);W=W,TEMP;W=W'n,m=size(W);W=reshape(W,1,n*m);W=sprintf('%s', W

4、);s0='很好!輸入正確,編碼結(jié)果如下:'s1='Shannon 編碼所得碼字W:'s2='Shannon 編碼平均碼字長度L:' s3='Shannon 編碼的編碼效率q:'disp(s0);disp(s1),disp(B),disp(W);disp(s2),disp(L);disp(s3),disp(q);function H=entropy(P,r)if (length(find(P<=0)=0) % 判斷是否符合概率分布條件error('Not a prob.vector,negative componen

5、t'); end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1'); end H=(sum(-P.*log2(P)/(log2(r)+eps);2、香農(nóng)編碼數(shù)值試驗(yàn)算例單符號離散無記憶信源= p=0.25,0.25,0.2,0.15,0.1,0.05; W,L,q=shannon(p)很好!輸入正確,編碼結(jié)果如下:Shannon 編碼所得碼字W:1 2 3 4 5 600 01 100 101 1101 11110 Shannon 編碼平均碼字長度L:

6、 2.7000Shannon 編碼的編碼效率q: 0.8975W =00 01 100 101 1101 11110 L = 2.7000q = 0.89753、費(fèi)諾編碼Matlab源碼(1)編寫M文件compare.mfunctionnext_P,code_num,next_index=compare(current_P,current_index)n=length(current_P);add(1)=current_P(1);for i=2:n % 1)求概率的依次累加和add(i)=0; add(i)=add(i-1)+current_P(i); ends=add(n); % 2)求概率

7、和最接近的兩小組for i=1:n temp(i)=abs(s-2*add(i); endc,k=min(temp);if (current_index<=k) next_index=current_index; code_num=48; next_P=current_P(1:k);else next_index=current_index-k; code_num=49; next_P=current_P(k+1):n); end(2)編寫M文件fano.mfunction W,L,q=fano(P) if (length(find(P<=0) =0) error('Not

8、 a prob.vector,negative component'); end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1') end n=length(P); x=1:n;% 1)排序P,x=array(P,x);for i=1:n current_index=i;j=1;current_P=P; while 1 next_P,code_num,next_index=compare(current_P,current_index); curren

9、t_index=next_index;current_P=next_P; W(i,j)=code_num; j=j+1; if (length(current_P)=1) break; endl(i)=length(find(abs(W(i,:) =0);end % 得到各碼字的長度L=sum(P.*l); % 計算平均碼字長度H=entropy(P,2); % 計算信源熵q=H/L; % 計算編碼效率for i=1:n Bi=i; endn,m=size(W);TEMP=32*ones(n,5);W=W,TEMP;W=W'n,m=size(W);W=reshape(W,1,n*m);

10、W=sprintf('%s', W);s0='很好!輸入正確,編碼結(jié)果如下:'s1='Fano 編碼所得碼字W:'s2='Fano 編碼平均碼字長度L:'s3='Fano 編碼的編碼效率q:'disp(s0);disp(s1),disp(B),disp(W);disp(s2),disp(L);disp(s3),disp(q); function H=entropy(P,r)if (length(find(P<=0)=0) error('Not a prob.vector,negative compon

11、ent'); end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1'); end H=(sum(-P.*log2(P)/(log2(r)+eps);4、費(fèi)諾編碼數(shù)值試驗(yàn)算例單符號離散無記憶信源=P=1/4,1/4,1/8,1/8,1/16,1/16,1/16,1/16;W,L,q=fano(P)很好!輸入正確,編碼結(jié)果如下:Fano 編碼所得碼字W:1 2 3 4 5 6 7 800 01 100 101 1100 1101 1110 1111 Fan

12、o 編碼平均碼字長度L: 2.7500Fano 編碼的編碼效率q: 1.0000W =00 01 100 101 1100 1101 1110 1111 L = 2.7500q = 1.00005、霍夫曼編碼Matlab源碼(1)編寫M文件huffman.mfunction W,L,q=huffman(P) if (length(find(P<=0) =0) error('Not a prob.vector,negative component'); end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector

13、,component do not add up to 1') end n=length(P); % 計算輸入元素個數(shù)p=P; mark=zeros(n-1,n); % mark為n-1行、n列矩陣,用來記錄每行最小兩概率疊加后概率排列次序% 1) 確定概率大小值的排列,得到mark矩陣。for i=1:n-1 p,num=sort(p); mark(i,:)=num(1:n-i+1),zeros(1,i-1); p=p(1)+p(2),p(3:n),1; end % 2) 生成一個n-1行、n1(n×n)列矩陣table,每行可看做n個段,% 每段長為n,記錄一個碼字(每個

14、碼字的長度不會超過n)。 for i=1:n-1 table(i,:)=blanks(n*n); end % 3) 計算各個元素碼字,循環(huán)n-2次,決定矩陣table% 從倒數(shù)第二行開始到第一行的每段的碼字值,到編碼表格tabletable(n-1,n)='1'table(n-1,2*n)='0' for i=2:n-1 table(n-i,1:n-1)=table(n-i+1,n*(find(mark(n-i+1,:)=1). -(n-2):n*(find(mark(n-i+1,:)=1); % 按mark的記錄依次賦值 table(n-i,n)='1

15、'table(n-i,n+1:2*n-1)=table(n-i,1:n-1); table(n-i,2*n)='0' endfor j=1:i-1 table(n-i,(j+1)*n+1:(j+2)*n)=table(n-i+1,. n*(find(mark(n-i+1,:)=j+1)-1)+1:n*find(mark(n-i+1,:)=j+1); end % 4)得到編碼后的碼字for i=1:n W(i,1:n)=table(1,n*(find(mark(1,:)=i)-1)+1:find(mark(1,:)=i)*n); l(i)=length(find(abs(

16、W(i,:) =32); end L=sum(P.*l); % 計算平均碼字長度H=entropy(P,2); % 計算信源熵q=H/L; % 計算編碼效率for i=1:n Bi=i; endm,n=size(W);TEMP=blanks(m);W=W,TEMP',TEMP',TEMP'm,n=size(W);W=reshape(W',1,m*n);s0='很好!輸入正確,編碼結(jié)果如下:'s1='Huffman編碼所得碼字W:'s2='Huffman編碼平均碼字長度L:' s3='Huffman編碼的編碼

17、效率q:'disp(s0);disp(s1),disp(B),disp(W);disp(s2),disp(L);disp(s3),disp(q); function H=entropy(P,r)if (length(find(P<=0)=0) error('Not a prob.vector,negative component'); end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1'); end H=(sum(-P.*log

18、2(P)/(log2(r)+eps);(2)編寫M文件huffman_better.mfunction W,L,V,q=huffman_better(P) if (length(find(P<=0) =0) error('Not a prob.vector,negative component');end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1') end n=length(P);p=P; mark=zeros(n-1,n); t=

19、1;for i=1:n-1 p,num=sort(p); % 對輸入元素排序并紀(jì)錄 if (i=1) if (count=0) k=max(a(t,:); for s=count:-1:1 num(k-s)= num(k-s+1); end num(k)=1; end t=t+1; end mark(i,:)=num(1:n-i+1),zeros(1,i-1); p=p(1)+p(2),p(3:n),1;count=0; % 用于計數(shù) for j=2:n-i if (p(1)=p(j) % 判斷p中是否有與求和后的新項(xiàng)相等的項(xiàng) count=count+1; a(t,count)=j; end

20、endend % 2) 生成一個n-1行、n1(n×n)列矩陣table,每行可看做n個段,% 每段長為n,記錄一個碼字(每個碼字的長度不會超過n)。 for i=1:n-1 table(i,:)=blanks(n*n); end % 3) 計算各個元素碼字,循環(huán)n-2次,決定矩陣table% 從倒數(shù)第二行開始到第一行的每段的碼字值,到編碼表格tabletable(n-1,n)='1' table(n-1,2*n)='0' for i=2:n-1 table(n-i,1:n-1)=table(n-i+1,n*(find(mark(n-i+1,:)=1)

21、. -(n-2):n*(find(mark(n-i+1,:)=1); % 按mark的記錄依次賦值 table(n-i,n)='1'table(n-i,n+1:2*n-1)=table(n-i,1:n-1); table(n-i,2*n)='0' for j=1:i-1 table(n-i,(j+1)*n+1:(j+2)*n)=table(n-i+1,. n*(find(mark(n-i+1,:)=j+1)-1)+1:n*find(mark(n-i+1,:)=j+1); end end % 4)得到編碼后的碼字for i=1:n W(i,1:n)=table(1,n*(find(mark(1,:

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論