香农编码课程设计报告(共7页).doc

上传人:飞****2 文档编号:14321051 上传时间:2022-05-03 格式:DOC 页数:7 大小:55.50KB
返回 下载 相关 举报
香农编码课程设计报告(共7页).doc_第1页
第1页 / 共7页
香农编码课程设计报告(共7页).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《香农编码课程设计报告(共7页).doc》由会员分享,可在线阅读,更多相关《香农编码课程设计报告(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上信息论与编码课程设计实验报告课程题目: 香农编码 姓 名: 叶显权 学 号: 7 班 级: 电信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

3、(ai)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;

4、 int *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() dele

5、te 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

6、(2)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+基本知识上的巩固才能做好这次的实验。专心-专注-专业

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁