信息论与编码matlab
- 格式:docx
- 大小:128.67 KB
- 文档页数:14
本科毕业设计论文题目:基于MATLAB的通信系统信道编码的研究及其仿真所在系:电气与信息工程系专业:电子信息工程班级:学号学生姓名:指导老师:摘要论文题目:基于MATLAB的通信系统信道编码的研究及仿真学科专业:电子信息工程姓名:班级:电信学号:指导教师:摘要现代社会发展要求通信系统功能越来越强,性能越来越高,构成越来越复杂:另一方面,要求通信系统技术研究和产品开发缩短周期,降低成本,提高水平。
这样尖锐对立的两个方面的要求,只有通过使用强大的计算机辅助分析设计技术和工具才能实现。
现代计算机科学技术快速发展,已经研发出了新一代的可视化的仿真软件。
这些功能强大的仿真软件,使得通信系统仿真的设计和分析过程变得相对直观和便捷,由此也使得通信系统仿真技术得到了更快的发展。
通信系统仿真贯穿着通信系统工程设计的全过程. 对通信系统的发展起着举足轻重的作用。
通信系统仿真具有广泛的适应性和极好的灵活性,有助于我们更好地研究通信系统性能。
本文首先介绍了通信系统仿真的墓本内容,包括通信系统仿真的一般步骤MATLAB中的一种可视化仿真工具Simulink 以及S-函数的相关概念。
从理论上对通信系统进行深入细致的研究是非常必要的。
本文对通信系统中的一些重要环节,包括信道、噪声、模拟信号的数字化传输、信道编码以及信号调制的原理、方法和过程进行了详细的阐述。
理论知识是用来指导具体实践的。
本文在深刻理解通信系统理论的基础上利用MATLAB强大的仿真功能,设计了许多具体的通信系统仿真模型。
在仿真模型设计过程中,本文对模型设计的目的、具体的结构组成、仿真流程以及仿真结果都给出了具体详实的分析和说明。
最后,本文对所做的研究工作进行了总结,并且提出了今后的工作和研究方向。
关键词:通信系统,仿真,MATLAB. S-函数,系统设计西安交通大城市学院本科生毕业设计(论文)ABSTRACTTitle: The communications system based on MATLAB simulation research and channel codingApplicant: Li JieSpeciality: Electronic information projectABSTRACTModern social development requirements will increasingly communication system, performance and high, more and more complex, on the other hand, the requirement communication system technology research and product development and shorten the cycle, reduce cost, improve level. So sharp opposition in two aspects, only through the use of powerful computer aided analysis and design techniques and tools to achieve. The modern computer science and technology development, have developed a new generation of visual simulation software. These powerful simulation software, communication system design and analysis of the simulation process relatively intuitive and convenient, which also makes communication system simulation technology faster development. Communication system simulation through the communication system design process of the development of communication system. Plays an important role. Communication system Simulation has extensive adaptability and good flexibility and help us to better research communications system performance. This paper introduces the system simulation of the content, including the communication system of general steps of MATLAB simulation of a visualization simulation tools and Simulink related concepts - function. From the theory of communication system intensive study is very necessary. This paper is an important link of some of the communication system, including channel simulation signal and noise, the digital transmission, channel coding modulation signal and the principle, method and process in detail. Knowledge is used to guide practice. Based on the profound understanding of the communication system based on the theory of MATLAB simulation, the design of the function of many specific communication system simulation model. In the design process simulation model, this model is designed, specific structure, simulation process and the simulation results are given detailed analysis and explanation. Finally, this paper studies are summarized, and working for the future work and puts forward research direction.KEY WORDS: communication system, simulation of MATLAB. S - function, systemdesign西安交通大城市学院本科生毕业设计(论文)目录目录摘要 (I)ABSTRACT (III)1 绪论 (1)1.1选题意义 (1)1.2 选题目的 (2)1.3 国内外研究现状 (2)1.4 主要研究内容及技术方法 (2)1.5研究课题的方案设计 (3)2 通信原理及通信系统仿真简介 (5)2.1 通信发展及趋势 (5)2.1.1 通信发展史简介 (5)2.2 通信的基本概念 (6)2.3 通信系统仿真及其重要作用 (7)2.3.1 通信系统仿真的概念 (7)2.3.2 通信系统仿真的重要作用 (8)3 通信系统仿真相关内容概述 (11)3.1 通信系统仿真的一般步骤 (11)3.1.1 仿真建模 (11)3.1.2 仿真实验 (11)3.1.3 仿真分析 (12)3.2 用于仿真的软件 (12)3.2.1 MATLAB (12)3.2.2 MATLAB的发展及特点 (13)3.2.3 MATLAB在通信仿真中的应用 (14)3.3 SIMULINK (15)3.3.1 Simulink概述 (15)3.3.2 Simulink仿真过程 (19)3.4 S-函数 (20)4 通信系统信道编码的研究及仿真 (23)4.1 信道编码概念 (23)4.1.1 信道编码概念及任务 (23)4.2 信道编码的分类 (23)4.2.1分组编码 (23)4.2.2循环冗余码 (24)西安交通大城市学院本科生毕业设计(论文)4.2.3卷积编码 (24)4.3仿真系统设计 (25)4.3.1 RS编码纠错性能分析 (25)4.3.2 CRC-16编码检错性能分析 (32)4.3.3卷积编码软判决译码和硬判决译码性能分析 (40)5.1 总结 (49)5.2展望 (49)致谢 (51)参考文献 (53)1 绪论1 绪论1.1选题意义随着现代通信系统的飞速发展,计算机仿真已成为今天分析和设计通信系统的主要工具,在通信系统的研发和教学中具有越来越重要的意义。
1. 简述Shannon 的信源编码定理及信道编码定理。
[10分] 答:熵:H ,信道容量:C ,传信率:R 。
信源编码:当R>H 时,一定存在某种信源编码方式使信息能够完全传送;否则,当R<=H 时,是不可能的。
信道编码:当R<C 时,一定存在某种信道编码方式使信息能够可靠传送;否则,当R>=C 时,是不可能的。
2. 简述差错控制编码的基本原理。
为何软判决译码比硬判决译码可以得到较高的编码增益?[10分]差错控制编码的定理是发送方对准备传输的数据进行抗干扰编码,即按某种算法附加上一定的冗余位,构成一个码字后再发送。
接收方收到数据后进行校验,即检查信息为和附加冗余位之间的关系,以检查传输过程中是否有差错发生。
硬判决译码,即在译码前对接收量进行二电平量化后再进行判决译码。
种种量化方式比较粗糙,将丢失较多有用信息。
而软判决译码的量化电平数Q>2,(常取Q>8),量化越精细,损失也就越小,故将获得较硬判决译码更大的编码增益。
3. 一个数据传输信道,带宽为1MHz,信噪比为50dB,计算在这个信道上能实现的最大信息传输率。
为什么信息传输率是受限的?[10分] 16.7Mbps信息传输率受限是因为信道带宽限制,以及信道中的噪声干扰。
4. 设一个[7,4]码的生成阵为试求该码的全部码字、一致校验矩阵以及最小汉明距离。
[20分]信息位有四位,应有16种组合——信息组0000 0001 0010 00110100 0101 0110 01111000 1001 1010 10111100 1101 1110 1111C={C| c=mG}⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=0001110001001101001011000111G全部码字:0000000 0001110 0010011 00111010100101 0101011 0110110 01110001000111 1001001 1010100 10110101100010 1101100 1110001 11111111一致校验矩阵G=[I A]H=[AT I]最小汉明距离:第4,5,6列的和为0,所以最小汉明距离为:35.循环冗余校验(CRC)的生成多项式为CRC-16: x16+x15+x2+1,试画出其编译码电路。
Matlab中的熵和信息论应用引言在科学与工程领域中,信息论是一门重要的研究领域,而熵则是信息论中的核心概念之一。
在Matlab软件中,我们可以利用其强大的计算能力和丰富的函数库来进行熵的计算和信息论的应用。
本文将介绍Matlab中的熵计算方法和一些常见的信息论应用,包括信道容量、数据压缩和密钥生成等。
一、熵的计算方法熵是信息论中用来度量信源的不确定性或信息的平均量的指标。
在Matlab中,我们可以使用Entropy函数来计算熵。
该函数的用法如下:entropy(X)其中,X是一个向量或矩阵,表示待计算熵的数据。
函数将返回熵的值。
例如,假设我们有一个向量X=[1 2 2 3 4 4 4 4],我们可以使用以下代码来计算熵:X = [1 2 2 3 4 4 4 4];entropy(X)运行结果将返回熵的值。
二、信道容量信道容量是信息论中一个重要的概念,它表示在给定信道条件下,通过信道传输的最大信息传输速率。
在Matlab中,我们可以使用Capacity函数来计算信道容量。
该函数的用法如下:C = capacity(channel,SNR)其中,channel是信道模型,SNR是信噪比。
函数将返回信道容量C的值。
例如,假设我们有一个二进制对称信道,信噪比为10dB,我们可以使用以下代码来计算信道容量:channel = 'BSC';SNR = 10;C = capacity(channel,SNR)运行结果将返回信道容量C的值。
三、数据压缩数据压缩是信息论中的一个重要应用领域。
在Matlab中,我们可以使用Huffman编码来进行数据的无损压缩。
Huffman编码是一种基于字符出现频率的编码方式,出现频率高的字符将被赋予较短的编码,从而实现数据压缩。
以下是在Matlab中实现Huffman编码的基本步骤:1. 统计待压缩数据中每个字符的出现频率;2. 构建Huffman树,树的叶节点代表每个字符,节点的权值为对应字符的频率;3. 从Huffman树的根节点开始,遍历树并分配0或1给每个左/右子树;4. 将Huffman编码表保存到文件;5. 对原始数据进行编码,并将编码后的数据保存到文件。
------------------------------------------------------------精品文档--------------------------------------------------------函数实现哈夫曼编码的算法编写Matlab 设计目的和意义一、在数字信号的处理和传数字信号充斥着各个角落。
在当今信息化时代,一个信源编码的好坏优劣直接影响到了信源编码是首先遇到的问题,输中,成为了大如何使编码的效率最高,后面的处理和传输。
如何无失真地编码,家研究的对象。
它由哈夫曼编码是一种变长的编码方案。
哈夫曼编码就是其中的一种,码元内容为到根结点的路径中与父结点的最优二叉树既哈夫曼树得到编码,可以根所以哈夫曼在编码在数字通信中有着重要的意义。
左右子树的标识。
既实现了信源的无失真地据信源符号的使用概率的高低来确定码元的长度。
编码,又使得编码的效率最高。
设计原理二、哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。
uffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫作Huffman 编码。
而哈夫曼编码的第一步工作就是构造哈夫曼树。
哈夫曼二叉树的构造方法原则如下,假设有n个权值,则构造出的哈夫曼树有n个叶子结点。
n个权值分别设为w1、w2、…、wn,则哈夫曼树的构造规则为:(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;从森林中删除选取的两棵树,并将新树加入森林;(3).步,直到森林中只剩一棵树为止,该树即为所求得的哈(3)(2)(4)、重复夫曼树。
具体过程如下图1产所示:(例)图1 哈夫曼树构建过程哈夫曼树构造成功后,就可以根据哈夫曼树对信源符号进行哈夫曼编码。
encoder and decoder matlab代码在数字信号处理和通信领域,编码器和解码器是常用的工具,用于将原始数据转换为编码数据,并在接收端将编码数据解码还原为原始数据。
在MATLAB中,我们可以使用编程语言和内置函数来实现编码器和解码器的功能。
编码器的作用是将原始数据转换为编码数据,以便于传输和存储。
常见的编码技术包括哈夫曼编码、经向编码、熵编码等。
下面是一个使用MATLAB实现经向编码的示例:```matlabfunction encoded_data = encoder(data)% 将原始数据转换为二进制binary_data = dec2bin(data);% 经向编码encoded_data = '';for i = 1:length(binary_data)current_bit = binary_data(i);if current_bit == '0'encoded_data = strcat(encoded_data, '00');elseencoded_data = strcat(encoded_data, '11');endendend```解码器的作用是将编码数据解码还原为原始数据。
解码器需要根据编码规则逆向进行解码操作。
下面是一个使用MATLAB实现经向解码的示例:```matlabfunction decoded_data = decoder(encoded_data)% 经向解码decoded_data = '';for i = 1:2:length(encoded_data)current_bits = encoded_data(i:i+1);if current_bits == '00'decoded_data = strcat(decoded_data, '0');elsedecoded_data = strcat(decoded_data, '1');endend% 将二进制数据转换为十进制decoded_data = bin2dec(decoded_data);end```在使用以上代码时,可以先调用编码器函数进行编码,然后将编码数据传输给接收端,接收端调用解码器函数解码还原为原始数据。
MATLAB实现汉明码编码译码MATLAB实现汉明码编码译码汉明码的编码就是如何根据信息位数k,求出纠正一个错误的监督矩阵H,然后根据H求出信息位所对应的码字。
1、根据已知的信息位数k,从汉明不等式中求出校验位数m=n-k;2、在每个码字C:3)用二进制数字表示2m-1列,得到2m-1列和m行监督矩阵H;4)用3步的H形成HCT =0,从而得出m个监督方程;5)将已知的信息代入方程组,然后求出满足上述方程组的监督位c (i=0,1,?,m一1)。
例如,用以上方法,很容易求出[7,4,3]汉明码的监督矩阵:11100H11010clear及编码所对应的码字为C=011001。
m=3; %给定m=3的汉明码[h,g,n,k]=hammgen(m);msg=[0 0 0 1;0 0 0 1;0 0 0 1;0 0 1 1;0 0 1 1;0 1 0 1;0 1 1 0;0 1 1 1;1 0 0 0;1 0 0 1;10 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 11];code=encode(msg,n,k,'hamming/binary') %编码C=mod(code*h',2) %对伴随式除2取余数newmsg=decode(code,n,k,'hamming/binary') %解码d_min=min(sum((code(2:2^k,:))')) %最小码距运行结果:>> hangmingcode =1000110001100011100100111110000011010011011101111C =newmsg =111100000000000000 00 00 00 00 00 00 00 00 00 00 000001 011011 11 000001001101111011d_min =3clearm=3; %给定m=3的汉明码[h,g,n,k]=hammgen(m);msg=[0 0 0 1;0 0 0 1;0 0 0 1;0 0 1 1;0 0 1 1;0 1 0 1;0 1 1 0;0 1 1 1;1 0 0 0;1 0 0 1;10 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 11];code=encode(msg,n,k,'hamming/binary') %编码subplot(121)plot(code)C=mod(code*h',2) %对伴随式除2取余数newmsg=decode(code,n,k,'hamming/binary') %解码subplot(122)plot(newmsg)d_min=min(sum((code(2:2^k,:))')) %最小码距运行结果:10.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.201 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.20。
浅谈信息论与编码课程的理论与实验教学改革作者:郭欣来源:《科技资讯》2012年第28期摘要:信息论与编码课程是通信信息类本科的专业基础课,针对该课程的特点和目前教学中存在的问题,本文从理论教学和实验教学两个方面对课程教学改革进行了探索,提出了该课程在教学和实验环节都需要的改进之处。
关键词:信息论编码理论教学实验教学教学改革中图分类号:G64 文献标识码:A文章编号:1672-3791(2012)10(a)-0007-01进入21世纪以来,信息日益成为大家关注的焦点。
信息有广义信息和狭义信息之分。
《信息论与编码》是一门理论和实践紧密结合的课程,书中大多讨论的是关于狭义信息的最基本的理论,内容所涉及生活和工业领域非常广泛,包括信号滤波和预测、统计检测和估计、移动通信、遗传学、神经生理学,社会学等等有关信息的问题。
信息论与编码是电子信息工程、通信工程和信息与计算科学等专业的一门重要专业基础课。
本人结合3年的信息论课程的授课经验,针对目前教学过程中的出现的问题进行了分析,提出一些理论与实验相结合的教学改革方法。
1 信息论与编码课程的特点和存在的问题1.1 所需准备大量的基础课程,知识量大信息论与编码课程涉及大量数学知识,主要包括高等数学、线性代数、离散数学、概率论与数理统计、随机过程以及数值分析等。
这些数学知识本身比较复杂、抽象,对于非数学专业的学生来讲,由于缺乏系统的学习,因此对繁杂的数学定理及其推理感到抽象和枯燥,比较难以接受,进而形成畏难情绪。
而数学专业的学生在储备了大量的数学知识之后,还需要掌握一些通信方面的基础专业知识。
这方面的薄弱使得他们在学习的过程中往往觉得穿插生硬,容易失去学习兴趣。
1.2 概念抽象,证明推导过程复杂信息论与编码课程中大量的概率论的知识和随机过程的知识,比如马氏链的稳定的极限熵,香农极限的推导过程,信道定理推导过程中的大量不等式证明都使得学生感觉这门课程更像纯数学理论,一直在做逻辑证明。
matlab卷积编码与viterbi译码的实现MATLAB中viterbi译码算法讨论⼤家可以再评论区交流!!!MATLAB中实现viterbi译码的函数为:convenc其中:code = convenc(msg,trellis)vitdec其中:vitdec(code,trellis,tblen,opmode,dectype)code卷积编码,trellis⽹格表,tblen回溯长度,opmode:cont、term、trunc,dectype:unquant、hard、soft;本⼈最近在做⼀个关于viterbi译码算法,最终在FPGA中实现,在FPGA中最终的实现⽅案为xillinx IP核实现。
在此之前⽤MATLAB进⾏仿真验证。
matlab程序:Tre = poly2trellis(7,[133 171]);通过poly2trellis⽣成逻辑关系图,如下图所⽰。
逻辑关系图%卷积编码:msg = [0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];code = convenc(msg,Tre);%code = [0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0];%这是通过convenc函数⽣成的卷积码%vitdec译码:%在vitdec译码过程中采⽤硬判决,通过不同的tblen和opmode来找出其中关系。
%(1) opmode = conttblen = 12;msg_dat = vitdec(code,Tre,tblen,'cont','hard');%msg_dat =[ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 ];%通过了解到cont模式中,vitdec译码会有延迟,延迟的长度为tblen长度,所以在此对vitdec进⾏修改code_temp = [code,zeros(1,24)];msg_temp = vitdec(code_temp ,T,12,'cont','hard')msg_dat = msg_temp(13:end);%msg_dat = [ 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];%此时vitdec译码出来的数据和信源⼀样tblen = 18;code_temp = [code,zeros(1,24)];msg_temp = vitdec(code_temp ,T,12,'cont','hard')msg_dat = msg_temp(13:end);%msg_dat = [ 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0];%此时vitdec译码出来的数据和信源在后⾯最后⼀位不⼀样%(2) opmode = termtblen = 12;msg_dat = vitdec(code,Tre,tblen,'term','hard');%msg_dat = [0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0];%此时vitdec译码出来的数据和信源⼀样前16位和信源⼀样后⾯的就出错了tblen = 18;msg_dat = vitdec(code,Tre,tblen,'term','hard');%msg_dat = [0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0];%此时vitdec译码出来的数据和信源⼀样前16位和信源⼀样后⾯的就出错了%(3)opmode = trunctblen = 12;msg_dat = vitdec(code,Tre,tblen,'trunc','hard');%msg_dat = [ 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];%此时vitdec译码出来的数据和信源⼀样tblen = 18;msg_dat = vitdec(code,Tre,tblen,'trunc','hard');%msg_dat = [ 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];%此时vitdec译码出来的数据和信源⼀样总结:以上通过⽐较tblen和opmode模式的不同对产⽣的结果,其中cont和trunc的模式总结起来就是cont有tblen延迟,但是trunc没有。
一、引言咬尾卷积编码解码是一种常用的数字通信技术,能够有效地对传输的数据进行编码和解码,提高数据传输的可靠性和稳定性。
在数字通信领域,咬尾卷积编码解码已经被广泛应用于各种通信系统中。
在本文中,将对咬尾卷积编码解码在MATLAB中的实现进行介绍。
二、咬尾卷积编码解码的原理1. 咬尾卷积编码的原理2. 咬尾卷积解码的原理三、MATLAB中的咬尾卷积编码解码实现1. MATLAB中的咬尾卷积编码2. MATLAB中的咬尾卷积解码四、使用MATLAB进行咬尾卷积编码解码的案例分析1. 案例一:实现一个简单的咬尾卷积编码解码系统2. 案例二:利用MATLAB进行咬尾卷积编码解码的性能分析五、结论在本文中,通过对咬尾卷积编码解码原理进行介绍,以及在MATLAB 中对其实现的讲解,说明了咬尾卷积编码解码在数字通信中的重要性和广泛应用。
通过案例分析,也验证了MATLAB在实现咬尾卷积编码解码时的可行性和有效性。
希望本文对读者在理解和应用咬尾卷积编码解码方面有所帮助,并能够对相关领域的研究工作提供参考。
六、参考文献1. 张三, 李四, 王五. 咬尾卷积编码解码原理与实现[M]. 北京: 电子工业出版社, 2005.2. 王六, 赵七. MATLAB在数字通信中的应用[M]. 上海: 上海科学技术出版社, 2010.以上就是我整理的关于咬尾卷积编码解码在MATLAB中的文章,希望对您有所帮助。
咬尾卷积编码解码是一种在数字通信领域广泛应用的技术,它能够提高数据传输的可靠性和稳定性。
本文将继续介绍咬尾卷积编码解码的原理和在MATLAB中的实现,并结合案例分析展示其在实际应用中的效果和性能。
在咬尾卷积编码的原理部分,我们已经介绍了它的基本原理,即通过卷积操作对输入数据进行编码,生成冗余的校验码以增强数据的容错能力。
而咬尾卷积解码则是通过对收到的编码信号进行解码,尽可能地还原原始数据。
在MATLAB中,咬尾卷积编码可以通过使用内置的函数或者自定义函数来实现。
信息论与编码第⼀章1、信息,信号,消息的区别信息:是事物运动状态或存在⽅式的不确定性的描述消息是信息的载体,信号是消息的运载⼯具。
2、1948年以“通信的数学理论”(A mathematical theory of communication )为题公开发表,标志着信息论的正式诞⽣。
信息论创始⼈:C.E.Shannon(⾹农)第⼆章1、⾃信息量:⼀个随机事件发⽣某⼀结果后所带来的信息量称为⾃信息量,简称⾃信息。
单位:⽐特(2为底)、奈特、笛特(哈特)2、⾃信息量的性质(1)是⾮负值(2) =1时, =0, =1说明该事件是必然事件。
(3) =0时, = , =0说明该事件是不可能事件。
(4)是的单调递减函数。
3、信源熵:各离散消息⾃信息量的数学期望,即信源的平均信息量。
)(log )(])(1[log )]([)( 212i ni i i i a p a p a p E a I E X H ∑=-===单位:⽐特/符号。
(底数不同,单位不同)信源的信息熵;⾹农熵;⽆条件熵;熵函数;熵。
4、信源熵与信息量的⽐较(书14页例2.2.2)()log () 2.1.3 i i I a p a =-()5、信源熵的意义(含义):(1)信源熵H(X)表⽰信源输出后,离散消息所提供的平均信息量。
(2)信源熵H(X)表⽰信源输出前,信源的平均不确定度。
(3)信源熵H(X)反映了变量X 的随机性。
6、条件熵:(书15页例2.2.3) 7、联合熵:8、信源熵,条件熵,联合熵三者之间的关系:H(XY)= H(X)+H(Y/X) H(XY)= H(Y)+H(X/Y)条件熵⼩于⽆条件熵,H(Y/X)≤H(Y)。
当且仅当y 和x 相互独⽴p(y/x)=p(y),H(Y/X)=H(Y)。
两个条件下的条件熵⼩于⼀个条件下的条件熵H(Z/X,Y)≤H(Z/Y)。
当且仅当p(z/x,y)=p(z/y)时取等号。
联合熵⼩于信源熵之和, H(YX)≤H(Y)+H(X)当两个集合相互独⽴时得联合熵的最⼤值 H(XY)max =H(X)+H(Y) 9、信息熵的基本性质:(1)⾮负性;(2)确定性;(3)对称性;(4)扩展性(5)可加性 ( H(XY) = H(X)+ H(Y) X 和Y 独⽴ H (XY )=H (X )+ H (Y/X )H (XY )=H (Y )+ H (X/Y ) )(6)(重点)极值性(最⼤离散熵定理):信源中包含n 个不同离散消息时,信源熵H(X)有当且仅当X 中各个消息出现的概率全相等时,上式取等号。
信息论实验报告 姓名 胡小辉 班级 电子信息工程0902 学号 ********** 1. 实验目的
1、掌握哈夫曼编码、费诺编码、汉明码原理;
2、熟练掌握哈夫曼树的生成方法; 3、学会利用matlab、C语言等实现Huffman编码、费诺编码以及hamming编码。
2. 实验原理 Huffman编码: 哈夫曼树的定义:假设有n个权值,试构造一颗有n个叶子节点的二叉树,每个叶子带权值为wi,其中树带权路径最小的二叉树成为哈夫曼树或者最优二叉树;
实现Huffman编码原理的步骤如下: 1. 首先将信源符号集中的符号按概率大小从大到小排列。 2. 用0和1表示概率最小的两个符号。可用0表示概率小的符 号,也可用1表示概率小的符号,但整个编码需保持一致。 3. 将这两个概率最小的符号合并成一个符号,合并符号概率为 最小概率之和,将合并后的符号与其余符号组成一个N-1的新信源符号集,称之为缩减符号集。 4. 对缩减符号集用步骤1,2操作 5. 以此类推,直到只剩两个符号,将0和1分别赋予它们。 6. 根据以上步骤,得到0,1赋值,画出Huffman码树,并从最 后一个合并符号回朔得到Huffmaan编码。
费诺编码: 费诺编码的实现步骤: 1、将信源消息符号按其出现的概率大小依次排列: 。 2、将依次排列的信源符号按概率值分为两大组,使两个组的概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。 3、将每一大组的信源符号再分为两组,使划分后的两个组的概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。 4、如此重复,直至每个组只剩下一个信源符号为止。 5、信源符号所对应的码字即为费诺码。
hamming编码: 若一致监督矩阵H 的列是由不全为0且互不相同的所有二进制m(m≥2的正整数)重组成,则由此H矩阵得到的线性分组码称为[2m-1,2m-1-m,3]汉明码。
我们通过(7,4)汉明码的例子来说明如何具体构造这种码。设分组码(n,k)中,k = 4,为能纠正一位误码,要求r≥3。现取r=3,则n=k+r=7。我们用a0ala2a3a4a5a6表示这7个码元,用S1、S2、S3表示由三个监督方程式计算得到的校正子,并假设三位S1、S2、S3校正子码组与误码位置的对应关系如表1所示。
S1S2S3 错码位置 S1S2S3 错码位置 001 a0 101 a4 010 al 110 a5 100 a2 111 a6 011 a3 000 无错码 表1 校正子和错码位置关系 由表可知,当误码位置在a2、a4、a5、a6时,校正子S1=1;否则S1=0。因此有S1
=a6⊕a5⊕a4⊕a2,同理有S2=a6⊕a5⊕a3⊕a1和S3=a6⊕a4⊕a3⊕a0。在编码时a6、
a5、a4、a3为信息码元,a2、a1、a0为监督码元。则监督码元可由以下监督方程唯一确定 a6⊕a5⊕a4⊕a2 = 0
a6⊕a5⊕a3⊕a1 = 0 (1.1.1)
a6⊕a4⊕a3⊕a0 = 0 也即 a2=a6⊕a5⊕a4
a1=a6⊕a5⊕a3 ( 1.1.2)
a0 = a6⊕a4⊕a3
由上面方程可得到表2所示的16个许用码组。在接收端收到每个码组后,计算出S1、S2、S3,如果不全为0,则表示存在错误,可以由表1确定错误位置并予以纠正。举个例子,假设收到码组为0000011,可算出S1S2S3=011,由表1可知在a3上有一误码。通过观察可以看出,上述(7,4)码的最小码距为dmin=3,纠正一个误码或检测两个误码。如果超出纠错能力则反而会因“乱纠”出现新的误码.
信息位 监督位 信息位 监督位 a6a5a4a3 a2a1a0 a6a5a4a3 a2a1a0
0000 0001 0010 0011 0100 0101 0110 0111 000 011 101 110 110 101 011 000 1000 1001 1010 1011 1100 1101 1110 1111 111 100 010 001 001 010 100 111
表2 (7,4)汉明码的许用码组 3.1 (7,4)汉明码的编码思路 (7,4)汉明码的编码就是将输入的四位信息码编成七位的汉明码,即加入三位监督位。根据式(2.2.0)A = [a6 a5 a4 a3] ·G可知,信息码与生成矩阵G的乘积就是编好以后的(7,4)汉明码,而生成矩阵G又是已知的,由式(1.1.9)得 1 0 0 0 1 1 1 G = 0 1 0 0 1 1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 1 所以,可以得出如下方程组 a6 = a6 a5 = a5 a4 = a4 a3 = a3 a2 = a6 + a5 + a4 a1 = a6 + a5 + a3 a0 = a6 + a4 + a3
根据此式子编出编码程序。 3. 实验过程及结果 1、 哈弗曼编码 例如:当p1=0.3、p2=0.15、p3=0.05、p4=0.1、p5=0.4 则根据其原理得到的matlab程序如下: clc; clear; A=[0.3,0.15,0.05,0.1,0.4];%信源消息的概率序列 A=fliplr(sort(A));%按降序排列 T=A; [m,n]=size(A); B=zeros(n,n-1);%空的编码表(矩阵) for i=1:n B(i,1)=T(i);%生成编码表的第一列 end r=B(i,1)+B(i-1,1);%最后两个元素相加 T(n-1)=r; T(n)=0; T=fliplr(sort(T)); t=n-1; for j=2:n-1%生成编码表的其他各列 for i=1:t B(i,j)=T(i); end K=find(T==r); B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在 %该列的位置 r=(B(t-1,j)+B(t,j));%最后两个元素相加 T(t-1)=r; T(t)=0; T=fliplr(sort(T)); t=t-1; end B;%输出编码表 END1=sym('[0,1]');%给最后一列的元素编码 END=END1; t=3; d=1; for j=n-2:-1:1%从倒数第二列开始依次对各列元素编码 for i=1:t-2 if i>1 & B(i,j)==B(i-1,j) d=d+1; else d=1; end B(B(n,j+1),j+1)=-1; temp=B(:,j+1);
x=find(temp==B(i,j)); END(i)=END1(x(d)); end y=B(n,j+1); END(t-1)=[char(END1(y)),'0']; END(t)=[char(END1(y)),'1']; t=t+1; END1=END; end A%排序后的原概率序列 END%编码结果 for i=1:n [a,b]=size(char(END(i))); L(i)=b; end avlen=sum(L.*A)%平均码长 H1=log2(A); H=-A*(H1')%熵 P=H/avlen%编码效率 输出结果: 费诺编码: 同样,例如:p1=0.3、p2=0.15、p3=0.05、p4=0.1、p5=0.4时 根据其原理所得到的matlab程序如下: clc; clear; A=[0.3,0.15,0.05,0.1,0.4]; A=fliplr(sort(A));%降序排列 [m,n]=size(A); for i=1:n B(i,1)=A(i);%生成B的第1列 end %生成B第2列的元素 a=sum(B(:,1))/2; for k=1:n-1 if abs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1,1))-a) break; end end for i=1:n%生成B第2列的元素 if i<=k B(i,2)=0; else B(i,2)=1; end end %生成第一次编码的结果 END=B(:,2)'; END=sym(END); %生成第3列及以后几列的各元素 j=3; while (j~=0) p=1; while(p<=n) x=B(p,j-1); for q=p:n if x==-1 break; else if B(q,j-1)==x y=1; continue;