实验三-香农编码的MATLAB实现.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

147****4268 + 关注
实名认证
文档贡献者

认真 负责 是我的态度

1亿VIP精品文档

相关文档