算术编解码实验报告
一、实验目的
1.进一步学习C++语言概念和熟悉VC 编程环境。
2.学习算术编码基本流程, 学会调试算术编码程序。
3. 根据给出资料,自学自适应0 阶算术编、解码方法。
二、实验要求:
(1)实验前编写源程序、准备测试数据。
(2)在Turbo C下完成程序的编辑、编译、运行,获得程序结果。如果结果有误,应找出原因,并设法更正之。
三、实验内容
编程实现任给n个概率和为1的随机分布字符,对任意排列的字符序列进行算术编码,计算平均码长。得到编码结果并进行解码
#include<iostream.h>
#include"math.h" //定义所需要用到的变量及数组
char S[100], A[10];
float P[10],f[10],gFs;
//编码程序
void bianma(int a,int h)
{ int i,j;
float fr;
float ps=1;
float Fs=0;
float Sp[100],b[100],F[100]; //以待编码的个数和字符个数为循环周期,将待编码的字符所对应的概率存入到Fs中
for(i=0;i<h;i++)
{ for(j=0;j<a;j++)
{ if(S[i]==A[j])
{ Sp[i]=P[j];
fr=f[j];//将划分好的[0,1)区间的对应点赋值给fr
}
}
Fs=Fs+ps*fr;//从选择的子区间中继续进行下一轮的分割。不断的进行这个过程, 直到所有符号编码完毕。
ps*=Sp[i]; //求Ps
}
cout<<"Fs="<<Fs<<endl;//显示最终的算术编码
gFs=Fs;
float l=log(1/ps)/log(2);//计算算术编码的码字长度l
if(l>(int)l)l=(int)l+1;
else l=int(l); //将Fs转换成二进制的形式
int d[20];
int m=0;
while(l>m)
{ Fs=2*Fs;
if(Fs>1)
{ Fs=Fs-1;
d[m]=1;
}
else if(Fs<1)d[m]=0;
else {d[m]=1;break;
}
m++;
}
int z=m;//解决有关算术编码的进位问题,给二进制数加1
if(m>=l)
{ while(1)
{ d[m-1]=(d[m-1]+1)%2;//最后位加1
if(d[m-1]==1)break;
else m--;
}
}
cout<<"s=";
for(int e=0;e<z;e++)
cout<<d[e];
cout<<endl;
}
//解码程序
void jiema(int a,int h)
{ int i,j;
float Ft,Pt;
float Fs=0,Ps=1;
for(i=0;i<h;i++)//以编码个数和符号个数为循环周期,对其进行解码
{ for(int j=a-1;j>-1;j--)
{ Ft=Fs;
Pt=Ps;
Ft+=Pt*f[j];//对进行逆编码
Pt*=P[j];
if(gFs>=Ft)//对其进行判断,并且将值存入到数组A中
{ Fs=Ft;
Ps=Pt;
cout<<A[j];
break;
}
}
}
cout<<endl;
}
void main()
{ cout<<"输入所要编码的符号的个数,并按回车跳转:"<<endl;
int a,i,h=0;
cin>>a;
cout<<"请输入符号及其相对应的概率值,并按回车跳转:"<<endl;
for(i=0;i<a;i++)
{ char x;
float y;
cin>>x;
A[i]=x;//将字符依次存入数组A中
cin>>y;
P[i]=y;//将字符所对应的概率依次存入到数组P中
}
for(i=1;i<a;i++)
{ f[0]=0;
f[i]=f[i-1]+P[i-1];//将要编码的数据映射到一个位于[0,1)的实数区间中
}
cout<<"请输入所要编码的符号序列,并以*结尾:"<<endl;
while(1)//这个while语句的作用是将要编码的字符存入到数组S中
{ char ss;
cin>>ss;
if(ss=='*')break;//在以“*”为结尾的时候结束存储
S[h++]=ss;
}
cout<<"输入的字符经过算术编码之后为:"<<endl;
bianma(a,h);
cout<<"由上述所对应的解码为:"<<endl;
jiema(a,h);
}
四、实验数据记录及分析
实验取a、b、c、d四个字符,概率分别为0.4、0.3、0.2、0.1;对字符序列abcdadb进行算术编码。
得到编码结果为:0100010000111010
平均码长为0.266502
五、实验心得体会
通过本次试验,我进一步学习了C++语言概念和熟悉VC 编程环境。学会了算术编码基本流程, 基本能够调试算术编码程序。对信息论相关知识有了进一步的认识。
…… 此处隐藏:177字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [行业资料]创设有效语境 改善英语教学
- [行业资料]微商推广引流的44种方法
- [行业资料]医疗机构输血科血库基本标准
- [行业资料]锂离子电池项目可行性研究报告(2015年
- [行业资料]申请执行人长沙市开福区人口和计划生育
- [行业资料]倾听草木的呼吸(初中阅读)
- [行业资料]长沙新环境厂房租赁合同书
- [行业资料]2022年经济师《金融专业知识与实务(中
- [行业资料]浦东新区2009学年度第二学期期末考试七
- [行业资料]企业劳动用工协议书
- [行业资料]最新苏科版七年级数学上册第二章有理数
- [行业资料]12星座与英语词汇学习
- [行业资料]2008年高考化学科经验
- [行业资料]镇政府2015年工作总结及2016年政府工作
- [行业资料]梧州市产业园区规划及招商引资报告
- [行业资料]大体积砼承台施工作业指导书
- [行业资料]学生干部在创建和谐校园中的作1
- [行业资料]小学语文教师实习个人总结
- [行业资料]2014完美最新奖金制度
- [行业资料]2016年一建建筑实务-重要知识点地质
- 【最新】人教版小学语文三年级上册:第
- 中国中小企业年鉴(地区数据)
- 动物与人类生活的关系 ppt
- 选修3 专题3 胚胎工程知识点
- 遥感技术基础复习题
- 公司员工职业生涯规划实施方案
- 辽宁省建筑施工企业安全生产许可证管理
- 15秋福师《中外幼儿教育史》在线作业二
- 2015-2020年中国网络视频行业深度调研
- 数学八年级下华东师大版21.1算术平均数
- 苏教版一年级语文下册《小松树和大松树
- 油画论文:摄影对当下油画艺术的影响
- 西方自由主义影响下的新闻自由——从17
- 基于支持向量机的商业银行信用风险评估
- 机械设计基础复习题答案(修改)(1)
- 语文:高考作文素材:材料引用及论点论
- 月份工程进度款结算单62+56
- 2018-2023年中国互联网基金行业现状研
- 人教版 PEP 五年级下册Unit1Lesson1 th
- 2014学年第二学期四年级数学期末教学质




