信息论编码实验3~9连载,更多看专栏。

香农编码仿真实现

  • 一、香农编码的原理
  • 二、香农编码实例
  • 三、程序及流程图
  • 四、程序运行结果
  • 五、程序自评价

一、香农编码的原理

香农码严格意义上来说不是最佳码,与基于符号概率进行映射的哈夫曼编码不同的地方在于,香农码基于累积概率的二进制数进行编码。

编码步骤:

  1. 将概率分布列降序排序;
  2. 求出每一行所对应的累加概率 Pi
  3. 根据累加概率 Pi 计算该符号对应香农码的长度 Li
  4. 将累加概率 Pi 转换成二进制数,取其前 Li 位,即为该符号的香农码。

对于香农码的评价:
香农编码的效率不高,实用性不大,但对其他编码方法有很好的理论指导意义。一般情况下,按照香农编码方法编出来的码,其平均码长不是最短的,即不是紧致码(最佳码)。只有每一个符号的概率都是1/2的整数倍时,编码效率才能达到最高。

二、香农编码实例

以后有空再补充吧~

三、程序及流程图

下面是代码:

%% 实验三:香农编码仿真实验
clear all
clc
% 用户输入符号概率
p = input('请输入离散信源概率分布,例如[0.5,0.5]:\n');
N = length(p);
L = ceil(-log2(p));% 获得码长向量,元素表示每个符号所对应的码长% 获得累加概率P及对应码字
[p_SortDescend,reflect] = sort(p,'descend');% 将概率从大到小进行排序
%注:reflect所表示的映射关系很重要
P = zeros(1,N);     % 初始化累加概率
CODE = strings(1,N); % 初始化对应码字(字符串形式)
for i=1:N           % i表示排序后第几个符号code = zeros(1,L(reflect(i)));% 初始化对应码字(数组形式)if i==1         % 定义第一个编码为0P(1)=0;CODE(reflect(i)) = num2str(code);elseP(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 >= 1code(m) = 1;p_count = p_count-1;elsecode(m) = 0;endp_count = p_count*2;end% 将香农码赋值给对应的符号CODE(reflect(i)) = num2str(code);
endH = sum(-p.*log2(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. “对应码字”的输出不要加引号,并且可以密集排列;
  3. “对应码字”下面不要有换行。

经过我对disp、display、fprintf的反复试验,推测大概还是得输出到表格里,再读入才可能会达到理想效果,所以:嗯,就这样吧,挺好了,哈~

代码原创,但因为原理编写参考到了实验课的指导书,假如有什么不对的地方,侵删。

实验三-香农编码的MATLAB实现相关推荐

  1. 香农编码的 matlab 实现

    close all;clear all;clc; % 香农编码matlab实现 p = [0.5 0.19 0.19 0.07 0.05] %输入概率 n = length(p); y = flipl ...

  2. 信息论与编码|香农编码的Matlab实现

    1. 香农编码原理 (1)将信源消息符号按其出现的概率大小依次降序排列为: (2)对概率向上取整求整数码长K (3)为了编成唯一可译码,计算第i个消息的累加概率P (4)将累加概率转换成二进制数 (5 ...

  3. 香农编码用matlab实验报告,信息论与编码实验指导书

    实验一 绘制二进熵函数曲线(2个学时) 一.实验目的: 1. 掌握Excel 的数据填充.公式运算和图表制作 2. 掌握Matlab 绘图函数 3. 掌握.理解熵函数表达式及其性质 二.实验要求: 1 ...

  4. 香农编码与Huffman编码之间的对比

    目录 一.[上机目的] 二.[环境] 三.[上机原理] 四.[上机内容] 五.设计思路 5.1霍夫曼编码特点 5.2霍夫曼编码原理 5.3二进制哈夫曼编码过程 5.4计算结果 5.5霍夫曼编码的MAT ...

  5. 信息论与编码matlab实验报告,信息论实验报告(实验三、香农编码)

    <信息论实验报告(实验三.香农编码)>由会员分享,可在线阅读,更多相关<信息论实验报告(实验三.香农编码)(3页珍藏版)>请在人人文库网上搜索. 1.学生实验报告院别电子工程学 ...

  6. 香农编码二叉树c语言,shannon码的编码实验总结.docx

    shannon码的编码实验总结 本科生实验报告 实验课程信息理论与编码 学院名称信息科学与技术学院 专业名称 学生姓名 学生学号 指导教师 实验地点 实验成绩 二〇一六年九月----二〇一六年十一月 ...

  7. 天津理工大学 信息论与编码实验3 离散信源编码-香农编码

    一.实验目的 离散无记忆信源是一种最简单且最重要的信源,可以用完备的离散型概率空间来描述.本实验通过对给定的信源的进行相应的编码,加深对离散无记忆信源的无失真编码的理解. 掌握香农编码原理: 二.实验 ...

  8. 信息论与编码-python实现三种编码(香农编码,费诺编码,赫夫曼编码)

    香农编码,费诺编码,赫夫曼编码(python实现) 开始参考了网上其他人的代码,但后来都发现要么代码有错误,要么输出结果不符合自己的预期,于是就重新实现了一下,代码仍存在一些小问题,但是能够满足作业要 ...

  9. 计算信源熵和香农编码C语言,信息论与编码课程设计报告-统计信源熵与香农编码.pdf...

    信息论与编码课程设计报告 设计题目: 统计信源熵与香农编码 专业班级 电 信 12-06 学 号 学生姓名 指导教师 教师评分 2015 年 3 月 30 日 目 录 - 0 - 一.设计任务与要求 ...

最新文章

  1. php mysql环境搭配_centos6.7下搭配apache php mysql环境
  2. mysql scott用户_在mysql中创建 oracle scott 用户的四个表及插入初始化数据
  3. CSS3与页面布局学习笔记(六)——CSS3新特性(阴影、动画、渐变、变形( transform)、透明、伪元素等)...
  4. 苹果零售店每平方英尺能创造4000美元
  5. 【Unity新闻】Unity发布白皮书《11种有效的玩家参与策略》
  6. JavaScript中的shift()、unshift()和pop()函数
  7. jdk版本低于1.7 waterdrop 打不开解决
  8. 一文搞懂CAN总线协议帧格式
  9. 详解ico图标制作方法
  10. 雪球网基于沪深300的评论爬虫
  11. 百度竞价托管一月多少钱
  12. python ocr中文训练_cnocr: cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,安装后即可直接使用...
  13. 特征工程 | 信息价值IV与群体稳定性PSI
  14. Apache服务器的安全性及实现
  15. mysql 顿号_mysql语法总结及例子
  16. 【make、makefile】
  17. nginx ip黑名单动态封禁
  18. 多线程爬虫实战--彼岸图网壁纸爬取
  19. C++字符串类std::string介绍
  20. 护卫神mysql无法启动_护卫神·故障应急排查

热门文章

  1. wgs84坐标格式转换度分秒_使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换...
  2. True or False?
  3. HTML中下拉框的简单介绍<Select><option>
  4. 在线python爬取好友qq空间_Python3.6获取QQ空间全部好友列表
  5. 如何防止游戏检测出模拟器_如何用手机玩PSP游戏 PPSSPP模拟器 高清PSP模拟器 最新已付费黄金版...
  6. 光猫tag/untag/transparent和路由器tag/untag/transparent测试
  7. 考华为HCIA,不知道选择什么方向?
  8. 磁盘、内存、闪存、缓存等物理存储介质的区别
  9. 0101到高低电平原理
  10. 推荐书单(网课)-人生/编程/Python/机器学习