實驗三 費諾編碼 一、實驗目的和任務 - 理解信源編碼的意義;
- 熟悉 MATLAB程序設計;
- 掌握費諾編碼的方法及計算機實現;
- 對給定信源進行費諾編碼,并計算編碼效率;
二、實驗原理介紹 給定某個信源符號的概率分布,通過以下的步驟進行費諾編碼 1、信源符號按概率從大到小排列; 2、將依次排列的信源符號按概率值分為兩大組,使兩個組的概率之和近似相同,并對各組賦予一個二進制碼元“0”和“1”。 3、將每一大組的信源符號再分為兩組,使劃分后的兩個組的概率之和近似相同,并對各組賦予一個二進制符號“0”和“1”。 4、如此重復,直至每個組只剩下一個信源符號為止。 5、信源符號所對應的碼字即為費諾碼。 三、實驗設備介紹 1、計算機 2、編程軟件MATLAB6.5以上 四、實驗內容和步驟 編程如下; - A=[0.4,0.3,0.1,0.09,0.07,0.04];
- A=fliplr(sort(A));%降序排列
- [m,n]=size(A);
- for i=1:n
- B(i,1)=A(i);%生成B的第1列
- end
- %生成B第2列的元素
- a=sum(B(:,1))/2;
- for k=1:n-1
- if abs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1,1))-a)
- break;
- end
- end
- for i=1:n%生成B第2列的元素
- if i<=k
- B(i,2)=0;
- else
- B(i,2)=1;
- end
- end
- %生成第一次編碼的結果
- END=B(:,2)';
- END=sym(END);
- %生成第3列及以后幾列的各元素
- j=3;
- while (j~=0)
- p=1;
- while(p<=n)
- x=B(p,j-1);
- for q=p:n
- if x==-1
- break;
- else
- if B(q,j-1)==x
- y=1;
- continue;
- else
- y=0;
- break;
- end
- end
- end
- if y==1
- q=q+1;
- end
- if q==p|q-p==1
- B(p,j)=-1;
- else
- if q-p==2
- B(p,j)=0;
- END(p)=[char(END(p)),'0'];
- B(q-1,j)=1;
- END(q-1)=[char(END(q-1)),'1'];
- else
- a=sum(B(p:q-1,1))/2;
- for k=p:q-2
- if abs(sum(B(p:k,1))-a)<=abs(sum(B(p:k+1,1))-a);
- break;
- end
- end
- for i=p:q-1
- if i<=k
- B(i,j)=0;
- END(i)=[char(END(i)),'0'];
- else
- B(i,j)=1;
- END(i)=[char(END(i)),'1'];
- end
- end
- end
- end
- p=q;
- end
- C=B(:,j);
- D=find(C==-1);
- [e,f]=size(D);
- if e==n
- j=0;
- else
- j=j+1;
- end
- end
- B
- A
- END
- for i=1:n
- [u,v]=size(char(END(i)));
- L(i)=v;
- end
- avlen=sum(L.*A)
- H=-sum(A.*log2(A))%輸出信息熵
- p=H/avlen %輸出編碼效率
復制代碼
結果如圖: 通過這次費諾碼編程的實驗,使我學到了不少實用的知識,實踐與課堂知識相結合使學習知識得以運用,知識點學的更透徹了。更重要的是,做實驗的過程,思考問題的方法,這與做其他的實驗是通用的,真正使我們受益匪淺。
完整的Word格式文檔51黑下載地址: |