香农费诺编码 c语言实现,信息论课程设计(香农、费诺编码)

《信息论课程设计(香农、费诺编码)》由会员分享,可在线阅读,更多相关《信息论课程设计(香农、费诺编码)(34页珍藏版)》请在人人文库网上搜索。

1、华北科技学院信息论基础课程设计指导类别:计算B092名称:李宁(200909014217)设计题目:源码编码软件设计时间为:从2012年7月4日至2012年7月8日讲师:李惠对:的评论_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 。

2、_ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _评估结果: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _。内容设计概述1前言2第一章总体设计方案31.1软件结构设计3第二章算法思想与设计52.1香农代码52.1.1香农编码思想:52.1.。

3、2香农编码算法设计:62.2 fino代码62 . 2 . 1 fino编码的思想62 . 2 . 2 fino编码算法7的设计第3章软件详细设计83.1主界面设计83.2功能设计83.2.1香农编码8的实现3.2.2芬诺编码15的实现3.2.3相关文件的链接223.2.4皮肤开关的设计23第4章软件测试264.1香农代码26的测试4.1.1软件操作和结果测试264.2芬诺准则27的测试4.2.1软件操作和结果测试274.3测试结果29第五章总结30参考文件31附加记录32设计概述早期的数据压缩源于人们对概率的理解。在对文本信息进行编码时,如果出现概率较高的字母被赋予较短的代码,而出现概率较低。

4、的字母被赋予较长的代码,则平均编码长度可以缩短很多。著名的莫尔斯电码就是一个例子。信息论之父香农曾经指出,任何信息都有冗余,冗余与信息中每个符号的出现概率(不确定性)有关。他提出的无损信源编码定理为数据压缩奠定了理论基础。数据压缩的目的是消除信息中的冗余,信息熵及相关定理通过数学手段精确地描述了信息冗余的程度。本文用香农编码和费诺编码来描述信息源的编码过程。香农编码使用用户输入的源符号和概率。通过一定的校验码确保离散信息源的正确性。例如,单个符号的概率不能大于1,概率和不能大于1,并且当源概率和不为1时不能编码。由于Shannon编码将信源概率从大到小排序,本软件也实现了这一点,输入时不需要考。

5、虑信源概率序列,软件会根据概率自动对编码进行排序。最后,结果显示在MFC列表控件上。用户可以将最终结果保存为文件。Feno编码通过输入字符串自动计算单个源符号的概率。当然,为了方便起见,这个软件还提供了打开文件来完成源输入,这样字符串可以更快地输入。在编码的时候,也是按照从大到小的概率进行排序,结果也可以保存到一个文件中。该软件友好、方便、可靠,用户可以根据自己的爱好选择不同的界面风格。主页增加了漂亮的Flash,使软件更加漂亮。它还反映了软件的功能特征。根据实验要求和日常数据压缩习惯,该软件最终实现了以下目标:1.界面设计友好美观,数据存储安全可靠。2.操作简单适用,无冗余操作。3.编码效率。

6、高,编码时间短。关键词:离散源;香农密码。Feno代码;源熵先前的评论本课程旨在使学生在学习信息论与编码及相关软件课程后,通过实际操作熟悉源代码的微机实现,培养学生独立完成相关课题或项目的分析、设计和调试的能力。本课程设计与大一C课程设计相结合,也是由MFC程序设计的。结合本学期的内容,它需要一个独立的操作界面。由于过去也有类似的练习,所以设计这门课程并不困难。在本课程设计中,强调学生自学能力和独立分析网上和图书馆各种资料的能力,以丰富知识,提高计算机实现数学公式和VC等软件的实际操作能力。通过本课程设计,学生可以进一步掌握自己已经学过的信息论和编码课程,并能最大限度地消化和整合知识。因此,本。

7、课程设计对我们来说意义重大。在本课程设计中,用VC编写了一个基于MFC接口的简单软件,以达到压缩信息源的目的。该软件应用了香农编码的相关理论,通过系统合理的编程操作,实现了方便用户的可视化窗口。通过简单的验证,确保信息源的正确性和软件的可靠性。最后,将结果保存为文档,以便于记录编码结果。通过完成具体编码算法的编程和调试,可以提高编程能力,加深对编码理论的理解。培养我们使用电脑和查阅参考资料的能力,提高我们的基本设计能力。培养理论联系实际和独立思考的能力。激发我们实际发展和创造的意识和能力。通过综合运用理论知识,培养和提高我们的自学能力和分析解决实际问题的能力。第一章总体设计方案1.1软件结构设。

8、计香农码帮助fenoencoding编码选择信源编码fenoencoding香农码编码理论菜单皮肤开关图1.1.1软件功能结构图输入源符号和概率电码长度累积概率密码子编码它检验信息平均代码长度显示结果正确的错误源熵信息率源符号概率;可能性码效率图1.1.2香农编码流程图输入字符串序列电码长度概率;可能性密码子编码它开文件字符串长度显示结果字符数源熵源符号码效率直接输入概率计算和排序出现次数平均代码长度图1.1.3芬诺编码流程图第二章算法思想与设计2.1香农编码2.1.1香农编码思想:使用离散无记忆信息源:1.根据源符号的概率从大到小排序,为方便起见,可以使2.3.确定满足以下不等式的整数,并将。

9、其作为第个码字的长度4.将二进制表示和小数位数作为码字示例:有一个单符号离散无记忆源用二进制香农编码对源代码进行编码编码过程:2.1.2香农编码算法设计:通过文本框输入源符号和相应的概率。通过冒泡法将源符号和概率按照概率由大到小进行排序,计算出累积概率,并通过数学公式计算出每个源符号的总和。最后,结果被写入列表控件,编码结果被可视化显示。2.2 fino编码2 . 2 . 1 feno编码的思想使用离散的无记忆信息源1.队列按照源符号的概率从大到小的顺序排列不妨设定2.根据概率值将按顺序排列的源符号分成两组,使两组的概率之和大致相同,并为每组分配一个二进制符号“0”和“1”。3.将每一大组源符。

10、号分成两组,以便两个被划分的组的概率之和大致相同,并将二进制符号“0”和“1”分配给每一组。4.重复,直到每个组中只剩下一个源符号。5.对应于源符号的码字是费诺码。示例:有一个单符号离散无记忆源用二进制费诺码对源代码进行编码2 . 2 . 2 fino编码算法的设计通过输入字符串或打开相关文件获取字符串,并通过字符串处理的方法计算每个字符的个数和概率。然后根据每个字符的概率用冒泡法排序。然后,用递归的思想进行费诺编码,得到每个字符的二进制码字。解决了编码后的平均码长和编码的传输效率。第三章详细的软件设计3.1主界面设计编码软件的主界面如图3.1.1所示,基本功能从菜单中选择。使用Falsh C。

11、S5软件设计一个简单的Flash,并将其插入主界面,使界面更加美观生动。图3.1.1主界面3.2功能设计3.2.1香农编码的实现香农编码是通过编辑框依次输入源符号和概率,同时完成验证工作。也就是说,单个源的符号概率不能大于1,源概率之和不能大于1,并且当概率之和不为1时不能执行编码。在正确输入源符号及其概率后,可以计算出离散源的码长、码字和其他信息。可以说,编码结果被保存为txt文本和其他文件。图3.2.1香农编码界面图3.2.2保存编码结果(1)添加信的源代码:无效CShannonCode:OnAdd()/在此添加您的控件通知处理程序代码update DATa(true);CString t。

12、empf1,tempf2/在前后添加列表控件的值浮点和=0.0,sum2=0.0,tempa1,tempa2如果(m_prob=1.0)/单个源的符号概率不能大于1消息框(“概率小于1!”、“提示”);返回;对于(int I=0;我数数;I )/计算源概率和tempf1=m_list1。GetItemText(i,1);tempa1=(浮点)(atof(temp f1);sum=sum tempa1如果(总和=1.0)/如果总和大于或等于1,则不相加消息框(源概率和等于1!无法添加!“提示”);返回;CString s1,S2;m_list1。InsertItem(r,);s1。格式(“%s”。

13、,m _ single);m_list1。SetItemText(r,0,S1);s2。格式( %.6f ,m _ prob);m_list1。SetItemText(r,1,S2);r;计数;对于(int j=0;j计数;)/计算源概率和tempf2=m_list1。GetItemText(j,1);temp a2=(float)(atof(temp F2);sum2=sum2温度2;如果(sum2 1.0)/如果相加后的概率之和大于1,则不计算最后相加的源消息框(“添加当前源后的源概率之和大于1!”、“提示”);s1。格式( %s , );m_list1。SetItemText(r-1,0。

14、,S1);s2。格式( %s , );m_list1。SetItemText(r-1,1,S2);r-;计数-;返回;m _ single=m _ prob=0.0update DATa(false);(2)算法实现代码:无效CShannonCode:Count计数()c点火,温度,s;char binN= ;单组N;/源符号数组浮动磷氮;/源概率数组int i,j,C3;浮动btemp,vtemp双c1,C2;/读取输入源符号和概率对于(I=0;我数数;i )singlei=m_list1。GetItemText(i,0);temp=m_list1。GetItemText(i,1);pi=(。

15、浮点)(atof(温度);/源符号和概率按概率排序对于(I=1;我数数;(I)对于(j=0;j计数-I;j)if(pj pj 1)ExChangeChar(single,j,j 1);(p,j,j 1);对于(I=0;我数数;(I)m_list2。插入项目(I );临时工。格式(“%s”,单I);m_list2。SetItemText(i,0,temp);/源符号临时工。格式( %.6f ,pI);m_list2。SetItemText(i,1,temp);/概率/计算累积概率;对于(I=0;我数数;(I)temp=m_list2。GetItemText(i,1);唱歌。pa=(浮动)(atof(温度);唱0。PAA=0;对于(I=0;我数数;(I)唱歌。paa=singi-1。pa singi-1。paa对于(I=0;我数数;(I)s.格式(%.6f),唱i。PAA);m_list2。SetItemText(i,2,s);/累积概率/计算码字长度;对于(I=0;我数数;(I)对于(j=0;j N。j。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值