信息理论与编码实验指导书(DOC)

上传人:mar****e5 文档编号:185298422 上传时间:2023-02-03 格式:DOCX 页数:25 大小:329.57KB
返回 下载 相关 举报
信息理论与编码实验指导书(DOC)_第1页
第1页 / 共25页
信息理论与编码实验指导书(DOC)_第2页
第2页 / 共25页
信息理论与编码实验指导书(DOC)_第3页
第3页 / 共25页
点击查看更多>>
资源描述
信息理论与编码实验指导书武汉理工大学教材中心2009年7月实验绘制二进熵函数曲线一、实验目的1. 熟悉Matlab工作环境及工具箱;2. 掌握Matlab绘图函数;3. 理解嫡函数表达式及其性质。二、实验内容实验内容与要求内容:用Matlab软件绘制二进嫡函数曲线。要求:1. 提前预习实验,认真阅读教材及相应的参考书,熟悉实验原理;2. 遵守实验室规定,实验过程中服从实验室管理人员和实验指导老师的管理;3. 独立完成实验,认真做好实验记录;4. 实验结束后,认真填写实验报告。知识要点1. 信源嫡的概念及其性质。参照教材及参考书。2. 二进嫡公式:H(X) = -Z p(x )log p(x )= -p log p + (1-p)log(1 - p)= H(p) iii注意:虽然理论上定义0 - log0 = 0,但是,在实际运算时,对数函数logx的变量 x不能取0值,而应设置一个系统默认的最小值eps。三、实验总结1、绘制二进嫡函数曲线,观察曲线形状。2、结合嫡函数的性质,分析二进嫡函数曲线的特点。四、思考与提高1、绘制三元嫡函数曲线,观察曲线形状。2、结合嫡函数的性质,分析三元嫡函数曲线的特点。p=0.00001:0.00001:0.99999;h=-p.*log2(p)-(1-p).*log(1-p);plot(p,h);title(二进熵函数曲线);ylabel(H(p,1-p);p=linspace(eps,1-eps,100);q=linspace(eps,1-eps,100);P,Q=meshgrid(p,q);P_Q=P+Q;for n=1:100for m=1:100if P_Q(n,m)=1Q(n,m)=nan;endendendH=-P.*log2(P)-Q.*log2(Q)-(1-P-Q).*log2(1-P-Q);mesh(P,Q,H);title(三维熵函数图像);实验二一般信道容量迭代算法一、实验目的1、熟悉Matlab工作环境及工具箱;2、掌握一般信道容量迭代算法的原理。二、实验内容实验内容与要求内容:用Matlab软件编程实现一般信道容量迭代算法。要求:2、遵守实验室规定,实验过程中服从实验室管理人员和实验指导老师的管理;3、独立完成实验,认真做好实验记录;4、实验结束后,认真填写实验报告。知识要点:1、一般信道容量迭代算法的原理。参照教材及参考书。2、程序流程图如下:输入胃& =。京+顷)一仁血+1,时匚EV r r n ME仁血+1,?2)= Ln 色inaKN)心=沁函g=e血+m)其中(1)实验提示:u啊二 1口: mpx。 p(2)同。2、设定不同的迭代精度,分析其对计算结果的影响。三、实验总结1、设定不同的信道(对称信道、非对称信道)计算最佳输入分布,分析计算结果的异1、信道的性质与最佳输入分布的关系。2、迭代精度对计算结果的影响。四、思考与提高1、编制一般信道容量迭代算法的通用程序,适应不同的信道特性。2、优化程序,提高运算速度。实验三二进制霍夫曼编码一、实验目的1、熟悉Matlab工作环境及工具箱;2、掌握霍夫曼编码的基本步骤;3、利用MATLAB实现霍夫曼编码。二、实验内容实验内容与要求内容:用Matlab软件编程实现二进制霍夫曼编码。要求:1、提前预习实验,认真阅读相应的参考书,熟悉实验原理;2、遵守实验室规定,实验过程中服从实验室管理人员和实验指导老师的管理;3、独立完成实验,认真做好实验记录;4、实验结束后,认真填写实验报告。知识要点:1、霍夫曼编码的基本原理。参照教材及参考书。2、二进制霍夫曼编码方法。基本原理:变长编码不要求所有码字长度相同,对不同概率的信源符号或序列,可赋予不同长度的码字。 变长编码力求平均码长最小,此时编码效率最高,信源的冗余得到最大程度的压缩。1)几种常用变长编码方法:霍夫曼编码费若编码香农编码。2)霍夫曼编码:二进制霍夫曼编码r进制霍夫曼编码符号序列的霍夫曼编码。3)二进制霍夫曼编码的编码过程:将信源中n个符号按概率分布的大小,以递减次序排列起来;用0和1码分别分配给概率最小的两个信源符号,并将这两个概率最小的信源符号合 并成一个新符号,并用这两个最小概率之和作为新符号的概率,从而得到只包含n-1个符号 的新信源,称为其缩减信源;把缩减信源的符号仍按概率大小以递减次序排列,再将最后两个概率最小的符号合并 成一个新符号,并分别用0和1码表示,这样又形成一个新缩减信源;依次继续下去,直到缩减信源最后只剩两个符号为止。再将最后两个新符号分别用0 和1码符号表示。最后这两个符号的概率之和为1,然后从最后一级缩减信源开始,依编码 路径右后向前返回,就得到各信源符号所对应得码符号序列,即对应得码字。r进制霍夫曼编码由二进制霍夫曼编码可推广到r进制霍夫曼编码,只是每次求缩减信源时,改求r个最 小概率之和,即将r个概率最小符号缩减为一个新符号,直到概率之和为1。但要注意,即 缩减过程中可能到最后没有r个符号。为达次目的,可给信源添加几个概率为零的符号。符号序列的霍夫曼编码对信源编码除了对信源符号编码以外,也可对信源符号序列编码,一般来说,对序列 编码比对单个符号更为有效。实验提示:1、取得信源概率分布,并进行合法性判断;2、对信源概率分布进行降序排列;x=fliplr(sort(x)3、建立空的编码表一构造一个零矩阵;B=zeros(n,n-1)4、将信源概率分布及以后产生的缩减序列放入矩阵的某一列;5、利用得到的编码矩阵获得各元素的编码结果并输出。三、实验总结1、变长编码和定长编码的优缺点。2、二进制霍夫曼编码的特点。四、思考与提高比较各种无失真信源编码算法的优缺点。实验四线性分组码的信道编码和译码一、实验目的1、熟悉Matlab工作环境及工具箱;2、掌握线性分组码的编码、译码原理以及纠错原理。二、实验内容实验内容与要求内容:用Matlab软件编程实现线性分组码的信道编码和译码。要求:2、遵守实验室规定,实验过程中服从实验室管理人员和实验指导老师的管理;3、独立完成实验,认真做好实验记录;4、实验结束后,认真填写实验报告。知识要点:1、线性分组码的编码、译码原理。参照教材及参考书。2、线性分组码的设计。基本原理:首先,将信息序列分成K个符号一组,然后,在信息组中加入一些校验码 元,组成N长码字,由此得到(N,K)分组码。(N,K)分组码中任一码字的码长为N, 所含的信息位数目为K,校验位数目为r=NK,且码中任意两个码字的和仍为码字。例如,对于(5,2)分组码,N=5,K=2,其编码函数f为。1=山心=7也由编码函数可知:c (码字)=m(信息矩阵)G (生成矩阵)其中,生成矩阵当生成矩阵G确定后,编码的问题就解决了。又由编码函数的后3个方程可以确定校验方程,对应的矩阵形式为可扫c=Q,式中,h称为一致性校验矩阵。致性校验矩阵如下:H与G的关系:,纠错译码时,若发送码字为c,则接收序列为y ,校正子S=y*反 =e* H。因此,可以得到译码c=y e(模2和)。其中,e称为差错图样。S是传输是否出错的 标志,称为伴随式。(5,2)线性分组码的最小汉明距离为dmi=3,能够检出2位错误或纠正1位错误。线性分组码的信道编码和译码流程图:图1线性分组码信道编码流程图图2线性分组码信道译码流程图实验提示:1、线性分组码中生成矩阵、校验矩阵、伴随式之间的关系。2、在计算矩阵时,注意位操作运算。三、实验总结1、根据不同的线性分组码,观察生成矩阵和校验矩阵的特性。2、根据不同的线性分组码,分析检错和纠错能力。四、思考与提高1、编制线性分组码的信道编码和译码的通用程序,适应不同的生成矩阵和校验矩阵。2、优化程序,提高运算速度。实验五分组乘积Turbo码动态迭代译码算法一、实验目的1. 熟悉Matlab工作环境及工具箱;2. 掌握分组乘积Turbo码的编码、译码原理。二、实验内容实验内容与要求内容:用Matlab编程实现分组乘积Turbo码动态迭代译码仿真、并试着对其算法提出 优化方法。要求:1. 提前预习实验,认真阅读教材及相应的参考书,熟悉实验原理;2. 遵守实验室规定,实验过程中服从实验室管理人员和实验指导老师的管理;3. 独立完成实验,认真做好实验记录;4. 实验结束后,认真填写实验报告。知识要点1. 分组乘积Turbo码(简称TPC码)是一类将分组码进行串行级联,并采用分组交织器构成的级联码,是 一种构造十分简单的纠错码,它是香农信息理论提出后第一个在非零码率时可以实现无误码 传输的纠错编码。采用迭代译码方法,可发挥该码的良好性能,并特别适合于高速硬件译 码。2. TPC码的编码结构在乘积码中,分量码一般采用线性分组码,其结构简单,易于实现。乘积码的编码过程可以分为三个步骤:(1)将信息元填入一个m2行ml列的矩阵;(2)对矩阵的每一行用一个(nl,ml)系统分组码kl进行编码,得到一个m2行nl 列的矩阵;(3)对这个矩阵的每一列用一个(n2, m2)系统分组码k2进行编码,最终得到一个 n2行nl列的矩阵。这样得到的纠错码是一个(nl*n2, ml*m2)分组码,所以称为乘积码。3. TPC码的译码算法Chase算法是一种找码字D的低复杂度的次优算法。4. TPC码的迭代译码在迭代过程中行译码和列译码交替进行,相互之间提供外信息,每进行一次行译码或列 译码可以看作半次迭代。注意:增加迭代次数可以提高TPC码的纠错性能,但是当迭代达到一定限度以后,译 码性能就呈现出饱和的趋势。三、实验总结1、分组乘积Turbo码动态迭代译码分析、仿真。2、针对相应算法提出改进意见。四、思考与提高1、当使用不同收敛率的两组参数,比较其迭代的次数,并分析那种参数可以起到改善译码性能的目的。实验六MIMO系统信道容量分析一、实验目的1. 熟悉Matlab工作环境及工具箱;2. 掌握Matlab绘图函数;3. 理解MIMO系统信道容量的分析方法。二、实验内容实验内容与要求内容:用Matlab软件实现对一些典型MIMO系统信道容量进行仿真。要求:1. 提前预习实验,认真阅读教材及相应的参考书,熟悉实验原理;2. 遵守实验室规定,实验过程中服从实验室管理人员和实验指导老师的管理;3. 独立完成实验,认真做好实验记录;4. 实验结束后,认真填写实验报告。知识要点1. MIMO:多输入多输出无线通信系统。提高通信系统的容量和频谱利用率,是新一代移动通信系 统采用的关键技术。2. MIMO系统模型MIMO系统的输入输出关系可表示为y = Hx + s式中,x = (xo,气,x -1)r,xn表示从第n根发射天线发射的信号。3. MIMO信道容量这里主要考虑当接收机已知信道状态信息而发射机不知道信道状态信息的信道条件.在 这种信道条件下,可利用C(岁岫叩n)i=0三、实验总结1、信道矩阵为一个确定性的数值矩阵时的信道容量。2、信道传输矩阵H为全1矩阵时的情况。四、思考与提高1、比较MIMO系统与传统SISO系统之间的区别。附录:(参考程序)1、计算任意多个符号信源的熵function H=entropy(p)%该函数用来计算包含任意多个符号的信源嫡(比特)% p为DMS的概率分布,行向量if sum(p)=1 %判断是否满足概率完备性error(不满足概率完备性,请重新输入信源分布)return;elseL=length(p) %得到信源符号的个数H=0; %熵值初始化为零for i=1:LH=H-p(i)*log2(p(i); %累加熵函数各个子项endendMatlab函数说明:(1) sum(A):求数组A的元素之和(2) length(X):求矢量X的长度(3) log2(X):计算以2为底X的对数(4) error:显示错误信息2、绘制二元信源熵函数曲线clc%让概率从一个很小的数0.000001开始变化,步长为0.001:p=0.000001:0.001:1;h=-p.*log2(p)-(1-p).*log2(1-p);% log2也可以计算矢量,结果也为矢量plot(p,h);title(二符号信源熵函数曲线);ylabel(H(p,1-p)运行结果:二符号信源隔函数曲线3、绘制三元熵函数曲线p=linspace(eps,1-eps,100);q=linspace(eps,1-eps,100);P,Q=meshgrid(p,q);P_Q=P+Q;for n=1:100for m=1:100if P_Q(n,m)=1Q(n,m)=nan;endendendH=-P.*log2(P)-Q.*log2(Q)-(1-P-Q).*log2(1-P-Q);mesh(P,Q,H)title(三维嫡函数的图形)程序说明:(1) eps:极小值,避免0概率事件(2) meshgrid:语法X,Y = meshgrid(x,y)将矢量x和y规定的区域变换为数组X和Y,X和Y可用于计算2自变量函数或绘制3维网格/表面。X的各行均为矢量x; Y的各 列均为矢量y。(3) nan:无效值(4) mesh:绘制网格曲面运行结果:三维烦函薮的屈形4.将迭代算法用matlab代码实现如下function answer=chacap(Pt)% Pt:信道矩阵%用matalb的eps代替信道矩阵内的元素0以避免对0取对数% C:信道容量r,s=size(Pt); %确定输入和输出符号个数Pi=ones(1,r)/r; %行向量,输入分布初始化为等概Cn=0; % C(n)初始化为0Cn1=inf; % C(n)初始化为无穷大beta=ones(1,r); %偏互信息的指数1=1; %互信息初始化为1while abs(Cn-Cn1)=1.0e-004 % 迭代误差限for k=1:rPi(k)=Pi(k)*beta(k)/I; % 更新输入分布end%以下计算beta(k):Po=Pi*Pt ; % 输出概率for k=1:rbt=0; %中间变量for j=1:sbt=bt+Pt(k,j)*log(Pt(k,j)/Po(j);endbeta(k)=exp(bt);endI=Pi*beta; %各B的加权平均Cn=log(I); %Cn1=log(max(beta); % 各 B 的最大值endC=Cn*log2(exp(1); % 比特answer=sprintf(该信道的信道容量C = %f比特/信道符号,C);程序说明:(1) ones:创建一个全1的数组(2) inf:无穷大(3) abs :求绝对值(4) 该程序返回字符串answer5、绘制二进制对称信道平均互信息量Matlab实现p,q=meshgrid(0.000001:0.01:1,0.000001:0.01:1);Hnoise=-p.*log2(p)-(1-p).*log2(1-p); % 噪声熵x=(1-p).*q+p.*(1-q);I=-x.*log2(x)-(1-x).*log2(1-x)-Hnoise;mesh(p,q,I)运彳丁结果:分析说明:从图上可以看出:信道给定的条件下,平均互信息随信源分布呈现上凸性,具有最大值。而在信源给定的条件下,平均互信息随信道转移概率呈现下凸性,具有最小值。6、编制LZW算法function CodeStream,CS_hexa,CS_binary,CompressionRatio=lzw(SourceSeq)%采用8比特LZW编码,首先构造一个包含256个“单词”的字典,%可以对ASCII码表中字符构成的序列进行编码% SourceSeq:信源符号序列% CodeStream :单词位置构成的码流序列% CS_hexa: 3位16进制数表示的位置码% CS_binary: 12比特表示的位置码序列% CompressionRati o: 压缩比SourceSeq=uint8(SourceSeq);dict = cell(1,256); % 字典初始化for i = 1:256,dicti = uint8(i-1); %用2个字节表示前缀字符CodeStream=SourceSeq; % 输出码流初始化i_CS=1; %码流索引len_seq=length(SourceSeq);W1=; %前缀初始化为空for i=1:len_seqW2=SourceSeq(i); %读取第i个序列符号W,必定存在于字典中neword=W1 W2; % 组成一个新单词 newordposition=poscode(neword,dict); % 在字典中查找新单词if isempty(position) % 字典中没有 neworddictend+1=neword; %将新单词添加到字典中ps=poscode(W1,dict); % 获得 W1 的位置码CodeStream(i_CS)=ps; % 输出 W1 的位置码W1=W2; %前缀更新为W2i_CS=i_CS+1; %else %字典中已有新单词W1=neword; %更新前缀为新单词endendCodeStream(i_CS+1:end)=;CS_hexa=dec2hex(CodeStream,3); %每个位置码用12比特(3位16进制数)来表示CS_binary=dec2bin(CodeStream,12); % 每个位置码用 12 比特来表示NumCodeword=length(CodeStream); % 码字个数CompressionRatio=len_seq*8/(12*NumCodeword); % 计算压缩比function position = poscode(word,dict)position=; %位置码初始化为空if length(word)=1 % word 只包含一个字符position=word; %该字符的ASCII码即为其位置码else % word包含多个字符for i_dict=257:length(dict) %在字典的初始位置码之外查找if isequal(dicti_dict,word) % 在字典中查找到新单词 W1W2 position=i_dict; % word在字典中的位置序号即为其位置码 endendend程序说明:a) uint8:转换为无符号整数(0255)b) cell:创建胞元数组c) poscode:为自编的函数,实现在字典中查找单词位置的功能d) end:数组最后的下标7、编制算术编码算法function codestream=arithcoder(SourceSeq,P,SymbolSet)% SourceSeq :字符串,信源符号序列% P:行矢量,信源符号概率分布% SymbolSet:字符串,信源符号集合(顺序与P对应)len_seq=length(SourceSeq); % 信源序列长度num_sym=length(SymbolSet); % 信源符号个数F=zeros(1,num_sym); %符号的累计分布初始化for i=2:num_symF(i)=F(i-1)+P(i-1); %计算信源符号的累积概率分布函数endFF=0; %序列的累积分布初始化A=1; %序列对应的区间长度for i=1:len_seqsym=SourceSeq(i); %读取信源序列的第i个符号 i_set=find(SymbolSet=sym); %确定当前符号sym种子符号集的位置FF=FF+A*F(i_set);A=A*P(i_set);endCodeLength=ceil(-log2(A); % 确定码长codeword=;for i=1:CodeLengthFF=2*FF;bit=floor(FF);codeword=codeword bit;FF=FF-bit;endcodeword程序说明:a) ceil: ceil(A)返回不小于A的最小整数b) floor: floor(A)返回不超过A的最大整数8、线性分组码的信道编码和译码MATLAB实现:clear; clc;%编码G=input(请输入生成矩阵 6,例如:G=1 0 1 1 1;0 1 1 0 1n G=);k,n=size(G);r=n-k;m=input(请输入需传送信息 m,如 m=0 0 0 1 1 0 1 1n m=);l=length(m);if(mod(l,k)disp (输入的信息有误);elsege=l/k;%将输入序列转化成矩阵mtemp1=;temp1(i,:)=m(k*(i-1)+1:i*k);endm=temp1;%求校验矩阵Hc=mod(m*G,2);A=G(:,k+1:n);H=A,eye(r);disp (校验矩阵);Hdisp (编码矩阵);cenddisp(敲回车键继续);pause%解码y=input(输入接收序列 y,如:y=0 0 0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 0 1 0n y=);temp2=;for i=1:getemp2(i,:)=y(1,n*(i-1)+1:i*n);endy=temp2s=mod(y*H,2);e=s*pinv(H);for i=1:gefor j=1:nif(e(i,j)0.5-eps)e(i,j)=1;elsee(i,j)=0;endendendcc=mod(y+e,2);sc=cc(:,1:2); disp(差错图样);e disp(估计值);cc disp(译码序列);sc
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!