信息论matlab的实验用到的编码
- 格式:doc
- 大小:94.00 KB
- 文档页数:17
霍夫曼编码的m a t l a b 实现(信源编码实验)重庆交通大学信息科学与工程学院综合性设计性实验报告专业班级:通信工程2012级1班学号: 631206040118姓名:王松实验所属课程:信息论与编码实验室(中心):软件与通信实验中心指导教师:黄大荣2015年4月霍夫曼编码的matlab实现一、实验目的和要求。
利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。
本实验用Matlab语言编程实现霍夫曼(Huffman)编码。
二、实验原理。
霍夫曼(Huffman)编码算法是满足前缀条件的平均二进制码长最短的编-源输出符号,而将较短的编码码字分配给较大概率的信源输出。
算法是:在信源符号集合中,首先将两个最小概率的信源输出合并为新的输出,其概率是两个相应输出符号概率之和。
这一过程重复下去,直到只剩下一个合并输出为止,这个最后的合并输出符号的概率为1。
这样就得到了一张树图,从树根开始,将编码符号1 和0 分配在同一节点的任意两分支上,这一分配过程重复直到树叶。
从树根到树叶途经支路上的编码最后就构成了一组异前置码,就是霍夫曼编码输出。
离散无记忆信源:例如U u1u2u3u4u5P(U) = 0.4 0.2 0.2 0.1 0.1通过上表的对信源缩减合并过程,从而完成了对信源的霍夫曼编码。
三、实验步骤分为两步,首先是码树形成过程:对信源概率进行合并形成编码码树。
然后是码树回溯过程:在码树上分配编码码字并最终得到霍夫曼编码。
1、码树形成过程:将信源概率按照从小到大顺序排序并建立相应的位置索引。
然后按上述规则进行信源合并,再对信源进行排序并建立新的位置索引,直到合并结束。
在这一过程中每一次都把排序后的信源概率存入矩阵G中,位置索引存入矩阵Index中。
这样,由排序之后的概率矩阵G以及索引矩阵Index就可以恢复原概率矩阵P了,从而保证了回溯过程能够进行下去。
2、码树回溯过程:在码树上分配编码码字并最终得到Huffman 编码。
信息论与编码实习报告指导老师:姓名:班级:学号:实验一绘制二进制熵函数曲线一、内容用Matlab软件制作二进制熵函数曲线。
二、要求1.掌握Matlab绘图函数2.掌握、理解熵函数表达式及其性质三.Matlab程序及实验结果1.matlab程序:p=0.00001:0.001:1;h=-p.*log2(p)-(1-p).*log2(1-p);plot(p,h);title('二进制熵函数曲线');ylabel('H(P,1-P)')2.运行结果:结果分析:从图中可已看出当p=0.5即信源等概时熵取得最大值。
实验二一般信道容量迭代算法一、内容编程实现一般信道容量迭代算法。
伪代码见教材。
二、要求1.掌握一般信道容量迭代算法的原理2.掌握MA TLAB开发环境的使用(尤其是程序调试技巧),或者使用C语言完成程序设计三.Matlab程序及运行结果1.matlab程序:clc;clear all;N = input('输入信源符号X的个数N=');M = input('输入信源符号Y的个数M=');p_yx=zeros(N,M); %程序设计需要信道矩阵初始化为零fprintf('输入信道矩阵概率\n')for i=1:Nfor j=1:Mp_yx(i,j)=input('p_yx='); %输入信道矩阵概率if p_yx(i)<0error('不符合概率分布')endendEndfor i=1:N %各行概率累加求和s(i)=0;for j=1:Ms(i)=s(i)+p_yx(i,j);endendfor i=1:N %判断是否符合概率分布if (s(i)<=0.999999||s(i)>=1.000001)error('不符合概率分布')endendb=input('输入迭代精度:'); %输入迭代精度for i=1:Np(i)=1.0/N; %取初始概率为均匀分布endfor j=1:M %计算Q(j)Q(j)=0;for i=1:NQ(j)=Q(j)+p(i)*p_yx(i,j);endendfor i=1:N %计算F(i) f(i)=0;for j=1:Mif(p_yx(i,j)==0)f(i)=f(i)+0;elsef(i)=f(i)+p_yx(i,j)*log(p_yx(i,j)/Q(j));endendF(i)=exp(f(i));endx=0;for i=1:N %计算x x=x+p(i)*F(i);endIL=log2(x); %计算ILIU=log2(max(F)); %计算IUn=1;while((IU-IL)>=b) %迭代计算for i=1:Np(i)=p(i)*F(i)/x; %重新赋值p(i) endfor j=1:M %计算Q(j) Q(j)=0;for i=1:NQ(j)=Q(j)+p(i)*p_yx(i,j);endendfor i=1:N %计算F(i) f(i)=0;for j=1:Mif(p_yx(i,j)==0)f(i)=f(i)+0;elsef(i)=f(i)+p_yx(i,j)*log(p_yx(i,j)/Q(j));endEndF(i)=exp(f(i));endx=0;for i=1:N %计算xx=x+p(i)*F(i);endIL=log2(x); %计算ILIU=log2(max(F)); %计算IUn=n+1;endfprintf('信道矩阵为:\n');disp(p_yx);fprintf('迭代次数n=%d\n',n);fprintf('信道容量C=%f比特/符号',IL);2.运行结果为:若输入信道矩阵为:0.8500 0.15000.7500 0.2500则运行结果为:实验四线性分组码的信道编码和译码一、内容编程实现线性分组码(6,2)重复码的信道编码和译码。
《信息论》实验指导书—-应用M A T L A B软件实现-CAL-FENGHAI.-(YICAI)-Company One1《信息与编码理论》上机实验指导书———————应用MATLAB软件实现UPC通信工程系前言本实验系列是采用MATLAB软件,主要针对《信息论基础》课程中的相关内容进行的实验。
MATLAB是一完整的并可扩展的计算机环境,是一种进行科学和工程计算的交互式程序语言。
它的基本数据单元是不需要制定维数的矩阵,它可直接用于表达数学的算式和技术概念,解决同样的数值计算问题,使用MATLAB要比使用Basic、Fortran和C语言等提高效率许多倍。
MATLAB还是一种有利的教学工具,在大学的线性代数课程以及其它领域的高一级课程的教学中,已称为标准的教学工具。
该指导书共安排了4个实验,现就一些情况作简要说明:各实验要求学生在MATLAB系统上尽量独立完成,弄懂。
实验内容紧扣课程教学内容的各主要基本概念,希望同学们在完成每个实验后,对所学的内容起到巩固和加深理解的作用。
每个实验做完后必须交一份实验报告。
恳请各位实验老师和同学在实验中提出宝贵意见,以利于以后改进提高。
目录实验一离散信源及其信息测度 (3)实验二离散信道及其容量 (6)实验三无失真信源编码 (8)实验四有噪信道编码 (10)附录部分常用MATLAB命令 (12)实验一 离散信源及其信息测度一、[实验目的]离散无记忆信源是一种最简单且最重要的信源,可以用完备的离散型概率空间来描述。
本实验通过计算给定的信源的熵,加深对信源及其扩展信源的熵的概念的理解。
二、[实验环境]windows XP,MATLAB三、[实验原理]信源输出的各消息的自信息量的数学期望为信源的信息熵,表达式如下 1()[()]()log ()qi i i H X E I xi p x p x ===-∑信源熵是信源的统计平均不确定性的描述,是概率函数()p 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。
MATLAB中的信号编码与解码技巧引言现代通信系统中,信号编码和解码是关键技术,它们在数据传输和存储中扮演着至关重要的角色。
MATLAB作为一种强大的数学计算软件和编程环境,提供了丰富的功能和工具,用于信号处理和通信系统建模。
本文将探讨MATLAB中的一些常见信号编码和解码技巧,以提供读者对这一主题的深入理解。
一、数字信号编码1. PCM编码脉冲编码调制(PCM)是一种常用的数字信号编码技术,在语音和音频传输中广泛应用。
MATLAB提供了丰富的函数,可以帮助我们实现PCM编码。
例如,使用`audioread`函数可以读取音频文件,并使用`pcmenco`函数进行PCM编码。
2. Huffman编码霍夫曼编码是一种无损数据压缩算法,可以根据数据的统计特性进行代码设计。
在MATLAB中,`huffmandict`函数可用于生成霍夫曼编码字典,`huffmanenco`函数用于对数据进行编码,`huffmandeco`函数用于解码。
二、模拟信号编码1. AM编码幅度调制(AM)是一种传统的模拟信号编码技术,常用于广播和无线电通信。
在MATLAB中,我们可以使用`ammod`函数实现AM编码,并使用`amdemod`函数进行解调。
2. FM编码频率调制(FM)是另一种常见的模拟信号编码技术,广泛应用于音频和视频传输。
在MATLAB中,`fmmod`函数可用于FM编码,`fmdemod`函数可用于解调。
三、数字信号解码1. PCM解码PCM编码的逆过程是PCM解码,MATLAB中的`pcmdeco`函数可用于解码PCM信号并恢复原始信号。
2. Huffman解码通过使用霍夫曼编码表,我们可以对霍夫曼编码进行解码。
在MATLAB中,`huffmandeco`函数可用于解码数据,并使用`huffmanenco`函数所生成的编码字典。
四、应用实例:数字音频编码数字音频编码是一个实际应用领域,通过对音频信号进行编码和解码,可以实现音频数据的压缩和传输。
实验一:计算离散信源的熵一、实验设备:1、计算机2、软件:Matlab二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程;三、实验内容:1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。
3、将程序在计算机上仿真实现,验证程序的正确性并完成习题。
四、求解:1、习题:A 地天气预报构成的信源空间为:()⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡6/14/14/13/1x p X 大雨小雨多云晴 B 地信源空间为:17(),88Y p y ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦ 小雨晴 求各种天气的自信息量和此两个信源的熵。
2、程序代码:p1=[1/3,1/4,1/4,1/6];p2=[7/8,1/8];H1=0.0;H2=0.0;I=[];J=[];for i=1:4H1=H1+p1(i)*log2(1/p1(i));I(i)=log2(1/p1(i));enddisp('自信息I分别为:');Idisp('信息熵H1为:');H1for j=1:2H2=H2+p2(j)*log2(1/p2(j));J(j)=log2(1/p2(j));enddisp('自信息J分别为');Jdisp('信息熵H2为:');H23、运行结果:自信息量I分别为:I = 1.5850 2.0000 2.0000 2.5850信源熵H1为:H1 = 1.9591自信息量J分别为:J =0.1926 3.0000信源熵H2为:H2 =0.54364、分析:答案是:I =1.5850 2.0000 2.0000 2.5850 J =0.1926 3.0000H1 =1.9591; H2 =0.5436实验2:信道容量一、实验设备:1、计算机2、软件:Matlab二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程;三、实验内容:1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。
实验三-⾹农编码的MATLAB 实现信息论编码实验3~9连载,更多看专栏。
⾹农编码仿真实现⼀、⾹农编码的原理⾹农码严格意义上来说不是最佳码,与基于符号概率进⾏映射的哈夫曼编码不同的地⽅在于,⾹农码基于累积概率的⼆进制数进⾏编码。
编码步骤:1. 将概率分布列降序排序;2. 求出每⼀⾏所对应的累加概率 P ;3. 根据累加概率 P 计算该符号对应⾹农码的长度 L ;4. 将累加概率 P 转换成⼆进制数,取其前 L 位,即为该符号的⾹农码。
对于⾹农码的评价:⾹农编码的效率不⾼,实⽤性不⼤,但对其他编码⽅法有很好的理论指导意义。
⼀般情况下,按照⾹农编码⽅法编出来的码,其平均码长不是最短的,即不是紧致码(最佳码)。
只有每⼀个符号的概率都是1/2的整数倍时,编码效率才能达到最⾼。
⼆、⾹农编码实例以后有空再补充吧~三、程序及流程图下⾯是代码:i i i i i%%实验三:⾹农编码仿真实验clear allclc%⽤户输⼊符号概率p =input('请输⼊离散信源概率分布,例如[0.5,0.5]:\n');N =length(p);L =ceil(-log2(p));%获得码长向量,元素表⽰每个符号所对应的码长%获得累加概率P及对应码字[p_SortDescend,reflect]=sort(p,'descend');%将概率从⼤到⼩进⾏排序%注:reflect所表⽰的映射关系很重要P =zeros(1,N);%初始化累加概率CODE =strings(1,N);%初始化对应码字(字符串形式)for i=1:N % i表⽰排序后第⼏个符号code =zeros(1,L(reflect(i)));%初始化对应码字(数组形式)if i==1%定义第⼀个编码为0P(1)=0;CODE(reflect(i))=num2str(code);elseP(i)=sum(p_SortDescend(1,1:i-1));%获得累加概率end%下⾯计算⾹农码(计算累加概率的⼆进制数,并取前Li位)p_count =P(i)*2;% p_count⽤于逐步的计算累加概率的⼆进制数for m=1:L(reflect(i))% m表⽰这个符号⾥第⼏个码字if p_count >=1code(m)=1;p_count = p_count-1;elsecode(m)=0;endp_count = p_count*2;end%将⾹农码赋值给对应的符号CODE(reflect(i))=num2str(code);endH =sum(-p.*log2(p));%计算信源信息熵L_ave =sum(L.*p);%计算平均码长yita = H/L_ave;%计算编码效率%展⽰输出码字、平均码长和编码效率fprintf('\n运⾏结果:\n');disp(['信号符号: ',num2str(1:N)]);disp(['对应概率: ',num2str(p)]);fprintf('对应码字:');disp(CODE);disp(['平均码长:',num2str(L_ave)]);disp(['编码效率:',num2str(yita)]);四、程序运⾏结果下⾯假设输⼊[0.1,0.2,0.3,0.4]五、程序⾃评价怎么说呢,代码原理其实很简单,但是我⼀直对它的命令⾏窗⼝的输出耿耿于怀,这没有达到我理想的输出效果:1. 每⼀列对应元素都对齐;2. “对应码字”的输出不要加引号,并且可以密集排列;3. “对应码字”下⾯不要有换⾏。
标题:深度探讨基于matlab的信源编码实验系统的设计在信息科学与技术领域中,信源编码是指利用编码技术对信号源产生的信号进行编码,以便更有效地传输和存储。
基于matlab的信源编码实验系统的设计,是目前研究热点之一。
本文将从信源编码的基本概念出发,深入探讨基于matlab的信源编码实验系统的设计,让读者在阅读后对该主题有一个全面、深刻的理解。
一、信源编码的基本概念1.1 信源编码的定义和作用在通信领域,信源编码是指利用编码技术对信源产生的信号进行编码,以便更有效地传输和存储。
其作用在于减少数据传输或存储时所需要的比特数,提高传输效率和降低成本。
1.2 信源编码的分类信源编码主要分为无损编码和有损编码两种。
无损编码是指编码解码过程中不会有信息丢失,有损编码则是在编码解码过程中会有信息丢失。
其中,无损编码包括霍夫曼编码、算术编码等;有损编码包括JPEG、MP3等。
二、基于matlab的信源编码实验系统的设计2.1 实验系统的基本组成基于matlab的信源编码实验系统主要包括信源编码器、信道编码器、调制器、信道、调制解调器、信道解码器等组成。
其中,信源编码器用于对信号进行编码,信道编码器用于对数据进行处理以应对信道传输中的噪声,调制器用于将数据转换为模拟信号,信道用于传输信号,调制解调器用于将模拟信号转换为数字信号,信道解码器用于对数据进行解码。
2.2 实验系统的设计原理在实验系统的设计中,需要考虑不同编码方式的选择和实现,以及信道传输中可能出现的噪声和干扰。
还需要考虑编码器和解码器之间的匹配和信道编码器的选择等因素。
三、个人观点和理解在我看来,基于matlab的信源编码实验系统的设计是一个复杂且具有挑战性的任务。
在设计过程中,需要深入理解信源编码的基本原理和各种编码方式的特点,同时还需要考虑到实际应用中可能出现的各种问题和挑战。
只有全面了解和深入思考,才能设计出高效、稳定的实验系统。
总结与回顧本文首先介绍了信源编码的基本概念,包括其定义、作用和分类,然后深入探讨了基于matlab的信源编码实验系统的设计,包括实验系统的基本组成和设计原理。