实验三-香农编码的MATLAB实现
信息论编码实验3~9连载,更多看专栏。
香农编码仿真实现
- 一、香农编码的原理
- 二、香农编码实例
- 三、程序及流程图
- 四、程序运行结果
- 五、程序自评价
一、香农编码的原理
香农码严格意义上来说不是最佳码,与基于符号概率进行映射的哈夫曼编码不同的地方在于,香农码基于累积概率的二进制数进行编码。
编码步骤:
- 将概率分布列降序排序;
- 求出每一行所对应的累加概率 Pi ;
- 根据累加概率 Pi 计算该符号对应香农码的长度 Li ;
- 将累加概率 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]
五、程序自评价
怎么说呢,代码原理其实很简单,但是我一直对它的命令行窗口的输出耿耿于怀,这没有达到我理想的输出效果:
- 每一列对应元素都对齐;
- “对应码字”的输出不要加引号,并且可以密集排列;
- “对应码字”下面不要有换行。
经过我对disp、display、fprintf的反复试验,推测大概还是得输出到表格里,再读入才可能会达到理想效果,所以:嗯,就这样吧,挺好了,哈~
代码原创,但因为原理编写参考到了实验课的指导书,假如有什么不对的地方,侵删。
实验三-香农编码的MATLAB实现相关推荐
- 香农编码的 matlab 实现
close all;clear all;clc; % 香农编码matlab实现 p = [0.5 0.19 0.19 0.07 0.05] %输入概率 n = length(p); y = flipl ...
- 信息论与编码|香农编码的Matlab实现
1. 香农编码原理 (1)将信源消息符号按其出现的概率大小依次降序排列为: (2)对概率向上取整求整数码长K (3)为了编成唯一可译码,计算第i个消息的累加概率P (4)将累加概率转换成二进制数 (5 ...
- 香农编码用matlab实验报告,信息论与编码实验指导书
实验一 绘制二进熵函数曲线(2个学时) 一.实验目的: 1. 掌握Excel 的数据填充.公式运算和图表制作 2. 掌握Matlab 绘图函数 3. 掌握.理解熵函数表达式及其性质 二.实验要求: 1 ...
- 香农编码与Huffman编码之间的对比
目录 一.[上机目的] 二.[环境] 三.[上机原理] 四.[上机内容] 五.设计思路 5.1霍夫曼编码特点 5.2霍夫曼编码原理 5.3二进制哈夫曼编码过程 5.4计算结果 5.5霍夫曼编码的MAT ...
- 信息论与编码matlab实验报告,信息论实验报告(实验三、香农编码)
<信息论实验报告(实验三.香农编码)>由会员分享,可在线阅读,更多相关<信息论实验报告(实验三.香农编码)(3页珍藏版)>请在人人文库网上搜索. 1.学生实验报告院别电子工程学 ...
- 香农编码二叉树c语言,shannon码的编码实验总结.docx
shannon码的编码实验总结 本科生实验报告 实验课程信息理论与编码 学院名称信息科学与技术学院 专业名称 学生姓名 学生学号 指导教师 实验地点 实验成绩 二〇一六年九月----二〇一六年十一月 ...
- 天津理工大学 信息论与编码实验3 离散信源编码-香农编码
一.实验目的 离散无记忆信源是一种最简单且最重要的信源,可以用完备的离散型概率空间来描述.本实验通过对给定的信源的进行相应的编码,加深对离散无记忆信源的无失真编码的理解. 掌握香农编码原理: 二.实验 ...
- 信息论与编码-python实现三种编码(香农编码,费诺编码,赫夫曼编码)
香农编码,费诺编码,赫夫曼编码(python实现) 开始参考了网上其他人的代码,但后来都发现要么代码有错误,要么输出结果不符合自己的预期,于是就重新实现了一下,代码仍存在一些小问题,但是能够满足作业要 ...
- 计算信源熵和香农编码C语言,信息论与编码课程设计报告-统计信源熵与香农编码.pdf...
信息论与编码课程设计报告 设计题目: 统计信源熵与香农编码 专业班级 电 信 12-06 学 号 学生姓名 指导教师 教师评分 2015 年 3 月 30 日 目 录 - 0 - 一.设计任务与要求 ...
最新文章
- php mysql环境搭配_centos6.7下搭配apache php mysql环境
- mysql scott用户_在mysql中创建 oracle scott 用户的四个表及插入初始化数据
- CSS3与页面布局学习笔记(六)——CSS3新特性(阴影、动画、渐变、变形( transform)、透明、伪元素等)...
- 苹果零售店每平方英尺能创造4000美元
- 【Unity新闻】Unity发布白皮书《11种有效的玩家参与策略》
- JavaScript中的shift()、unshift()和pop()函数
- jdk版本低于1.7 waterdrop 打不开解决
- 一文搞懂CAN总线协议帧格式
- 详解ico图标制作方法
- 雪球网基于沪深300的评论爬虫
- 百度竞价托管一月多少钱
- python ocr中文训练_cnocr: cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,安装后即可直接使用...
- 特征工程 | 信息价值IV与群体稳定性PSI
- Apache服务器的安全性及实现
- mysql 顿号_mysql语法总结及例子
- 【make、makefile】
- nginx ip黑名单动态封禁
- 多线程爬虫实战--彼岸图网壁纸爬取
- C++字符串类std::string介绍
- 护卫神mysql无法启动_护卫神·故障应急排查
热门文章
- wgs84坐标格式转换度分秒_使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换...
- True or False?
- HTML中下拉框的简单介绍<Select><option>
- 在线python爬取好友qq空间_Python3.6获取QQ空间全部好友列表
- 如何防止游戏检测出模拟器_如何用手机玩PSP游戏 PPSSPP模拟器 高清PSP模拟器 最新已付费黄金版...
- 光猫tag/untag/transparent和路由器tag/untag/transparent测试
- 考华为HCIA,不知道选择什么方向?
- 磁盘、内存、闪存、缓存等物理存储介质的区别
- 0101到高低电平原理
- 推荐书单(网课)-人生/编程/Python/机器学习