- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三-⾹农编码的MATLAB实现
信息论编码实验3~9连载,更多看专栏。
⾹农编码仿真实现
⼀、⾹农编码的原理
⾹农码严 意义上来说不是最佳码,与基于符号概率进⾏映射的哈夫曼编码不同的地⽅在于,⾹农码基于累积概率的⼆进制数进⾏编码。
编码步骤 :
1. 将概率分布列降序排序 ;
2. 求出每⼀⾏所对应的累加概率 P ;
i
3. 根据累加概率 P 计算该符号对应⾹农码的长度 L ;
i i
4. 将累加概率 P 转换成⼆进制数,取其前 L 位,即为该符号的⾹农码。
i i
对于⾹农码的评价 :
⾹农编码的效率不⾼,实⽤性不⼤,但对其他编码⽅法有很好的理论指导意义。⼀般情况下,按照⾹农编码⽅法编出来的码,其平均码长不
是最短的,即不是紧致码 (最佳码)。只有每⼀个符号的概率都是 1/2的整数倍时,编码效率才能达到最⾼。
⼆、⾹农编码实例
以后有空再补充吧~
三、程序及流程图
下⾯是代码 :
%% 实验三:⾹农编码仿真实验
clear all
clc
% ⽤户输⼊符号概率
p = input(请输⼊离散信源概率分布,例如[0.5,0.5] :\n) ;
N = len th(p) ;
L = ceil(-lo 2(p)) ;% 获得码长向量,元素表⽰每个符号所对应的码长
% 获得累加概率P及对应码字
[p_SortDescend,reflect] = sort(p,descend) ;% 将概率从⼤到⼩进⾏排序
%注 :reflect所表⽰的映射关系很重要
P = zeros(1,N) ; % 初始化累加概率
CODE = strin s(1,N) ; % 初始化对应码字(字符串形式)
for i=1:N % i表⽰排序后第⼏个符号
code = zeros(1,L(reflect(i))) ;% 初始化对应码字 (数组形式)
if i==1 % 定义第⼀个编码为0
P(1)=0;
CODE(reflect(i)) = num2str(code) ;
else
P(i) = sum(p_SortDescend(1,1:i-1)) ; % 获得累加概率
end
% 下⾯计算⾹农码 (计算累加概率的⼆进制数,并取前Li位)
p_count = P(i)*2 ; % p_count⽤于逐步的计算累加概率的⼆进制数
for m=1:L(reflect(i)) % m表⽰这个符号⾥第⼏个码字
if p_count = 1
code(m) = 1;
p_count = p_count-1;
else
code(m) = 0;
end
p_count = p_count*2 ;
end
% 将⾹农码赋值给对应的符号
CODE(reflect(i)) = num2str(code) ;
end
H = sum(-p.*lo 2(p)) ; % 计算信源信息熵
L_ave = sum(L.*p) ; % 计算平均码长
yita = H/ L_ave; % 计算编码效率
% 展⽰输出码字、平均码长和编码效率
fprintf(\n运⾏结果:\n) ;
disp([信号符号: ,num2str(1:N)]) ;
disp([对应概率: ,num2str(p)]) ;
fprintf(对应码字:) ;disp(CODE) ;
disp([平均码长:,num2str(L_ave)]) ;
disp([编码效率:,num2str(yita)]) ;
四、程序运⾏结果
下⾯假设输⼊[0.1,0.2,0.3,0.4]
五、程序 ⾃评价
怎么说呢,代码原理其实很简单,但是我⼀直对它的命令⾏窗⼝的输出耿耿于怀,这没有达到我理想的输出效果 :
1. 每⼀列对应元素都对齐 ;
2. “对应码字”的
文档评论(0)