信息论与编码实验报告材料
信息论与编码实验报告

信息论与编码实验报告信息论与编码实验报告实验一:英文文本信息量的计算一、实验目的及要求a)实验目的1、通过本实验熟悉Matlab 软件编程环境2、编写M 文件实现对英文文本信息量的统计,掌握信息量、信源熵的计算方法b)实验要求1、了解matlab 中M 文件的编辑、调试过程2、编写程序实现对给定英文文本信息量的统计3、英文文本中字母不区分大小写,考虑空格的信息量,但不考虑标点符号的信息量4、建议英文文本采用txt 格式二、实验步骤及运行结果记录a)实验步骤1、查找各个英文字母及空格出现的频率2、在Matlab 中读取给定的英文文章3、计算英文文章的长度4、统计在该文章中各个字母及空格出现的次数并放入数组N 中5、计算各个字母和空格的信息量及整篇文章的信息量6、计算信源熵b)实验结果sumI = +003;H = 三、程序流程图四、程序清单,并注释每条语句五、实验小结通过本次实验熟悉了Matlab 软件编程环境和一些函数的功能及使用,掌握了信息量、信源熵的计算方法。
1 附一:开始读取英文文章计算文章的长度嵌套的for 循环语句假判断是否符合循环条件真if 否elseif 判断字是否为大写母输入相应的频率否elseif 判断是否为小写字母计算各个字母、空格及整篇文章的信息量是判断是否为小写字母是计算信源熵是放入数组N 中对应的位置放入数组N 中对应的位置放入数组N 中对应的位置结束附二: wenzhang=textread(‘实验一:english ‘,’\’); M=size(wenzhang); row=M(1,1); line=M(1,2); N=zeros(1,27); for i=1:row for j=1:line %读取英文文章%文章的长度ifdouble(wenzhang(i,j))>96&&double(wenz hang(i,j))double(wenzhang(i,j))>64&&double(wenz hang(i,j))N(1,double(wenzhang(i,j))-64)=N(1,doubl e(wenzhang(i,j))-64)+1; elseif double(wenzhang(i,j))==32N(1,27)=N(1,27)+1; end end end %统计各字母和空格出现的个数并存入N数组中。
信息论与编码实验2-实验报告

信息论与编码实验2-实验报告信息论与编码实验 2 实验报告一、实验目的本次信息论与编码实验 2 的主要目的是深入理解和应用信息论与编码的相关知识,通过实际操作和数据分析,进一步掌握信源编码和信道编码的原理及方法,提高对信息传输效率和可靠性的认识。
二、实验原理(一)信源编码信源编码的目的是减少信源输出符号序列中的冗余度,提高符号的平均信息量。
常见的信源编码方法有香农编码、哈夫曼编码等。
香农编码的基本思想是根据符号出现的概率来分配码字长度,概率越大,码字越短。
哈夫曼编码则通过构建一棵最优二叉树,为出现概率较高的符号分配较短的编码,从而实现平均码长的最小化。
(二)信道编码信道编码用于增加信息传输的可靠性,通过在发送的信息中添加冗余信息,使得在接收端能够检测和纠正传输过程中产生的错误。
常见的信道编码有线性分组码,如汉明码等。
三、实验内容与步骤(一)信源编码实验1、选取一组具有不同概率分布的信源符号,例如:A(02)、B (03)、C(01)、D(04)。
2、分别使用香农编码和哈夫曼编码对信源符号进行编码。
3、计算两种编码方法的平均码长,并与信源熵进行比较。
(二)信道编码实验1、选择一种线性分组码,如(7,4)汉明码。
2、生成一组随机的信息位。
3、对信息位进行编码,得到编码后的码字。
4、在码字中引入随机错误。
5、进行错误检测和纠正,并计算错误纠正的成功率。
四、实验结果与分析(一)信源编码结果1、香农编码的码字为:A(010)、B(001)、C(100)、D (000)。
平均码长为 22 比特,信源熵约为 184 比特,平均码长略大于信源熵。
2、哈夫曼编码的码字为:A(10)、B(01)、C(111)、D (00)。
平均码长为 19 比特,更接近信源熵,编码效率更高。
(二)信道编码结果在引入一定数量的错误后,(7,4)汉明码能够成功检测并纠正大部分错误,错误纠正成功率较高,表明其在提高信息传输可靠性方面具有较好的性能。
信息论与编码技术实验报告

《信息论与编码技术》实验报告实验一:请根据公式-plogp ,说明小概率事件和大概率事件对熵的贡献。
解:先做图,然后分析。
将公式写为)(log )(2p p p f -=对它编写计算和画图程序如下:p=0:0.01:1;x=-p.*log2(p);plot(p,x);从图中曲线看出,小概率事件和大概率事件的情况下,熵值都很低,贡献很小,在概率为0.5附近时熵值最大,故此时对熵的贡献最大。
实验二:请对a 、b 、c 霍夫曼编码,它们的概率是0.6、0.3、0.1。
并以此对符号串ababaacbaa 编码和译码。
解:编码步骤分为:事件排序,符号编码,信源编码,信道编码。
MATLAB 程序:clc;a=0.3;b=0.3;c=0.4; %%%霍夫曼编码A=[a,b,c];A=fliplr(sort(A)); %%%降序排序if (a==b)&(a>c), %%实现了当a,b,c 其中两概率相同时的编码,及3值均不同时的编码 u='a';x=a;v='b';y=b;w='c';z=c;elseif (a==b)&(a<c),u='c';x=c;v='a';y=a;w='b';z=b;elseif (c==b)&(c>a),u='b';x=b;v='c';y=c;w='a';z=a;elseif (c==b)&(c<a),u='a';x=a;v='b';y=b;w='c';z=c;elseif(a==c)&(a>b),u='a',x=a;v='c',y=c;w='b',z=b;elseif(a==c)&(a<b),u='b';x=b;v='a';y=a;w='c';z=c;elseif A(1,1)==a,u='a';x=a;elseif A(1,1)==b,u='b';x=b;elseif A(1,1)==c,u='c';x=c;endif A(1,2)==a,v='a';y=a;elseif A(1,2)==b,v='b';y=b;elseif A(1,2)==c,v='c';y=c;endif A(1,3)==a,w='a';z=a;elseif A(1,3)==b,w='b';z=b;elseif A(1,3)==c,w='c';z=c;endend %%%x,y,z按从大到小顺序存放a,b,c的值,u,v,w存对应字母if x>=(y+z),U='0';V(1)='0';V(2)='1';W(1)='1';W(2)='1';else U='1';V(1)='0';V(2)='0';W(1)='1';W(2)='0';enddisp('霍夫曼编码结果:')if u=='a',a=fliplr(U),elseif u=='b',b=fliplr(U),else c=fliplr(U),end if v=='a',a=fliplr(V),elseif v=='b',b=fliplr(V),else c=fliplr(V),end if w=='a',a=fliplr(W),elseif w=='b',b=fliplr(W),else c=fliplr(W),end %%%编码步骤为:信源编码,信道编码disp('信源符号序列:')s='ababaacbaa' %%%信源编码q=[];for i=s;if i=='a',d=a;elseif i=='b';d=b;else d=c;end;q=[q,d];endm=[]; %%%符号变数字for i=q;m=[m,str2num(i)];endP=[1,1,1,0;0,1,1,1;1,1,0,1];G=[eye(3),P];%%%信道编码%%%接下来的for循环在程序中多次使用,此处作用是将已编码组m每3个1组放入mk中进行运算之后存入Ck数组中,每次mk中运算结束之后清空,再进行下一组运算,而信道编码结果数组C则由C=[C,Ck]存入每组7个码。
信息论与编码实验报告

NANCHANG UNIVERSITY信息论与编码实验报告(2018年11月27日)学院:信息工程学院系电子信息工程系专业班级:学生姓名:学号:指导教师:目录实验一自信息量和熵源.............................................................................................. 实验二准对称信道容量.............................................................................................. 实验三费诺不等式...................................................................................................... 实验四香农编码.......................................................................................................... 实验五费诺编码.......................................................................................................... 实验六霍夫曼编码......................................................................................................实验一自信息量和熵源一、实验要求1、画出I=-的函数图;2、画出H(p)=-p-(1-p)函数图。
二、实验原理及理论分析自信息量:一个事件的自信息量就是对其不确定性的度量。
信息论与编码实验报告

信息论与编码实验报告一、实验目的本实验主要目的是通过实验验证信息论与编码理论的基本原理,了解信息的产生、传输和编码的基本过程,深入理解信源、信道和编码的关系,以及各种编码技术的应用。
二、实验设备及原理实验设备:计算机、编码器、解码器、信道模拟器、信噪比计算器等。
实验原理:信息论是由香农提出的一种研究信息传输与数据压缩问题的数学理论。
信源产生的消息通常是具有统计规律的,信道是传送消息的媒体,编码是将消息转换成信号的过程。
根据信息论的基本原理,信息的度量单位是比特(bit),一个比特可以表示两个平等可能的事件。
信源的熵(Entropy)是用来衡量信源产生的信息量大小的物理量,熵越大,信息量就越多。
信道容量是用来衡量信道传输信息的极限容量,即信道的最高传输速率,单位是比特/秒。
编码是为了提高信道的利用率,减少传输时间,提高传输质量等目的而进行的一种信号转换过程。
常见的编码技术有霍夫曼编码、香农-费诺编码、区块编码等。
三、实验步骤1.运行编码器和解码器软件,设置信源信息,编码器将信源信息进行编码,生成信道输入信号。
2.设置信道模拟器的信道参数,模拟信道传输过程。
3.将信道输出信号输入到解码器,解码器将信道输出信号进行解码,恢复信源信息。
4.计算信道容量和实际传输速率,比较两者的差异。
5.改变信道参数和编码方式,观察对实际传输速率的影响。
四、实验结果与分析通过实验,我们可以得到不同信道及编码方式下的信息传输速率,根据信道参数和编码方式的不同,传输速率有时会接近信道容量,有时会低于信道容量。
这是因为在真实的传输过程中,存在信噪比、传输距离等因素导致的误码率,从而降低了实际传输速率。
在实验中,我们还可以观察到不同编码方式对传输速率的影响。
例如,霍夫曼编码适用于信源概率分布不均匀的情况,可以实现数据压缩,提高传输效率。
而区块编码适用于数据容量较大的情况,可以分块传输,降低传输错误率。
此外,通过实验我们还可以了解到信息论中的一些重要概念,如信源熵、信道容量等。
信息论与编码基础实验报告

信息论与编码基础实验报告学院:指挥军官基础教育学院队别:三大队十二队专业: 2006级通信工程专业姓名:刘枫学号: 200609015001国防科学技术大学电子科学与工程学院实验一 DCT 变换一 设计思想(一)DCT 变换原理二维图像矩阵:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡−−−−=×)1,1(...)0,1(......)1,0(...)0,0(N M f M f N f f f NM 此处M=N=8变换后矩阵:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡−−−−=×)1,1(...)0,1(......)1,0(...)0,0(N M F M F N F F F NM DCT 变换:Nv j N u i j i f v u C v u F N i N j 2)12(cos 2)12(cos),(),(),(1010ππ++=∑∑−=−= IDCT 变换:Nv j N u i j i F v u C v u f N u N v 2)12(cos 2)12(cos),(),(),(101ππ++=∑∑−=−= 其中:⎪⎪⎪⎩⎪⎪⎪⎨⎧≠≠====0,2,0,20,1),(uv N v u uv N v u N v u C(二)设计思路 1、将图像dct 变换后按阈值置零,分别选取阈值为20,40,100时,在进行dct 反变换,观察生成图像,对比分析 2、分别取不同的数据块置零,观察恢复出的图像,对比分析二 实现流程将DCT 系数矩阵中值小于给定阈值的元素置为0;阈值为0时,即原图像20406080100120204060801001201.1、将DCT 系数矩阵中值小于给定阈值的元素置为0;阈值为20时:204060801001201.2、将DCT 系数矩阵中值小于给定阈值的元素置为0;阈值为40时:204060801001201.3、将DCT 系数矩阵中值小于给定阈值的元素置为0;阈值为100时:20406080100120204060801001202.1 将行 m = 88:128 ,列n = 88:128 (高频)的块置零204060801001202.2 将行m = 1:40 , 列n = 1:40(低频) 块置零20406080100120204060801001202.3仅保留左上角 (1)保留96*962040608010012020406080100120(2)保留64*642040608010012020406080100120(3) 保留32*322040608010012020406080100120(4)保留16*162040608010012020406080100120三 结论分析1、 通过设定阈值置零的方式观察恢复出的图像,可发现保留的低频越多,恢复出的图像效果越好,低频数据块对包含了大量的图像信息。
信息论算术编码实验报告

实验三算术编码一、实验目的1.进一步学习C++语言概念和熟悉VC 编程环境。
2.学习算术编码基本流程, 学会调试算术编码程序。
3. 根据给出资料,自学自适应0 阶算术编、解码方法。
二、实验内容与原理(一)实验原理:1.算术编码基本原理这是将编码消息表示成实数0 和1 之间的一个间隔,消息越长,编码表示它的间隔就越小,表示这一间隔所需的二进制位就越多。
算术编码用到两个基本的参数:符号的概率和它的编码间隔。
信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。
编码过程中的间隔决定了符号压缩后的输出。
首先借助下面一个简单的例子来阐释算术编码的基本原理。
考虑某条信息中可能出现的字符仅有a b c 三种,我们要压缩保存的信息为bccb。
在没有开始压缩进程之前,假设对a b c 三者在信息中的出现概率一无所知(采用的是自适应模型),暂认为三者的出现概率相等各为1/3,将0 - 1 区间按照概率的比例分配给三个字符,即a 从0.0000 到0.3333,b 从0.3333 到0.6667,c 从0.6667 到1.0000。
进行第一个字符b编码,b 对应的区间0.3333 -0.6667。
这时由于多了字符b,三个字符的概率分布变成:Pa = 1/4,Pb = 2/4,Pc = 1/4。
按照新的概率分布比例划分0.3333 - 0.6667 这一区间,划分的结果可以用图形表示为:+-- 0.6667 Pc = 1/4 | +-- 0.5834 | | Pb = 2/4 | | | +-- 0.4167 Pa = 1/4 | +-- 0.3333 接着拿到字符c,现在要关注上一步中得到的c 的区间0.5834 -0.6667。
新添了c 以后,三个字符的概率分布变成Pa = 1/5,Pb = 2/5,Pc = 2/5。
用这个概率分布划分区间0.5834 - 0.6667:+-- 0.6667 | Pc = 2/5 | +-- 0.6334 | Pb = 2/5 || +-- 0.6001 Pa = 1/5 | +-- 0.5834 输入下一个字符c,三个字符的概率分布为:Pa = 1/6,Pb = 2/6,Pc = 3/6。
信息论与编码理论课程实验报告

二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)
设备:PC机
软件:matlab 2007
0.0055 0.0115 0.0061 0.0176 0
构建信源模型如下:
h i j k l m n
0.0267 0.0672 0.0042 0.0030 0.0521 0.0212 0.0733
o p q r s t u
0.0842 0.0254 0.0048 0.0648 0.0933 0.0739 0.0327
9.实验报告独立完成,无抄袭现象,并按时提交,格式规范。
综合评定:
附录(程序源代码)
1.编写MATLAB程序
clc
clear all
%随机输入一组数据
string='abdddssdsssdabaabaddkkidkidkdiakdjjaidjaid';
%将上述中所有英文字母化为小写
string=lower(string);
自评/互评成绩:100(评阅者签名:熊萌萌)
2、教师评价
评价标准
评语等级
优
良
中
及格
不合格
1.实验态度认真,实验目的明确
2.实验方案或流程图思路清晰、合理
3.实验程序设计合理,能运行
4.实验步骤记录详细,具备可读性
5.实验数据合理
6.实验结论正确
7.实验总结分析合理、透彻
8.实验报告完整、文字叙述流畅,逻辑性强
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通过这次实验, 我们懂得了不必运行程序时重新输入文档就可以对文档进行 统计,既节省了时间而且也规避了一些输入错误。 在实验中, 我们进一步了解到 信源熵的计算,理论和实践的结合让我们对这个知识点了解的更加深刻了。
实验二
一、实验目的
1.理解信源的最优变长编码的基本思想。
2.熟练掌握Huffman信源编码方法。
{
if (p[i]!=0)
result=result+p[i]*log(p[i]);
}
result=-result;
printf("信息熵为:%f",result);
printf("\n");
return 0;
}
六、求解结果
其中nan311.txt中的文档如下:
There is no hate without fear. Hate is crystallized fear, fear's
f=fopen("nan311.txt","r");
while (!feof(f)){
fread(temp,1, 486, f);}
fclose(f);
s[0]=*temp;
for(i=0;i<strlen(temp);i++)
{
s[i]=temp[i];
}
for(i=0;i<strlen(s);i++)
程序流程图:
三、实验内容
1、写出计算自信息量的Matlab程序
2、已知:信源符号为英文字母(不区分大小写)和空格 输入:一篇英文的信源文档。 输出:给出该信源文档的中各个字母与空格的概率分布,以及该信源的熵。
四、实验环境
Microsoft Windows 7
Matlab6.5
五、编码程序
#include"stdio.h"
dividend, fear objectivized. We hate what we fear and so where hate is, fear is lurking. Thus we hate what threatens our person, our vanity and our dreams and plans for ourselves. If we can isolate this element in what we hate we may be able to cease from hating.
3、为了编成唯一可译码,计算第i个消息的累加概率:
i1
Pip(ak)
k1
4、将累加概率Pi变换成二进制数;
5、取Pi二进制数的小数点后Ki位即为该消息符号的二进制码字
三、实验内容
1、写出计算自信息量的Matlab程序
2、写出计算离散信源平均信息量的Matlab程序。
3、将程序在计算机上仿真实现,验证程序的正确性并完成习题。
2.输出Huffman编码的平均码长。
四、实验环境
Microsoft Windows 7
Matlab6.5
五、编码程序
MATLAB编码:
function[h,L]=huffman(p,r)
%变量p为符号出现概率所组成的概率向量
%返回值h为利用Huffman编码算法编码后最后得到编码结果
%返回值L为进行Huffman编码后所得编码的码字长度
实验三
一、实验目的
1、熟悉离散信Βιβλιοθήκη 的特点;2、学习仿真离散信源的方法
3、学习离散信源平均信息量的计算方法
4、熟悉Matlab编程
二、实验原理
给定某个信源符号的概率分布,通过以下的步骤进行香农编码
1、信源符号按概率从大到小排列;
p1p2pn
2、确定满足下列不等式的整数码长Ki为
lb(pi) Kilb(pi) 1
r=3;
[h,L]=huffman(p,r).
六、运行结果
得出的结论为:
概率
编码
概率
编码
0.15
2120
0.02
11
0.12
2121
0.09
12
0.2
2122
0.04
20
0.08
210
0.02
22
0.04
211
0.06
0
0.18
10
L=2.0600
七、实验总结
在huffman编码的过程中,我们运用了平时熟悉的数学软件MATLAB的运行来实现,把书本上huffman的算法运用编程来实现。 通过这次实验, 使我更加清 晰地理解huffman编码的原理及实现过程,并且能够在MATLAB中熟练地进行编码运行。
for r=1:b(m) z(r)=p(r);
end
disp('
ê? 3 ? ?á1 ? ? a£o ')
disp('
3 ?ê? ? ? ?ê'),disp(a(m))
disp('
?óoí?á1 ? '),disp(s(m))
disp('
±à? ? ? ?êy '),disp(b(m))
disp('
{
if(s[i]==' ')
num[26]++;
else if(s[i]>='a'&&s[i]<='z')
num[s[i]-97]++;
else if(s[i]>='A'&&s[i]<='Z')
num[s[i]-65]++;
}
printf("文档中各个字母出现的频率:\n");
for(i=0;i<26;i++)
四、实验环境
Microsoft Windows 7
Matlab6.5
五、编码程序
计算如下信源进行香农编码,并计算编码效率:
Xa0a1a2a3a4a5a6
P0.20.190.180.170.150.10.01
MATLAB程序:
(1) a=[0.20.18 0.19 0.15 0.17 0.1 0.01];k=length(a);y=0;
三、实验内容
计算定信源和输入信号字母表的Huffman编码,并计算Huffman编码的平均 码长。实验具体要求如下:
信源字母表的概率分布为:
P={0.15,0.12,0.2,0.08,0.04,0.18,0.02,0.09,0.04,0.02,0.06}
输入信号字母表:
U={0,1,2};
1.独立设计信源和输入信号字母表进行Huffman编码,其中信源字母表元 素个数要求是8以上,信号字母表元素个数是2以上;
end
n1=m;
n2=mp;
for i=1:k+1 n1(i,:)=m(k+2-i,:); n2(i,:)=mp(k+2-i,:);
end
m=n1;
mp=n2; c=cell(k+1,a);
for j=1:r
c{1,j}=num2str(j-1);
end
for i=2:k p1=find(mp(i-1,:)==1);
end
%判断所有符号出现概率之和是否大于1,如果大于1程序显示出错,终止 运行
a=length(p);%测定概率向量长度,将长度值赋给变量n k=fix((a-1)/(r-1));
l1=a-k*r+k;
q=zeros(1,a); m=zeros(k+1,a);
mp=m;
q=p; [m(1,:),mp(1,:)]=sort(q);
、实验目的
1进一步熟悉信源熵值的计算
2熟悉Matlab编程
、实验原理
熵(平均自信息)的计算公式
q1q
H(x)pilog2pilog2pi
i 1pii 1
MATLAB实现:HX sum(x.* log2(x));或者h h x(i)* log2(x(i ))流程:第一步:打开一个名为“nan311”的TXT文档,读入一篇英文文章存入一个数组temp,为了程序准确性将所读内容转存到另一个数组S,计算该数组中每个字母与空格的出现次数(遇到小写字母都将其转化为大写字母进行计数),每出 现一次该字符的计数器+1; 第二步:计算信源总大小计算出每个字母和空格出现的概率; 最后,通过统计数据和信息熵公式计算出所求信源熵值(本程序中单位为奈特nat)。
for j=1:r c{i,j}=strcat(c{i-1,p1},int2str(j-1));
end
for j=(r+1):(p1+r-1) c{i,j}=c{i-1,j-r};
end
for j=(p1+r):a c{i,j}=c{i-1,j-r+1};
end
end
if l1==1
for j=1:a c{k+1,j}=c{k,j};
#include <math.h>
#include <string.h>
#define N 1000
int main(void)
{
char s[N];
int i,n=0;
float num[27]={0};
double result=0,p[27]={0};
FILE *f;
char *temp=new char[485];
实验报告
课程名称: