信息论课程设计

合集下载

信息论与编码课程设计

信息论与编码课程设计

信息论与编码课程设计一、课程背景信息和通信技术的快速发展,使得我们的生活变得越来越依赖于数字信息处理。

在现代通信系统中,信息的传输、存储、处理和安全性等方面的问题得到了广泛的关注和研究。

而信息论和编码技术作为数字通信系统的基础知识和技能之一,对于了解数字通信和信息处理领域具有重要的意义。

二、课程目标本门课程旨在使学生掌握以下内容:1.熟悉信息论的基本概念和理论框架;2.理解信源编码和信道编码的基本原理和实际应用;3.掌握一些典型的编码技术,如香农编码、哈夫曼编码、CRC 等;4.能够分析和评估不同的编码方案,并设计实际的编码系统;5.熟练掌握 MATLAB 编程,通过编程实现和模拟不同的编码方案。

三、课程教学方式本门课程采用讲授理论基础、案例分析、编码设计实践、编程实现等多种教学方式相结合,注重理论与实践的结合,充分激发学生的学习兴趣和创新思维。

四、课程内容1. 信息论基础信息的概念和量化,信息的熵和条件熵,信息的熵编码和香农编码,信道容量和误差概率等内容。

2. 信源编码离散无记忆信源的编码,霍夫曼编码,自适应霍夫曼编码,算术编码等内容。

3. 信道编码编码和译码的基本概念,线性块编码,循环冗余校验码CRC,卷积码,卷积码译码等内容。

4. 码量与码率控制码率控制的概念,码率控制的基本方法,码率控制的实现等内容。

5. 信道编码的应用无线通信系统中信道编码的应用,如GSM和CDMA系统等,数字电视的信道编码等内容。

五、课程设计1. 课程设计目标本门课程设计的目标是让学生通过实际的编码设计和仿真实现对课程所学理论知识的理解和掌握,提高学生的创新能力和实际应用能力。

2. 课程设计内容1.实际编码案例的分析和评估;2.编码方案的设计和实现;3.编码方案的性能分析和比较;4.编码系统的仿真和调试。

3. 课程设计时间安排•第一周:课程设计介绍和案例选题;•第二周:方案设计和实现;•第三周:性能分析和比较;•第四周:编码系统的仿真和调试;•第五周:报告制作和展示。

信息论课程设计报告书

信息论课程设计报告书

信息论基础课程设计报告书班级: 计算331 姓名: 王宇(200909014217) 设计题目:课程设计软件设计时间: 2012.7.4 至2012.7.8指导教师:评语:_________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:_____目录华北科技学院课程设计说明书设计总说明 (1)前言 (2)第1章总体设计方案 (3)1.1 软件结构设计 (3)第2章算法思想及设计 (5)2.1香农编码 (5)2.1.1香农编码思想: (5)2.1.2香农编码算法设计: (6)2.2费诺编码 (6)2.2.1费诺编码思想 (6)2.2.2费诺编码算法设计 (7)第3章软件详细设计 (8)3.1主界面设计 (8)3.2功能设计 (8)3.2.1香农编码的实现 (8)3.2.2费诺编码的实现 (15)3.2.3有关文档的链接 (22)3.2.4皮肤切换的设计 (23)第4章软件测试 (26)4.1香农编码的测试 (26)4.1.1 软件运行及结果测试 (26)4.2费诺编码的测试 (27)4.2.1 软件运行及结果测试 (27)4.3测试结果 (29)第5章总结 (30)参考文献 (31)附录 (32)设计总说明早期的数据压缩起源于人们对概率的认识。

当对文字信息进行编码时,如果为出现概率较高的字母赋予较短的编码,为出现概率较低的字母赋予较长的编码,平均编码长度就能缩短不少。

印象中的著名的Morse电码就是一个范例。

信息论之父C.E.Shannon曾指出,任何信息都存在冗余,冗余大小与信息中每个符号的出现概率(不确定性)有关。

信息理论基础第三版教学设计

信息理论基础第三版教学设计

信息理论基础第三版教学设计
一、教学目标
本教学设计旨在通过教学,使得学生了解信息理论的基本概念,对信息量、熵、信源编码、信道编码等概念有深入的认识,并且能够应用到实际问题中,还要提高学生的分析问题和解决问题的能力。

二、教学内容与方法
2.1 课程模块设计
本课程分为四个模块,分别是:
•信息论基础
•信息量和熵
•信源编码和信道编码
•应用案例分析
2.2 教学方法与策略
•理论知识讲解:采用板书和PPT形式,详细讲解各个概念和定理的含义,同时给出简单的数学公式。

•课堂探讨:引导学生讨论和分析课程内容相关的实际问题。

•实例演练:给学生提供一些实例,让他们应用所学知识进行问题分析和解决,同时让学生发挥创新能力,探索问题的多种解决方案。

三、教学评价
3.1 评价方式
•学生课堂发言的质量和数量
•期末试卷的成绩
•学生的作业质量
3.2 评价标准
•学生课堂发言的质量和数量:能够准确表述自己的观点,对问题有深刻的理解和认识,能够与其他学生进行讨论和交流。

•期末试卷的成绩:能够准确理解概念,运用所学知识进行问题分析和解决。

•学生的作业质量:能够独立完成作业,从而展示出对所学知识的理解和应用能力。

四、总结
通过本次教学,学生们对信息理论的基本概念、信息量、熵、信源编码和信道编码等方面有了更深的认识。

通过实例演练的过程,学生也能够应用所学知识进行问题分析和解决,同时提高了他们的信息分析和解决问题的能力。

注:本文档仅为示范文档,如有不妥之处,敬请谅解。

信息论基础理论与应用第四版课程设计

信息论基础理论与应用第四版课程设计

信息论基础理论与应用第四版课程设计1. 课程概述本课程旨在让学生掌握信息论的基本理论以及其应用,包括信息量、信源、信道、编码、解码、信道容量等概念的介绍。

通过学习本课程,学生将会了解信息论的基本原理,能够设计高效的信道编码方案,提高信息通信的效率。

2. 教学目标2.1 基本目标1.掌握信息论的基本概念和原理;2.能够设计高效的信道编码方案;3.能够应用信息论知识解决信息通信问题。

2.2 进阶目标1.理解信息论的发展历程和未来发展方向;2.掌握信息隐藏和隐私保护在信息论中的应用。

3. 教学内容3.1 信息论基础理论1.信息量的概念和单位;2.信源的度量和熵;3.信道模型和条件熵;4.信息瓶颈定理和链路容量。

3.2 信道编码与解码1.几种常见的信道编码方式;2.译码器的设计方法;3.Viterbi算法;4.分组密码和流密码。

3.3 信息隐藏和隐私保护1.隐写术的基本原理;2.水印技术的应用;3.隐私保护和差分隐私。

4. 教学方法1.理论授课:讲解信息论基础概念和原理;2.经典案例分析:分析信息论在通信系统中的应用;3.基于MATLAB的仿真实验:自行实现各种信道编码解码方法并进行仿真实验;4.开放问题研究:学生独立挖掘某一方面的信息论应用并撰写小论文。

5. 考核方式1.平时成绩(30%):包括小组讨论和课堂表现;2.作业成绩(30%):包括程序设计和实验报告;3.考试成绩(40%):闭卷考试。

6. 参考教材1.Thomas M.Cover, Joy A.Thomas, 《Elements of InformationTheory》(第2版), Wiley, 2006.;2.李舟, 卑瑞生, 《数字通信的基础与前沿》(第2版), 电子工业出版社, 2015.;3.张颂葆, 丘广香, 《信息论基础与应用》(第4版), 高等教育出版社, 2020.。

7. 实验设备1.MATLAB 2019b;2.密码本模块。

信息论--基础理论与应用课程设计

信息论--基础理论与应用课程设计

信息论–基础理论与应用课程设计一、前言信息论是一门研究信息量、信息传输、信息压缩、误差控制等问题的学科,它在计算机科学、通信工程、数据处理等领域都有广泛应用。

在这门课程中,我们将会学习信息论的基础理论以及其在实际应用中的重要性。

二、课程设计2.1 课程目标本课程主要的目标是掌握信息论中的基础理论,包括信息熵、香农编码、汉明编码、布尔-哈夫曼编码等,以及它们在实际应用中的具体实现。

同时,我们还将学习到纠错编码、压缩技术、密码编码等方面的内容,以了解信息论在通信、数据处理、加密等领域中的具体应用。

2.2 课程大纲本课程的大纲如下:第一章:概述介绍信息论的基本概念、基本方法、基本技术以及其在实际应用中的重要性。

第二章:信息熵介绍信息熵的概念、定义、计算方法以及其在信息论中的作用,包括熵的性质、最大熵原理、条件熵等。

第三章:编码理论介绍编码理论中的基本概念,如符号、码字、编码方式等,以及香农编码、汉明编码、布尔-哈夫曼编码等常见编码方法。

第四章:通信理论介绍通信理论中的基本概念,如信息传输、信道、信噪比等,以及应用于通信理论的一些基本技术,如调制技术、多路复用技术、误差控制技术等。

第五章:数据压缩介绍数据压缩的基本概念,包括无损压缩和有损压缩,以及一些常见的压缩算法,如LZW算法、哈夫曼算法等。

第六章:纠错码介绍纠错码的概念、种类、构造以及在实际应用中的具体实现,以了解在通信、数据处理等领域中的具体应用。

第七章:密码编码介绍密码编码的基本概念,包括对称加密和非对称加密等,以便理解在加密通信方面中的具体应用。

2.3 课程教材《信息论基础与应用(第二版)》颜宏源、李健等编著。

2.4 课程考核本课程的考核方式包括平时课堂表现、作业以及期末考试,其中作业占30%,期末考试占50%,平时表现占20%。

三、结语通过这门课程的学习,我们可以深入了解信息理论的基础理论以及其在实际应用中的具体实现。

这对于我们在计算机科学、通信工程、数据处理等领域中的工作都是有很大帮助的。

信息论课程设计报告

信息论课程设计报告

成绩:2016-2017学年第1学期《信息论》课程设计学院名称:班级学号:学生:教师:2016年12 月一、判定唯一可译码1. 任务说明输入:任意的一个码(即已知码字个数及每个具体的码字) 输出:判决结果(是/不是)输入文件:in1.txt ,含至少2组码,每组的结尾为”$”符 输出文件:out1.txt ,对每组码的判断结果说明:为了简化设计,可以假定码字为0,1串2. 实现原理判断方法:将码C 中所有码字可能的尾随后缀组成一个集合F ,当且仅当集合F 中没有 包含任一码字,则可判断此码C 为唯一可译变长码。

构成集合F :首先观察码C 中最短的码字是否是其他码字的前缀。

若是,将其所有可能 的尾随后缀排列出。

就是将其他码字序列中截去与其最短码字相同的前缀 部分,将余下的序列为尾随后缀。

而这些尾随后缀又可能是某些码字的前 缀,或者最短码字又仍是这些尾随后缀的前缀,再将由这些尾随后缀产生 的新的尾随后缀列出。

然后再观察这些新的尾随后缀是否是某些码字的前 缀,或观察有否其他码字是这些新的尾随后缀的前缀,再将产生的尾随后 缀列出,依次下去,直至没有一个尾随后缀是码字的前缀或没有新的尾随 后缀产生为止。

这样,首先获得的是由最短码字能引起的所有尾随后缀。

接着,按照上述步骤将次短的码字、......所有码字可能产生的尾随后缀前部列出。

由此得到由码C 的所有可能的尾随后缀组成的集合F 。

参考算法伪代码:For all ,i j W W C ∈ doif i W 是j W 的前缀 then将相应的后缀作为一个尾随后缀放入集合0F 中 End if End forLoopFor all i W C ∈ doFor all j n W F ∈ doif i W 是j W 的前缀 then将相应的后缀作为一个尾随后缀放入集合1n F +中 Else if j W 是i W 的前缀 then将相应的后缀作为一个尾随后缀放入集合1n F +中End if End for End for i i F F ←If ,i i W F W C ∃∈∈ thenReturn falseElse if F 中未出现新的元素 thenReturn true End if//能走到这里,说明F 中有新的元素出现,需继续End loop3. 实现源码#include <iostream> #include <fstream> #include <stdio.h> #include <string.h> using namespace std;#pragma warning (disable :4996) char c[100][50]; //保存码字 char f[300][50]; //保存尾随后缀int N, sum = 0; //N 为码字的个数,sum 为尾随后缀个数 int flag; //判断是否唯一可译标志位//检测尾随后缀void patterson(char c[], char d[]) { int i, j, k; for (i = 0;; i++) { If (c[i] == '\0'&&d[i] == '\0')//两字符串一样长,跳出 break ; if (c[i] == '\0') //d 比c 长,将d 的尾随后缀放入f 中 { for (j = i; d[j] != '\0'; j++) f[sum][j - i] = d[j]; f[sum][j - i] = '\0'; for (k = 0; k<sum; k++) { if (strcmp(f[sum], f[k]) == 0) /*查看当前生成的尾随后缀在f 集合中是否存在*/ { sum--; break ; } } sum++; break ;}if (d[i] == '\0') //c比d长,将c的尾随后缀放入f中{for (j = i; c[j] != '\0'; j++)f[sum][j - i] = c[j];f[sum][j - i] = '\0';for (k = 0; k<sum; k++){if (strcmp(f[sum], f[k]) == 0) /*查看当前生成的尾随后缀在f集合中是否存在*/{sum--; break;}}sum++;break;}if (c[i] != d[i])//字符不一样了也退出(前缀不同)break;}}void main(){int k = 0, N = 0, m = 0, a[50], z = 0;a[m] = N; m++;fstream file1;file1.open("out1.txt");//码字读取FILE *file;file = fopen("in1.txt", "r+");int num = fgetc(file) - 48;for (int n = 0; n < num; n++){int i = 0, j;if (fgetc(file) == ' ')N += (fgetc(file) - 48);else N += (fgetc(file) - 48);a[m] = N; m++;fgetc(file);for (k; k < N; k++){for (int q = 0;; q++){char temp = fgetc(file);c[k][q] = temp;if (temp == ' ' || temp == '$'){c[k][q] = '\0';break;}}}//生成尾随后缀flag = 0;for (i = a[z]; i<N - 1; i++)//判断码本身是否重复for (j = i + 1; j<N; j++){if (strcmp(c[i], c[j]) == 0){flag = 1; break;}}if (flag == 1)//如果码本身有重复,就可以断定它不是唯一可译码{for (int y = a[z]; y < N; y++)file1 << c[y] << ' ';file1 << "不是唯一可译码。

网络信息论--NetworkInformationTheory课程设计 (2)

网络信息论--NetworkInformationTheory课程设计 (2)

网络信息论–Network Information Theory课程设计一、课程介绍本课程是一门关于网络信息论的课程。

网络信息论研究信息的传输与处理在网络中的表现和性质。

该领域集合了众多学科,如信息论、图论、通信工程、概率论等,旨在研究网络中信息的可靠传输、冗余度、流量控制等问题。

本课程旨在探究网络信息论的基础概念、理论模型等,并针对一些具体应用场景进行案例分析和实践操作,培养学生的网络信息理论分析与实践操作能力,为学生后续学习和工作提供实际帮助。

二、课程内容1. 网络信息论基础概念•信息熵的概念及其性质•香农定理的基本内容和应用•线性编码与解码基础•多元信源的熵与互信息•无限搜索与无错误译码2. 网络信息论的应用•流量控制方法的基本概念•博弈论与网络信息论的联系•无线电子通信中的网络信息论应用•信息分类与网络流量调度3. 网络信息论实践操作•使用MATLAB进行线性编码的实现•实践操作:误码率以及复杂度分析•搭建网络模型进行无线通信场景的仿真实验•基于网络信息论的数据传输及处理实验三、课程学习成果通过学习本课程,学生们可以掌握网络信息论的基本概念、理论模型和应用场景,并能够进行一定的实践操作。

具体包括:•掌握网络信息论的基本概念、理论模型和应用场景•能够进行网络信息论的核心算法实现和代码分析•能够解决网络信息传输中出现的问题并提出对策•具备应用网络信息论进行数据传输和处理的基本能力四、参考文献1.Cover, T.M., and Thomas, J.A. Elements of Information Theory.John Wiley & Sons, 2006.2.El Gamal, A., and Kim, Y. Network Information Theory.Cambridge University Press, 2011.3.Zhang, C., Lau, V.K.N., and Liew, S.C. “Informationtheoretical study of dynamic complexity of networks,” IEEETransactions on Information Theory, 2017,DOI:10.1109/TIT.2017.2736998.4.Liang, Y., Wen, C-K., and Poor, H.V. An introduction tonetwork information theory. Springer Science & Business Media,2011.5.Yeung, R.W. A First Course in Information Theory. Springer-Verlag New York, 2002.以上内容基于网络信息论课程的设计和实践,旨在为学生提供一门全面了解信息传输的关键概念、理论模型和应用的课程。

应用信息论基础教学设计

应用信息论基础教学设计

应用信息论基础教学设计一、引言信息论是探索信息传输和处理的学科,是信息科学的理论基础。

信息论的基本概念、原理、技术在现代通信、计算机、网络等领域中得到广泛应用。

信息论在计算机、通信、数学等领域中应用广泛,因此在大学教育中有着重要的地位。

在信息时代,解决信息安全、通信速度、数据压缩等问题是目前从事通信、计算机行业人员必备的基本技能。

本课程以信息论基础理论为依据,而设计的课程。

本文将从教学目标、教学内容、课程设置、教学方法与手段、评价方式等方面来进行详细阐述。

二、教学目标此课程旨在通过讲授信息论基础理论,培养学生以下能力:1.理解信源、信源熵、信道、信道容量、信噪比、误码率等基本概念,并运用相应的公式解决问题。

2.熟悉常见的仿真工具,如MATLAB等,通过实验操作进行信息论理论的验证。

3.理解信息论在通信、数据压缩和安全通信中的应用,了解现代通信、无线通信、光纤通信等领域的基础知识。

4.学会在团队协作中合理分工,进行信息技术应用的研究和实践。

三、教学内容本课程的主要内容包括:1.信源与信源熵–信源的基本概念–信源熵的定义–熵的基本性质与定理2.信道与信道容量–信道的基本概念–信道模型–信道容量的概念和计算方法3.信道编码基础–信道编码的基本概念–信道编码的目标–信道编码的优势–线性码、卷积码、Turbo码、Turbo交织码、LDPC码的介绍4.信道编码应用–信道编码在数字通信中的应用–信道编码在数据压缩中的应用–信道编码在安全通信中的应用5.其他应用–异或和检验和及应用–小世界网络及其应用四、课程设置本课程时长为16周,每周3学时,排课安排如下:时间课程内容第1-3周信源与信源熵第4-6周信道与信道容量第7-9周信道编码基础第10-12周信道编码应用第13-16周异或和检验和及应用与小世界网络及其应用,结课作业指导五、教学方法与手段本课程采用以下教学方法:1.讲授与自主学习相结合,通过学生自主学习、教师指导、课堂解答等方式来达成教学目标。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子科技大学电子工程学院信息论课程设计报告<课程名称:信息编码与加密,课程设计报告学生姓名:农瀚学号:20 指导教师:李万春一、课程设计名称:编程实现霍夫曼、费诺、香农编码二、课设原理:1)霍夫曼编码:霍夫曼编码的平均码长最短,是最佳编码。

编码步骤如下:(1)将信源符号按概率大小排序;(2)对概率最小的两个符号求其概率之和,同时给两幅号分别赋予码元0和1;(3)将概率之和当做一个新符号的概率。

与剩下的概率一起,形成一个缩减信源,再重复上述步骤,直到概率和为1为止;(4)按上述步骤实际上构成了一个码树,从根到端点经过的树枝即为码字。

/2)费诺编码:编码步骤如下:(1)将信源概率从大到小排序;(2)将信源符号分成两组,使两组信源符号的概率之和近似相等,并给两组信源符号分别赋0和1;(3)再把各个小组的信源符号细分为两组并赋码元,方法与第一次分组相同;(4)如此一直下去,直到每一个小组只含一个信源符号为止;(5)由此可构造成一个码树,所有终端节点上的码字组成费诺码。

3)香农编码:编码方法如下:⑴将信源消息符号按其出现的概率大小依次排列@p(u1)≥p(u2)≥…≥ p(un)⑵确定码长Ki (整数) :Ki= []——取整⑶为了编成唯一可译码,计算第i个消息的累加概率⑷将累加概率Pi变换成二进制数。

⑸取pi二进制数的小数点后Ki位即为该消息符号的二进制数。

三、课设目的:通过编程实现三种方式的编码,掌握三种编码方式的步骤。

四、课设内容:三种编码方式的编程思路:】1、霍夫曼编码:(1)对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F= {T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空。

(为方便在计算机上实现算法,一般还要求以Ti的权值Wi的升序排列。

)(2)在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。

(3)从F中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。

(4)重复二和三两步,直到集合F中只有一棵二叉树为止。

2、费诺编码的编程思路:(1)先使用冒泡法对信源概率概率排序;(2)依次将按排好序的符号概率进行近似1:1分成两大组;(3)对各组赋予一个二进制码元“0”和“1”;(4)输出符号,符号概率及编码。

3、香农编码:(1)对于一个给定的符号列表,制定了概率相应的列表或频率计数,使每个符号的相对发生频率是已知。

(2)排序根据频率的符号列表,最常出现的符号在左边,最少出现的符号在右边。

(3)清单分为两部分,使左边部分的总频率和尽可能接近右边部分的总频率和。

(4)该列表的左半边分配二进制数字0,右半边是分配的数字1。

这意味着,在第一半符号代都是将所有从0开始,第二半的代码都从1开始。

((5)对左、右半部分递归应用步骤3和4,细分群体,并添加位的代码,直到每个符号已成为一个相应的代码树的叶。

五、器材(设备、元器件):计算机、visual studio2017社区版六、设计代码:见附录九、实验数据及结果根据上述实验程序得到的实验数据及结果如下:霍夫曼编码:~费诺编码:香农编码:>十、结论完成了20个非等概随机信源的霍夫曼、费诺和香农编码,并给出了编码效率和码字。

十一、总结及心得体会通过这次课程设计,我掌握了三种编码方式的步骤,并能够利用编程实现编码,提高了自己的编程水平和对该知识点的掌握程度。

附录代码:;eight = 0;HuffNode[i].parent = -1;HuffNode[i].lchild = -1;HuffNode[i].rchild = -1;}for (i = 0; i < n; i++){HuffNode[i].weight = Sp[i];…}for (i = 0; i < n - 1; i++){m1 = m2 = MaxValue;x1 = x2 = 0;for (j = 0; j < n + i; j++){if (HuffNode[j].weight < m1 && HuffNode[j].parent == -1)#{m2 = m1;x2 = x1;m1 = HuffNode[j].weight;x1 = j;}else if (HuffNode[j].weight < m2 && HuffNode[j].parent == -1){m2 = HuffNode[j].weight;x2 = j;/}}HuffNode[x1].parent = n + i;HuffNode[x2].parent = n + i;HuffNode[n + i].weight = HuffNode[x1].weight + HuffNode[x2].weight;HuffNode[n + i].lchild = x1;HuffNode[n + i].rchild = x2;}}double CodEffi()arent;!while (p != -1){if (HuffNode[p].lchild == c)[] = 0;else[] = 1;;c = p;p = HuffNode[c].parent;}~for (j = + 1; j<n; j++){HuffCode[i].bit[j] = [j];}HuffCode[i].start = ;}memset(coder, '\0', sizeof(coder));int temp=0;for (i = 0; i<n; i++){|cout <<"信源"<< i <<"编码为:";for (j = HuffCode[i].start + 1; j < n; j++){cout << HuffCode[i].bit[j];coder[i][temp]= char(HuffCode[i].bit[j]+48);temp++;?}temp = 0;cout <<" 信源概率:"<< Sp[i];cout <<" 字长:"<< strlen(coder[i]);printf("\n");bitlong[i] = strlen(coder[i]);}CodEffi();cout <<"\n编码效率: "<< CodEffi() * 100 <<"%\n";return 0;}}pp : 定义控制台应用程序的入口点。

= i;s[i].probability = Sp[i];}}/***********用冒泡法排序**********/void code(int low, int mid, int high){!int i;for (i = low; i<high; i++){if (i<mid){s[i].[s[i].] = '0';s[i].++;}else{~s[i].[s[i].] = '1';s[i].++;}}}void sort(int n){double t;char a;int i, j;~for (i = 1; i<n; i++)for (j = 0; j<n - i; j++)if (s[j].probability<s[j + 1].probability){t = s[j].probability;a = s[j].c;s[j].probability = s[j + 1].probability;s[j].c = s[j + 1].c;s[j + 1].probability = t;s[j + 1].c = a;!}}/************分组函数************/void group(int n){int i, pmid, plow, phigh;pmid = phigh = n;plow = 0;for (i = 0; i<n; i++))s[i]. = 0;group1(plow, pmid, phigh);}void group1(int low, int mid, int high){double d, dmin;d = 0;int i;if (high == low + 1)return;!for (i = low; i<mid; i++)d += s[i].probability;dmin = d - 2 * s[low].probability;for (i = low + 1; i<high; i++){d = fabs(dmin - 2 * s[i].probability);if (d<dmin)dmin = d;elsebreak;】}mid = i;code(low, mid, high);group1(low, mid, mid);group1(mid, high, high);}void output(int n){{int i, j;printf("费诺编码输出信源,概率及编码:\n\n");for (i = 0; i<n; i++){cout<<"信源:"<<s[i].c<<" "<<"概率:"<<s[i].probability<<" "<<"编码:";for (j = 0; j<s[i].; j++)cout<< s[i].[j];bitlong[i] = s[i].;cout <<" "<<"字长"<< bitlong[i];【printf("\n");}}double CodEffi( ){int AveraLong =0,SumLong=0;double H=0,CE=0;for (int i = 0; i < SourNum; i++){)SumLong = SumLong + bitlong[i];}AveraLong = SumLong / SourNum;for (int j=0; j < SourNum; j++){H = (-Sp[j])*(log(Sp[j]) / log(2)) + H;}CE = H / AveraLong;return CE;}【void main() pp : 定义控制台应用程序的入口点。

相关文档
最新文档