中北大学信息与编码软件仿真实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第1页共14页信息与通信工程学院实验报告(软件仿真性实验)课程名称:信息论与编码实验题目:绘制信源熵函数曲线指导教师:xxx班级:xxxxxxxxx学号:xx学生姓名:xxx一、实验目的和任务1.学会MATLAB软件的基本操作2.学会使用软件进行信源熵的计算二、实验内容及原理1.学会利用MATLAB计算信源熵2.理解信源熵的物理意义,并能从信源熵函数曲线图上进行解释其物理意义3.求解书中部分例题,绘制信源熵函数曲线三、实验步骤或程序流程1.求解课本中2-16、2-17以及例题2-62.绘制信源熵函数曲线成绩第2页共14页四、实验数据及程序代码clearallclcp=0.3;Hx1=-p*log2(p)-(1-p)*log2(1-p)Hx2=-0.9143*0.7*log2(0.9143)-0.0875*0.7*log2(0.0875)-0.2*0.3*log2(0.2)-0.8*0.3*log2(0.8)I1=300000*log2(128)I2=1000*log2(10000)N=I1/log2(10000)Hx3=300000*log2(10)I3=4000*log2(10)p=0:0.001:1;h=-p.*log2(p)-(1-p).*log2(1-p);plot(p,h)图1.1程序代码第3页共14页图1.2信源熵函数曲线五、实验数据分析及处理经验证,所有结果均与事实相符,且信源熵函数曲线符合标准,存在最大峰值,即在P=0.5时信源熵最大为1。六、实验结论与感悟(或讨论)1.通过这次实验我们体会到了MATLAB的强大与便捷,在计算信源熵的时候只要通过简单代码我们就可以得到原来繁复的计算结果。在一定程度上提高了计算效率。程序可任意修改,这样可以实现模板化问题的直接求解,只需改变参数即可得出结果。2.另外,在计算求解过程中,我们要注意公式中符号的选择,该正则正负则负,避免计算的错误。最后,应注意掌握MATLAB的固有语法结构,不要用错用混。第4页共14页信息与通信工程学院实验报告(软件仿真性实验)课程名称:信息论与编码实验题目:离散信道容量的计算与分析指导教师:xxxx班级:xxxxxxxx学号:xx学生姓名:xxx一、实验目的和任务1.学会MATLAB软件的基本操作与绘图2.学会使用软件进行信源熵的计算。3.学会使用软件进行信道容量的计算并绘图二、实验内容及原理1.学会利用MATLAB计算离散信道的信道容量2.学会依据所绘制的信道容量曲线,分析其物理意义3.完成相关例题以及绘制信道容量曲线三、实验步骤或程序流程1、完成书中例题3-1、例题3-62、绘制信道容量曲线成绩第5页共14页四、实验数据及程序代码clearallclcC1=log2(4)+((2/3)*log2(1/3)+(1/3)*log2(1/6))p=0:0.001:1;C2=1+p.*log2(p)+(1-p).*log2(1-p);plot(p,C2)C3=1+(2/3*log2(1/3)+1/3*log2(1/6))-1/2*log2(1/2)-1/3*log2(2/3)-1/6*log2(1/3)图2.1信道容量曲线第6页共14页图2.2例题结果五、实验数据分析及处理实验结果正确,成功的绘制了信道容量曲线,存在最小值,即在P=0.5时信道容量最小,值为0。六、实验结论与感悟(或讨论)1.通过这次实验,我们掌握了如何使用MATLAB计算离散信道的信道容量,并学会了使用绘图函数plot()绘制信道容量曲线。2.实验过程中应该注意点乘与乘的区别,即:矩阵相乘使用点乘,数值的相乘直接乘即可。避免不必要的计算错误,以及绘图的错误。第7页共14页信息与通信工程学院实验报告(软件仿真性实验)课程名称:信息论与编码实验题目:离散信源失真函数指导教师:xxx班级:xxxxxxxx学号:xx学生姓名:xxx一、实验目的和任务1.学会MATLAB软件的基本操作2.学会使用软件进行离散信源的失真函数。3.学会绘制离散信源失真函数的图像二、实验内容及原理1.学会利用MATLAB计算信源的失真度2.分析失真函数的函数特性,加深信源传输失真的理解三、实验步骤或程序流程1.利用函数求出离散信源的失真函数2.绘制离散信源失真函数图像成绩第8页共14页四、实验数据及程序代码1.FUNCTION文件function[R,delta]=R_delta(Pu,D,eps)[r,s]=size(D);delta_min=sum(Pu.*min(D',[],1));delta_max=min(Pu*D);R=[];delta=[];P=ones(r,s)/s;%信道模型SS=100:-0.1:-100;SS=-exp(SS);forS=SSPv=Pu*P;Ed0=sum(Pu*(P.*D));%Rs0=sum(Pu*(P.*log(P)))-sum(Pv.*log(Pv));Rs0=0;foru=1:rforv=1:sifP(u,v)~=0&Pu(u)~=0Rs0=Rs0+Pu(u)*P(u,v)*log(P(u,v)/Pv(v));endendendP=exp(S*D);fori=1:sP(:,i)=P(:,i)*Pv(i);endfori=1:rSumP=sum(P(i,:));P(i,:)=P(i,:)/SumP;endKm=50000;fork=1:KmPv=Pu*P;Edn=sum(Pu*(P.*D));%Rsn=sum(Pu*(P.*log(P)))-sum(Pv.*log(Pv));Rsn=0;foru=1:rforv=1:sifP(u,v)~=0&Pu(u)~=0Rsn=Rsn+Pu(u)*P(u,v)*log(P(u,v)/Pv(v));endendendP=exp(S*D);fori=1:s第9页共14页P(:,i)=P(:,i)*Pv(i);endfori=1:rSumP=sum(P(i,:));P(i,:)=P(i,:)/SumP;endifabs(Edn-Ed0)eps&abs(Rsn-Rs0)epsbreak;endEd0=Edn;Rs0=Rsn;endifkKmR=[R,Rsn];delta=[delta,Edn];endend2.执行文件clearclcalpha=2;p1=0.5;p2=0.3;p3=0.2;p4=0.1;D=[0,alpha;alpha,0];%汉明失真矩阵Pu1=[p1,1-p1];%信源概率统Pu2=[p2,1-p2];Pu3=[p3,1-p3];Pu4=[p4,1-p4];%信源概率统计delta1=[0:p1/1000:p1];delta2=[0:p2/1000:p2];delta3=[0:p3/1000:p3];delta4=[0:p4/1000:p4];eps=0.00001;%精度为eps=0.00001[R1,delta1]=R_delta(Pu1,D,eps);[R2,delta2]=R_delta(Pu2,D,eps);[R3,delta3]=R_delta(Pu3,D,eps);[R4,delta4]=R_delta(Pu4,D,eps);plot(delta1,R1,'b',delta2,R2,'r',delta3,R3,'y',delta4,R4,'g');legend('p1=0.5','p2=0.3','p3=0.2','p4=0.1')第10页共14页图3.1离散信源失真函数曲线五、实验数据分析及处理随着信源概率的增大,图像减缓程度也在减小,最终趋于平缓六、实验结论与感悟(或讨论)1.通过这次实验我们学习了MATLAB的函数编写,掌握了利用函数进行简易的计算。和C语言的函数定义有异曲同工之秒。2.在进行函数编写是要注意细节的处理,防止出现不确定的错误。第11页共14页信息与通信工程学院实验报告(软件仿真性实验)课程名称:信息论与编码实验题目:哈夫曼编码指导教师:xxxx班级:xxxxxx学号:xx学生姓名:xxx一、实验目的和任务1.学会MATLAB软件的基本操作2.学会使用软件进行哈夫曼编码的函数编写3.掌握哈夫曼编码的基本操作二、实验内容及原理1.学会利用MATLAB进行哈夫曼编码2.学会编码效率的分析三、实验步骤或程序流程1.编写哈夫曼函数编码实现代码2.利用所写函数进行编码验证成绩成绩第12页共14页四、实验数据及程序代码1.Function函数代码function[h,e]=Huffman_code(p)%p为概率分布,此函数功能是进行哈夫曼编码%此处显示详细说明%h为各个元素的码字%e为输出的平均码长iflength(find(p0))~=0error('概率不应该小于0!')endifabs(sum(p)-1)10e-10error('概率之和大于1,请检查输入!')endn=length(p);p=sort(p)q=p;m=zeros(n-1,n);fori=1:n-1[q,e]=sort(q);m(i,:)=[e(1:n-i+1),zeros(1,i-1)];%由数组l构建一个矩阵,该矩阵表明概率合并时的顺序,用于后面的编码q=[q(1)+q(2),q(3:n),1];endfori=1:n-1c(i,1:n*n)=blanks(n*n);%c矩阵用于进行huffman编码endc(n-1,n)='1';%由于a矩阵的第n-1行的前两个元素为进行huffman编码加和运算时所得的最后两个概率(在本例中为0.02、0.08),因此其值为0或1c(n-1,2*n)='0';fori=2:n-1c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)==1))-(n-2):n*(find(m(n-i+1,:)==1)));%矩阵c的第n-i的第一个元素的n-1的字符赋值为对应于a矩阵中第n-i+1行中值为1的位置在c矩阵中的编码值c(n-i,n)='0';c(n-i,n+1:2*n-1)=c(n-i,1:n-1);%矩阵c的第n-i的第二个元素的n-1的字符与第n-i行的第一个元素的前n-1个符号相同,因为其根节点相同c(n-i,2*n)='1';forj=1:i-1c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(m(n-i+1,:)==j+1)-1)+1:n*find(m(n-i+1,:)==j+1));第13页共14页%矩阵c中第n-i行第j+1列的值等于对应于a矩阵中第n-i+1行中值为j+1的前面一个元素的位置在c矩阵中的编码值endendfori=1:nh(i,1:n)=c(1,n*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*n);%用h表示最后的huffman编码len(i)=length(find(abs(h(i,:))~=32));%计算每一个编码的长度ende=sum(p.*len)%计算平均码长2.函数使用语句clearclcp=[0.4,0.2,0.2,0.1,0.1];Huffman_code(p)图4.1哈夫曼编码运算结果第14页共14页五、实验数据分析及处理经验证所编写函数均可完成哈夫曼编码的实现,便捷快速。六、实验结论与感悟(或讨论)1.通过这次实验,我们学会了通过编写函数进行哈夫曼编码,并分析它的效率,体会到了MATLAB软件的强大。2.在阅读分析代码的过程中,我对课本内容也有了重新的认识。

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功