香农编码课程设计报告

上传人:大米 文档编号:563601724 上传时间:2022-12-22 格式:DOC 页数:7 大小:51.50KB
返回 下载 相关 举报
香农编码课程设计报告_第1页
第1页 / 共7页
香农编码课程设计报告_第2页
第2页 / 共7页
香农编码课程设计报告_第3页
第3页 / 共7页
香农编码课程设计报告_第4页
第4页 / 共7页
香农编码课程设计报告_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《香农编码课程设计报告》由会员分享,可在线阅读,更多相关《香农编码课程设计报告(7页珍藏版)》请在金锄头文库上搜索。

1、信息论和编码课程设计实验报告课程题目: 香农编码 姓 名: 叶显权 学 号: 311008000927 班 级: 电信10-03班 指导老师: 成凌飞 学 院:电气工程和自动化学院日 期: 2013年3月28日 一. 设计任务和要求 熟悉运用香农编码,并能通过C语言进行编程,对任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。二 . 实验原理原理:编码的目的是为了优化通信系统。香农编码属于不等长编码,通常将经常出现的消息编成短码,不常出现的消息编成长码。从而提高通信效率。香农第一定理指出了平均码长和信源之间的关系,同时也指出了可以通过编码使平均码长达到极限值,这是一个很重要的

2、极限定理。香农第一定理指出,选择每个码字的长度Ki满足下式: log2 p(xi) Ki 1log2 p(xi)就可以得到这种码。这种编码方法称为香农编码 。二进制香农码的编码步骤如下:将信源符号按概率从大到小的顺序排列, p(a1) p(a2) p(an)确定满足下列不等式的整数Ki , log2 p(ai) Ki 1log2 p(ai)令p(a1)=0,用Pi表示第i个码字的累加概率,将Pi用二进制表示,并取小数点后Ki位作为符号ai的编码三设计思路 二进制香农编码的步骤如下:(1)、将信源符号按概率从大到小的顺序排列(2)、对第j个前的概率进行累加得到pa(aj)(3)、由-logp(a

3、i)ki1-logp(ai)求得码字长度ki(4)、将pa(aj)用二进制表示,并取小数点后ki位作为符号ai的编码。四 设计流程图输入符号概率十进制小数转换成二进制输出函数求前J个的累加和求码长Ki将信源符号概率从大到小排序五. 程序及结果香农编码源程序 #include#include#include#includeclass Tpublic: T() T(); void Create(); void Coutpxj(); void Coutk(); void Coutz(); void Print();protected: int n; double *p; double *pxj; i

4、nt *k; double *mz;void T:Create() coutn; p=new doublen; cout请分别输入这n个概率:n; for(int i=0;ipi; pxj=new doublen; k=new intn; mz=new doublen; double sum=0.0; for(i=0;in;i+) sum+=pi; if(sum!=1.0) throw 1; else for(i=0;in;i+) int k=i; for(int j=i+1;jn;j+) if(pkpj) k=j; double m=pi; pi=pk; pk=m; T:T() delete

5、 p; delete pxj; delete k; delete mz;void T:Coutpxj() pxj0=0; for(int i=1;in;i+) pxji=0; for(int j=0;ji;j+) pxji+=pj; void T:Coutk() for(int i=0;i0) ki=(int)d+1; else ki=(int)d; void T:Print() coutXisetw(8)P(xi) setw(8)Pa(xj) setw(8)Ki setw(8)码字 endl; for(int i=0;in;i+) coutXi+1 setw(8)setprecision(2

6、)pi setw(8)setprecision(2)pxji setw(8)ki ; mzi=pxji; for(int j=0;j=0) cout1; mzi=2*mzi-1; else cout0; mzi=2*mzi; coutendl; double K=0.0,H=0.0,Y; for(i=0;in;i+) K+=(double)pi*ki; H+=(-1)*pi*(log10(pi)/log10(2.0); Y=H/K; cout平均码长:Kendl; cout信源熵:Hendl; cout编码效率:Yendl;void main() T t;int e; try t.Create(); t.Coutpxj(); t.Coutk(); t.Print(); catch(int e) if(e=1) cout输入错误,请重新运行;六.心得体会在本次的课程设计中,我感觉最大的难题就是对C语言编程的运用不够熟练,但是通过相应的复习,我还是收获很多,并把握住了一些基本知识点,最后经过不断尝试编写程序,还是较好的完成了本模块的设计。对于香农编码而言,主要是弄清楚各个步骤,像求码长、累加和、概率排序,每个模块建立一个函数,使得程序简单易读,自己的思路也更清晰明了。编码的原理我们都很清楚,主要就是在一些C和C+基本知识上的巩固才能做好这次的实验。 / /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号