信息论实验报告2信源编码
信息论编码实验报告 费诺编码附源代码

中南大学信息论与编码实验报告选题:费诺编码学生姓名:学号:专业班级:通信工程指导老师:学院:信息科学与工程学院时间: 2015目录一、实验目的二、实验原理2.1 费诺编码思想2.2 费诺编码流程图三、实验内容四、实验要求五、代码调试结果六、心得体会七、程序源代码一实验目的1. 掌握费诺编码的原理和过程。
2. 熟悉 C/C++语言,练习使用C/C++实现香农码和Huffman 编码。
二、实验原理2.1 费诺编码思想设有离散无记忆信源∑==⎥⎦⎤⎢⎣⎡ni i n n x p x p x p x p x x x 121211)(,)(.....)()(.....1.按信源符号的概率从大到小的顺序排队 不妨设)(......)()(21n x p x p x p ≥≥≥2.将依次排列的信源符号按概率值分为两大组,使两个组的概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。
3.将每一大组的信源符号再分为两组,使划分后的两个组的概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。
4.如此重复,直至每个组只剩下一个信源符号为止。
5.信源符号所对应的码字即为费诺码。
例:有一单符号离散无记忆信源⎭⎬⎫⎩⎨⎧=⎥⎦⎤⎢⎣⎡04.008.016.018.022.032.0)(654321x x x x x x X P X对该信源编二进制费诺码)i /(35.2)(gn s bit X H = m L KR 2log =%92.97)(==R x H η∑===61)/(4.2)(i i i k x p K 符号比特2.2 费诺编码流程图三、实验内容使用C\C++实现费诺编码,并自己设计测试案例。
四、实验要求1.提前预习实验,认真阅读实验原理以及相应的参考书。
2.认真高效的完成实验,实验中服从实验室管理人员以及实验指导老师的管理。
3.认真撰写实验报告,内容可以自己编排,可以考虑包括以下一些方面:原理概述、程序设计与算法描述、源程序及注释(程序太长可以只选取重要部分)、运行输出结果实例、调试和运行程序过程中产生的问题及采取的措施、对实验的讨论分析、总结。
信息论实验2

《信息论与编码》实验2 香农编码规则及其软件实现一、实验目的1、通过上机实践,实现常用的信源编码方案,以加深对编码理论的理解,促进对本课程所学知识的理解和把握。
2、通过信源编译码,理解香农第一定理3、通过信源编译码,掌握信源编码的方法和手段二、实验原理信源编码主要可分为无失真信源编码和限失真信源编码。
无失真信源编码主要适用于离散信源或数字信号,如文本、表格及工程图纸等信源,它们要求进行无失真地数据压缩,要求完全能够无失真地可逆恢复。
凡是能载荷一定的信息量,且码字的平均长度最短,可分离的变长码的码字集合都可称为最佳码。
为此必须将概率大的信息符号编以短的码字,概率小的符号编以长的码字,使得平均码字长度最短。
其中香农编码是能获得最佳码的编码方法之一。
香农第一定理指出,选择每个码字的长度i K 满足下式I(i x )≤i K <I(i x )+1 ,i ∀就可以得到这种码。
这种编码方法称为香农编码。
香农编码步骤:设离散无记忆信源二进制香农码的编码步骤如下:(1)将信源符号按概率从大到小的顺序排列,为方便起见,令p (x 1)≥ p (x 2)≥…≥ p (xn )(2)令p (x 0)=0,用)(j a x P ,j =i +1表示第i 个码字的累加概率,则:n j x P x P j i i j a ,...,2,1,)()(10==∑-=12112,,,,,,()1(),(),,(),,()()n i n ii i n x x x x X p x p x p x p x p x P X =⎧⎫⎡⎤==⎨⎬⎢⎥⎣⎦⎩⎭∑(3)确定满足下列不等式的整数i K ,并令i K 为第i 个码字的长度-log2 p (xn )≤i K <- log2 p (xn )+1(4)将)(j a x P 用二进制表示,并取小数点后i K 位作为符号xi 的编码。
三、实验内容1)充分掌握信源编码方案之一的香农编码算法设计;2)以教材例题为算例,将该编码方法用代码实现。
信源编码的实验报告

一、实验目的1. 理解信源编码的基本原理和过程。
2. 掌握几种常见的信源编码方法,如哈夫曼编码、算术编码等。
3. 分析不同信源编码方法的编码效率。
4. 培养动手实践能力和分析问题、解决问题的能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 实验工具:PyCharm IDE三、实验内容1. 哈夫曼编码2. 算术编码四、实验步骤1. 实验一:哈夫曼编码(1)读取信源数据,统计每个字符出现的频率。
(2)根据字符频率构建哈夫曼树,生成哈夫曼编码表。
(3)根据哈夫曼编码表对信源数据进行编码。
(4)计算编码后的数据长度,并与原始数据长度进行比较,分析编码效率。
2. 实验二:算术编码(1)读取信源数据,统计每个字符出现的频率。
(2)根据字符频率构建概率分布表。
(3)根据概率分布表对信源数据进行算术编码。
(4)计算编码后的数据长度,并与原始数据长度进行比较,分析编码效率。
五、实验结果与分析1. 实验一:哈夫曼编码(1)信源数据:{a, b, c, d, e},频率分别为{4, 2, 2, 1, 1}。
(2)哈夫曼编码表:a: 0b: 10c: 110d: 1110e: 1111(3)编码后的数据长度:4a + 2b + 2c + 1d + 1e = 4 + 2 + 2 + 1 + 1 = 10(4)编码效率:编码后的数据长度为10,原始数据长度为8,编码效率为10/8 = 1.25。
2. 实验二:算术编码(1)信源数据:{a, b, c, d, e},频率分别为{4, 2, 2, 1, 1}。
(2)概率分布表:a: 0.4b: 0.2c: 0.2d: 0.1e: 0.1(3)编码后的数据长度:2a + 2b + 2c + 1d + 1e = 2 + 2 + 2 + 1 + 1 = 8(4)编码效率:编码后的数据长度为8,原始数据长度为8,编码效率为8/8 = 1。
六、实验总结1. 哈夫曼编码和算术编码是两种常见的信源编码方法,具有较好的编码效率。
信息论与编码实验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个码。
信息论与编码实习报告

信息论与编码实习报告一、引言信息论与编码是通信工程、计算机科学和电子工程等领域的重要基础课程。
本次实习旨在通过实际操作,深入理解和掌握信息论与编码的基本原理和技术,提高我们的实际操作能力和问题解决能力。
二、实习内容1、信息论基础:实习的第一部分,我们通过自学和讨论的方式,深入学习了信息论的基本概念和原理,包括信息的度量、熵、信道容量等。
2、编码理论:在这一阶段,我们重点学习了线性编码、循环编码、哈夫曼编码等编码方法,并了解了编码的效率及其可靠性。
3、模拟与数字通信系统:我们通过模拟软件,设计和实现了简单的模拟通信系统,同时,也通过实验箱,了解了数字通信系统的基本原理和技术。
4、无线通信和网络:在这一部分,我们重点学习了无线通信和网络的基础知识,包括无线信道模型、无线调制解调技术、无线网络协议等。
5、实习项目:最后,我们根据所学的知识,完成了一个实习项目——设计并实现一个具有高可靠性和高效率的通信系统。
三、实习收获通过这次实习,我们收获颇丰。
首先,我们对信息论与编码的基本概念和原理有了更深入的理解和掌握,能够更好地将理论知识应用到实际中。
其次,我们提高了自己的实际操作能力和问题解决能力,能够在实践中发现和解决问题。
最后,我们了解了通信系统的基本原理和技术,对未来的学习和工作有了更好的准备。
四、结论本次实习是我们学习信息论与编码的重要环节,我们通过实际操作,深入理解和掌握了信息论与编码的基本原理和技术,提高了自己的实际操作能力和问题解决能力。
我们也发现了自己的不足之处,将在未来的学习和工作中更加努力,不断提高自己的能力和水平。
信息论与编码曹雪虹课后习题答案随着科技的发展,信息已经成为现代社会中不可或缺的一部分。
在大学中,信息论与编码作为一门重要的学科,已经成为了计算机科学、通信工程、电子工程等专业的必修课程。
而在这门课程中,曹雪虹教授的教材《信息论与编码》被广泛使用。
本文将介绍一些该教材的课后习题答案,以帮助读者更好地掌握信息论与编码的相关知识。
信息论与编码实验报告

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

电子科技大学实验报告课程名称信息论与编码实验名称信源编码任课教师姓名学号时间2018 年11月28 日一、实验目的和要求1.掌握对信源变长编码定理的理解;2.掌握信源编码技术,如香农编码,费诺编码,哈夫曼编码或其他无失真信源编码技术;3.对英文小说“Game of Thrones”中出现的26个英文字母和空格符号(一共27个符号)进行信源编码。
4.至少对前两章“Prologue”和“Bran”中出现的符号进行统计。
5.任意选择一种编程平台,C++,Java,Python,Matlab等等。
6.运行程序后,能够在屏幕上显示每一个符号对应的码字,原始信源的熵,平均码字长度,码字长度的方差,以及编码效率。
二、 实验内容1. 对英文小说“Game of Thrones ”中出现的26个英文字母和空格符号(一共27个符号)进行信源编码。
2. 在屏幕上显示每一个符号对应的码字,原始信源的熵,平均码字长度,码字长度的方差,以及编码效率。
三、 实验原理1. 采用哈夫曼编码完成实验要求2.哈夫曼(Haveman )编码算法是满足前缀条件的平均二进制码长最短的编-源输出符号,而将较短的编码码字分配给较大概率的信源输出。
算法是:在信源符号集合中,首先将两个最小概率的信源输出合并为新的输出,其概率是两个相应输出符号概率之和。
这一过程重复下去,直到只剩下一个合并输出为止,这个最后的合并输出符号的概率为1。
这样就得到了一张树图,从树根开始,将编码符号1 和0 分配在同一节点的任意两分支上,这一分配过程重复直到树叶。
从树根到树叶途经支路上的编码最后就构成了一组异前置码,就是霍夫曼编码输出。
离散无记忆信源:例如Uu 1u 2u 3u 4u 5P (U ) = 0.4 0.2 0.2 0.1 0.1通过上表的对信源缩减合并过程,从而完成了对信源的霍夫曼码。
四、实验步骤1.主函数为sourcecoding,用fopen打开text文本,并用fread读取文本,得到ASCII码向量seq;2.利用自己编写statistic.m函数统计seq向量中出现的符号和概率,并通过处理得到所需向量seq2. statistic函数采用了对seq处理的三种形式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if (abs(sum(P)-1)>10e-10)
error('Not a prob.vector,component do not add up to 1'); end
H=(sum(-P.*log2(P)))/(log2(r)+eps);
2、香农编码数值试验算例
单符号离散无记忆信源
=
p=[0.25,0.25,0.2,0.15,0.1,0.05];
[W,L,q]=shannon(p)
很好!输入正确,编码结果如下:
Shannon 编码所得码字W:
[1] [2] [3] [4] [5] [6]
00 01 100 101 1101 11110
H=entropy(P,2); % 计算信源熵
q=H/L; % 计算编码效率
for i=1:nB{i}=i;end
[n,m]=size(W);TEMP=32*ones(n,5);W=[W,TEMP];W=W';
(2)编写M文件fano.m
function [W,L,q]=fano(P)
if (length(find(P<=0)) ~=0)
error('Not a prob.vector,negative component'); end
if (abs(sum(P)-1)>10e-10)
error('Not a prob.vector,component do not add up to 1')end
n=length(P); x=1:n;% 1)排序
[P,x]=array(P,x);
for i=1:n
current_index=i;j=1;current_P=P;
while 1 [next_P,code_num,next_index]=compare(current_P,current_index);
1、香农编码Matlab源码
function [W,L,q]=shannon(p)
if (length(find(p<=0)) ~=0)
error('Not a prob.vector,negative component');end
if (abs(sum(p)-1)>10e-10)
error('Not a prob.vector,component do not add up to 1');end
Shannon 编码平均码字长度L:
2.7000
Shannon 编码的编码效率q:
0.8975
W =
00 01 100 101 1101 11110
L =
2.7000
q =
0.8975
3、费诺编码Matlab源码
(1)编写M文件compare.m
function[next_P,code_num,next_index]=compare(current_P,current_index)
current_index=next_index;current_P=next_P;
W(i,j)=code_num;j=j+1;
if (length(current_P)==1)break;end
l(i)=length(find(abs(W(i,:)) ~=0));end% 得到各码字的长度
L=sum(P.*l); % 计算平均码字长度
s2='Shannon 编码平均码字长度L:'; s3='Shannon 编码的编码效率q:';
disp(s0);disp(s1),disp(B),disp(W);disp(s2),disp(L);disp(s3),disp(q);
function H=entropy(P,r)
if (length(find(P<=0))~=0)% 判断是否符合概率分布条件
n=length(p); x=1:n;[p,x]=array(p,x);% 1)排序
l=ceil(-log2(p));% 2)计算代码组长度l
P(1)=0;n=length(p);%3)计算累加概率P
fori=2:nP(i)=P(i-1)+p(i-1);end
for i=1:n% 4)求得二进制代码组W
n=length(current_P);add(1)=current_P(1);
for i=2:n% 1)求概率的依次累加和
add(i)=0; add(i)=add(i-1)+current_P(i);end
s=add(n);% 2)求概率和最接近的两小组
for i=1:ntemp(i)=abs(s-2*add(i));end
for j=1:l(i)
temp(i,j)=floor(P(i)*2); P(i)=P(i)*2-temp(i,j);end
end
for i=1:n
for j=1:l(i)
if (temp(i,j)==0);W(i,j)=48;
elseW(i,j)=49;end
end
end
L=sum(p.*l); % 计算平均码字长度 H=entropy(p,2); % 计算信源熵
q=H/L; % 计算编码效率
fori=1:nB{i}=i;end
[n,m]=size(W);TEMP=32*ones(n,6);
W=[W,TEMP];W=W';[n,m]=size(W);
W=reshape(W,1,n*m);W=sprintf('%s', W);
s0='很好!输入正确,编码结果如下:';s1='Shannon 编码所得码字W:';
成绩
辽宁工程技术大学上机实验报告
实验名称
信源编码
院系
姓名
实验
目的
简述本次实验目的:
1、理解并掌握香农编码
2、理解并掌握费诺编码
3、理解并掌握霍夫曼编码
实验
准备
你为本次实验做了哪些准备:
认真阅读《信息论》教材,熟悉三种编码的原理以及相应的MATLAB函数指令
实验
进度
本次共有6个练习,完成6
实验
总结
日
本次实验的收获、体会、经验、问题和教训:
[c,k]=min(temp);
if (current_index<=k)
next_index=current_index;code_num=48;
next_P=current_index-k; code_num=49;
next_P=current_P((k+1):n);end