实验四_香农编码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称:实验四香农编码
一、实验目的:
加深对香农公式的理解及其具体的实现过程。
二、实验内容与原理:
内容:计算二进制香农编码
三、实验步骤
1.分析香农公式的算法
2.将香农公式的流程转换为具体的代码
四、实验数据及结果分析(可附程序运行截图)
编码的结果:
平均码长和编码效率:
五、代码附录
clear;
% c = strcat(a,b)字符串连接
p=[0.25 0.25 0.2 0.15 0.1 0.05];
P=fliplr(sort(p));%按大到小排序
Pa=[0;0];
%累加和的定义----第一行为累加和,第二行为Ki %求累加和
for x=1
for y=1:1:5
%Pa(x,y)=1;
Pa(x,y+1)=P(x,y)+ Pa(x,y);
end
end
%ceil 是取向离它最近的大整数圆整
for i=2
for j=1:1:6
Pa(i,j)=ceil( -log2(P(1,j)) );
end
end
%信源熵
H=0;L=0;
for i=1:1:6
H=H-P(i)*log2(P(i));
L=L+P(i)*Pa(2,i);
end
u=H/L;
disp('平均码长:;');
disp(L);
disp('编码效率:');
disp(u);
%求各符号的编码
temp=[];%临时的编码值:1:6
for m=1:1:6
fprintf('a(%d):',m);
for n=1:1:abs(Pa(2,m))
temp(m,n)=Pa(1,m)*2;
if temp(m,n)>=1
O(m,n)=1;
Pa(1,m)=temp(m,n)-1;
else
O(m,n)=0;
Pa(1,m)=temp(m,n);
end
fprintf('%d',O(m,n));
end
fprintf('\n');
end
六、其他:实验总结、心得体会及对本实验方法、手段及过程的改进建议等。
实验起初是想把累加和及Ki和编码放在一个二维矩阵中,但具体的实现较为复杂,所以最后改为逐行存放并成功完成了实验。
此外,实验过程中也加强了对信源熵的认识,信源熵为信源各个离散消息的自信息量的数学期望(即概率加权的统计平均值)。