实验三 费诺编码 一、实验目的和任务 - 理解信源编码的意义;
- 熟悉 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黑下载地址:
|