信息论中用c语言进行算术编码,信息论与编码之算术编码
例5-10 有4个符号a,b,c,d构成简单序列S=(a,b,d,a),各符号及其对应概率如下表5-9所列。
符号
符号概率pi
符号累积概率Pj
a
0.100(1/2)
0.000
b
0.010(1/4)
0.100
c
0.001(1/8)
0.110
d
0.001(1/8)
0.111
答:算术编码的基本思想是:将输入序列的各个符号按照出现的概率映像到0~1之间数字区域内,该区域表示成可以改变精度的二进制小数,其中出现频率越低的数据利用精度越高的小数表示。算术压缩算法中两个基本的要素为源数据出现的频率以及对应的编码区间。其中,源数据出现的频率决定该算法的压缩效果,同时也决定编码过程中源数据对应的区间范围,而编码区间则决定算术压缩算法的最终输出数据。
对“a,b,d,a”进行算术编码的步骤如下:
1)初始化时,被分割范围的初始值是[0,1),即被分割范围的下限为low=0,上限为 high =1,该范围的长度为range_length=high-low =1。
2)根据算术编码的公式:C(s,r)=C(S)+A(S)Pr
A(S,r)=A(S)Pr
其中采用积累概率P(S)表示码字C(S),符号概率p(S)表示区间状态A(S)。因为是二进制符号组成的序列,所以r=0,1。
将数据带入公式求得C(a,b,d,a)编码后的码字为01011,Matlab程序具体实现过程如下所示
K=menu('choose whether you want to enter a character or a number','enter character','enter number')
if K==1;
str=input('请输入编码的字符串:');
l=0;r=1;d=1;
p=[0.5 0.25 0.125 0.125];
n=length(str);
disp('a b c d ')
disp(num2str(p))
for i=1:n
switch str(i)
case 'a'
m=1;
case 'b'
m=2;
case 'c'
m=3;
case 'd'
m=4;
otherwise
error('请不要输入其它字符!');
end
%判断字符
pl=0;pr=0;
for j=1:(m-1 )
pl=pl+p(j);
end
for j=1:m
pr=pr+p(j);
end
%概率统计
l=l+d*pl;
r=l+d*(pr-pl);
strl=strcat('输入第',int2str(i),'符号的间隔左右边界:');
disp(strl);
format long
disp(l);disp(r);
d=r-l;
end %for循环借结束
result=l
else K==2
LP1(1)=0;
p=[0.5 0.25 0.125 0.125];
for i=1:3
LP1(i+1)=LP1(i)+p(i);
end
result=input('please enter the number');
while(result<0.975 )
if (result>=0 & result<0.5)
disp('a')
elseif (result>=0.5 &result<0.75)
disp('b')
elseif (result>=0.75 &result<0.875)
disp('c')
elseif (result>=0.875 &result<0.975)
disp('d')
end
for j=1:4
if (result>=LP1(j) &result
result=(result-LP1(j))/(LP1(j+1)-LP1(j))
break;
else continue;
end
end
end %while
disp('!')
disp('解码结束')
end %if else
编码结果如下:请输入编码的字符串:'abda'
a b c d
0.5 0.25 0.125 0.125
输入第1符号的间隔左右边界:
0
0.50000000000000
输入第2符号的间隔左右边界:
0.25000000000000
0.37500000000000
输入第3符号的间隔左右边界:
0.35937500000000
0.37500000000000
输入第4符号的间隔左右边界:
0.35937500000000
0.36718750000000
result =
0.35937500000000
信息论中用c语言进行算术编码,信息论与编码之算术编码相关推荐
- 信息论与编码实验报告——MATLAB实现算术编码
一.实验内容 试用MATLAB编制算术编码算法实现程序. 二.实验过程 2.1 算术编码实现原理 算术编码的算法思想如下: (1)对一组信源符号按照符号的概率从大到小排序,将[0,1)设为当前分析区间 ...
- 信道编码Huffman编码信息论与编码
信道编码Huffman编码信息论与编码 MATLAB做的信息论与编码的实验一小部分 结果编码是数字数组,还可计算平均码长,编码效率,编码后信息传输速率 话不多说,直接代码 function [W,L, ...
- f2812的c语言与标准c语言,关于F2812中用C语言来实现中断的说明
关于F2812中用C语言来实现中断的说明 .(略).注此处用到的所有中断向量或者说是中断函数的指针均是在DSP281x_DefaultIsr.c中定义的空函数(指针):(2)用以上PIE_VECT_T ...
- huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码
艾薇巴蒂!许久不见甚是想念,想必这"涨姿势"的时刻大家已经期待许久了!今天我们要共同学习的是c语言构造哈夫曼树-哈夫曼编码 构造哈夫曼树 首先,我们需要了解哈夫曼树是什么: 相关知 ...
- linux中用c语言编写一个经纬度转换大地坐标
在Linux中用C语言编写一个经纬度转换大地坐标的程序,需要用到以下步骤: 包含相关的头文件,例如"math.h". 定义必要的常量和变量. 输入经纬度坐标. 将经纬度转换为弧度. ...
- PLC中用scl语言编写算法求解modbus crc校验码
PLC中用scl语言编写算法求解modbus crc校验码 因为不是严格的modbus协议,是用的自由口通讯,传输数据里面得加上CRC校验,所以得搞个算法根据发送不同的数据生成相应的CRC校验码. 现 ...
- c语言 字符串 url,如何对URL字符串进行百分号编码
在和web服务进行交互时,我们经常需要对URL中的特定字符和传输的表单数据进行百分号编码.例如,'&'在百分号编码时会变成'%26'.搞清楚 URL中哪部分的哪些字符应该进行百分号编码了并不是 ...
- 小学算术自动出题c语言,【小学算术随机出题器】小学算术随机出题器电脑版下载 v0.7 吾爱版-趣致软件园...
小学算术随机出题器介绍 小学算术随机出题器是一款十分好用的在线学习软件,专为每一个家长提供了全新的小学生数学出题方式,让家长在家轻松帮助自己的孩子数学成绩.小学算术随机出题器电脑版使用起来十分的简单, ...
- 贪心算法哈夫曼编码c语言,贪心算法详解:哈夫曼编码
理解贪心算法 贪心算法是一种算法思想,并不是一个具体的算法,因此我们用两个例子来理解什么样的问题适合用贪心算法解决. 例一 现在有一个能装 100g 物品的背包,和一些可拆分的物品(见表格),怎么装才 ...
最新文章
- leveldb源码分析:数据查询
- Java IO流中 File文件对象与Properties类(四)
- 【Paper】Network Dissection: Quantifying Interpretability of Deep Visual Representations跑源码遇到的问题
- 认证(登录)功能实现
- .Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法
- python定时器5秒执行一次_PLC编程之“自切断”定时器
- 【转载保存】cookie在登录时的使用
- ionic自动生成启动页和图标
- python写乘法口诀表好记方法_如何用python编写乘法口诀表
- Sqlserver数据类型精解
- Android封装支付宝支付
- 怪异,漂亮的几个数学恒等式(转)
- 兰博基尼推出全新混动超跑Revuelto
- android相机实时滤镜,android 包含美颜等40余种实时滤镜相机
- HTML + CSS + JS做一个绘画分享网站[开源项目]
- 扎心了,5年多工作经验,期望工资15k,HR只给了13k
- 复爱合缘发布《白皮书》 传统恋爱仍是主流
- Cyclecloud介绍以及使用指南
- codeblocks如何去掉后面的dos窗口
- 美赛数学模型(二)——神经网络
热门文章
- 从零开始的LC刷题(74): Reverse Vowels of a String
- 初一知识用计算机进行运算,【初一数学】必考的21个知识点!
- String类最详解(String、StringBuffer、StringBuilder、正则表达式)表格+代码让你一文读懂!!!
- 关于电容、电阻并联接地
- 生活数字化 小故事告诉你什么是大数据
- J2ee学习流程(zz)
- 如何让谷歌google、百度baidu和雅虎yahoo收录我的网站
- 国家、省、市三级联动下拉列表
- python读取word内容复制粘贴,Python读取word文本操作详解
- 解读图书管理系统为书店带来的好处