信 息 论 实 习 报 告.docx

上传人:b****3 文档编号:4230479 上传时间:2022-11-28 格式:DOCX 页数:12 大小:273.19KB
下载 相关 举报
信 息 论 实 习 报 告.docx_第1页
第1页 / 共12页
信 息 论 实 习 报 告.docx_第2页
第2页 / 共12页
信 息 论 实 习 报 告.docx_第3页
第3页 / 共12页
信 息 论 实 习 报 告.docx_第4页
第4页 / 共12页
信 息 论 实 习 报 告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

信 息 论 实 习 报 告.docx

《信 息 论 实 习 报 告.docx》由会员分享,可在线阅读,更多相关《信 息 论 实 习 报 告.docx(12页珍藏版)》请在冰豆网上搜索。

信 息 论 实 习 报 告.docx

信息论实习报告

 

信息论实习报告

 

一、香农编码

1.程序设计题目:

对某一个信源Y用香农编码编成二元变长唯一可译码。

例如:

取信源Y=(y0,y1,y2,y3,y4,y5,y6,y7,y8).相应的概率为P=(0.49,0.14,0.14,0.07,0.07,0.04,0.02,0.02,0.01)。

2.程序设计方法:

第一步:

按概率从大到小的顺序输出信源Y。

第二步:

利用公式Li=「-㏒p(yi)」(「」取上整)确定码长。

第三步:

为编成唯一可译码求p(yi)的累加概率P[i]。

第四步:

把P[i]化为二进制数,乘2取整。

第五步:

根据码长Li确定第四步中for循环的次数,最终得到码字。

3.程序的设计中遇到的问题及解决办法:

本程序设计最关键在于码长公式的C语言编码实现和如何在编程中实现小数向二进制数的转换。

在一开始意识到-㏒p(yi)=-㏒p(yi)/㏒

(2)的问题后,我在编程中首先遇到的问题是如何取整的问题。

一开始因为对C语言编程的不熟悉在

这句代码中没有对int加括号。

4.程序中的主要函数:

(1)主函数main().且香农编码的实现比较简单所以没有用到子函数。

(2)求码长的编程实现:

(3)利用累加概率P[i]求的码字的编程实现:

5.流程图:

 

6.源程序如下:

7.运行结果截图:

二、费诺码

1.程序设计题目:

对某一个信源X用香农编码编成二元变长唯一可译码。

例如:

取信源X=(x0,x1,x2,x3,x4,x5,x6,x7,x8).相应的概率为

P=(0.14,0.49,0.07,0.04,0.14,0.02,0.07,0.02,0.01)。

2.程序设计方法:

第一步:

将信源X发出的n个消息符号按其概率的递减次序依次排列。

第二步:

将依次排列的信源符号依概率分成两组,使两个组的概率和近于相同,并对各组赋予一个二进制代码符号“0”和“1”(编m进制码就分成m组)。

第三步:

将每一个大组的信源符号进一步再分成两组,使划分后的两个组的概率和近于相同,并又分别赋予两组一个二进制符号“0”和“1”

第四步:

如此重复,直至每组值只剩下一个信源符号为止

第五步:

信源符号所对应的码符号序列即为费诺码

3.程序的设计中遇到的问题及解决办法:

在进行费诺编码的过程中首先遇到的问题是如何进行分组,利用变量i从的值把信源符号分为两组,前i个信源符号序列为一组进行概率求和s1,剩下的信源符号为一组进行概率求和s2。

当s1和s2之差的绝对值为最小的时候确定分组。

前i个信源符号相应的码字在这一列上赋值为0,剩下的信源符号相应的码字在这一列上赋值为1。

在进行费诺编码的过程中遇到的最大的问题就是递归,在最初分为两组后,调用子函数bianma(),确定第一组每个信源符号对应的二元变长码字第一位上是“0”,并且确定第二组每个信源符号对应的二元变长码字第一位上是“1”。

再对两个大组分别进行分组,重复前面的步骤,直到每一组只剩一个信源符号进行赋值后,输出每个信源符号对应的二元符号序列。

从而得到相应的费诺码。

4.程序中的主要函数:

(1)main()本函数实现的主要功能有:

实现需要编码符号的个数和相应概率的的输入;对输入的概率进行降序排序;调用bianma()函数对排序后的概率进行编码并输出编码结果。

(2)bianma()本函数实现对相应的信源符号的分组,并且根据分组得到相应的二元变长的编码符号序列,在此函数中还会递归的用到bianma()本身,直到每组只剩下一个信源符号,从而完成编码。

5.源程序运行结果截图:

6.流程图:

 

7.源程序如下:

三、尾随后缀的唯一可译码

1.程序设计题目:

利用Sardinas-Patterson算法将码C中所有可能的尾随后缀组成一个集合F,当且仅当集合F中没有包含任一码字,便可判断码C为唯一可译码。

反之,码C不是唯一可译码。

2.程序设计思想方法:

A.A.Sardinas和G.W.Patterson于1957年提出下述算法用于判断码C的唯一可译性.此算法的原理如下所示:

其中Ai,Bi都是码字。

可知,当且仅当某个有限长的码符号序列能译成两种不同的码字序列时,此码不是唯一可译码,此时B1一定是A1的前缀,而A1的尾随后缀一定是另一码字B2的前缀;而B2的尾随后缀又是其他码字的前缀.最后,码符号序列的尾部一定是一个码字。

设C为码字集合,按以下步骤构造此码的尾随后缀集合F:

(1)考查C中所有的码字,若Wi是Wj的前缀,则将相应的后缀作为一个尾随后缀放入集合F0中;

(2)考查C和Fi两个集合,若Wj∈C是Wi∈Fi的前缀或Wi∈Fi是Wj∈C的前缀,则将相应的后缀作为尾随后缀码放入集合Fi+1中;

(3)F=∪Fi即为码C的尾随后缀集合;

(4)若F中出现了C中的元素,则算法终止,返回假(C不是唯一可译码);否则若F中没有出现新的元素,则返回真。

3.程序中的主要函数:

(1)main()本函数实现的主要功能有:

实现需要码字的个数和码字集合的输入;码字集合本身是否含有重复码字的检验,调用houzhui()函数后缀集合F[i]。

判断F[i]和源码字集合是否有相同元素,从而判断原码字集合是否为唯一可译码。

(2)houzhui()本函数实现对两个码字是否存在后缀的判断,并且生成F[i]中的元素。

4.流程图:

 

5.源程序如下:

 

6.程序的设计中遇到的问题及解决办法:

在设计本程序的过程中遇到的最大的问题是尾随后缀的截断问题,刚开始时不知道以数字的形式实现如何截断尾随后缀,最后在自己的思考及查阅资料下,采用计数器计数的方式来实现这个问题,使得这个问题得以较好的解决。

但是不知为什么最后运行结果总是多出一个11,苦思没有想到出错在哪里。

7.运行结果截图:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1