收藏 分享(赏)

《信息论与编码技术》实验教案.doc

上传人:dzzj200808 文档编号:2728977 上传时间:2018-09-26 格式:DOC 页数:14 大小:999.50KB
下载 相关 举报
《信息论与编码技术》实验教案.doc_第1页
第1页 / 共14页
《信息论与编码技术》实验教案.doc_第2页
第2页 / 共14页
《信息论与编码技术》实验教案.doc_第3页
第3页 / 共14页
《信息论与编码技术》实验教案.doc_第4页
第4页 / 共14页
《信息论与编码技术》实验教案.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、教案2010 2011 学年 第 1 学期 信息论与编码技术实验教案教 学 院 ( 部 ) 电气与电子信息工程学院 教 研 室 电子信息教研室 授 课 班 级 07 电信本、08 电信专 授 课 教 师 艾青 职 称 职 务 助教 教 材 名 称 信息论-基础理论与应用 2010 年 10 月 1 日实 验 二 、 信 源 编 译 码一、实验目的 1、掌握标量量化的基本使用方法。2、掌握预测量化的基本使用方法。3、掌握 Huffman 编码的仿真方法。4、通过信源编译码,理解香农第一定理。二、实验主要仪器与设备1、微机三、实验原理大多数信源(比如语音、图像)最开始都是模拟信号,为了将信源输出数

2、字化,信源必须量化为确定数目的级数。量化方案可划分为标量量化和矢量量化两种。在标量量化中每个信源输出都分别被量化,标量量化可进一步分为均匀量化和非均匀量化。在均匀量化中量化区域是等长的;在非均匀量化中量化区域可以是不等长的。矢量量化是对信源输出组合进行整体量化。在 MATLAB 通信工具箱中提供了两种信源编译码的方法:标量量化和预测量化。 1、标量量化信源编码中的 律或 A 律压扩计算函数 compand( ) 格式:out=compand(in, param, V, method)功能:实现值 律或 A 律压扩,其中 param 为 ,V 为峰值。压扩方式由 method 指定。 产生量化索

3、引和量化输出值的函数 quantiz( ) 格式:indx=quantiz(sig, partition) 功能:根据判断向量 partition,对输入信号 sig 产生量化索引indx,indx 的长度与 sig 矢量的长度相同。采用训练序列和 Lloyd 算法优化标量算法的函数 lloyds( ) 格式:parition, codebook=lloyds(training_set, ini_codebook)功能:用训练集矢量 training_set 优化标量量化参数 partition和码本 codebook。ini_codebook 是码本 codebook 的初始值。2、预测量化

4、根据过去发送的信号来估计下一个将要发送的信号值。差分脉冲调制编码函数 dpcmenco( )格式:indx=dpcmenco(sig, codebook, partition, predictor)功能:返回 DPCM 编码的编码索引 indx。其中参数 sig 为输入信号,predictor 为预测器传递函数,其形式为0, t1, tm。 预测误差的量化参数由 partition 和 predictor 指定。信源编码中的 DPCM 解码函数 dpcmdeco( )格式:sig=dpcmdeco(indx, codebook, predictor)功能:根据 DPCM 信号编码索引 indx

5、 进行解码。 predictor 为指定的预测器,codebook 为码本。3、信源编码可分为两类:无失真编码和限失真编码。Huffman 编码的基本原理就是为概率较小的信源输出分配较长的码字,而对那些出现可能性较大的信源输出分配较短的码字。1)Huffman 编码算法及步骤如下: 将信源消息按照概率大小顺序排队。 按照一定的规则,从最小概率的两个消息开始编码。 将经过编码的两个消息的概率合并,并重新按照概率大小排序,重复步骤。 重复上面步骤,一直到合并的概率达到 1 时停止。这样便可以得到编码树状图。 按照后出先编码的方式编程,即从数的根部开始,将 0和 1 分别放到合并成同一节点的任意两个

6、支路上,这样就产生了这组 Huffman 码。2)费诺编码属于概率匹配编码,它不是最佳编码方法,编码过程如下:1、将信源发出的 N 个消息符号按其概率的递减次序依次排列。2、将依次排列的信源符号依概率分成两组,使两个组的概率和近于相同,并对各组赋予一个二进制代码符号“0”和“1”(编 m 进制 码就分成 m 组) 。3、将每一个大组的信源符号进一步再分成两组,使划分后的两个组的概率和近于相同,并又分别赋予两组一个二进制符号“0”和“1”4、如此重复,直至每组值只剩下一个信源符号为止5、信源符号所对应的码符号序列即为费诺码3) 、香农编码1、将信源发出的 N 个消息符号按其概率的递减次序依次排列

7、。2、按下式计算第 i 个消息的二进制代码组的码长,并取整。3、为了编成唯一可译码,首先计算第 i 个消息的累加概率4、将累加概率 Pi (为小数)变成二进制数5、除去小数点,并根据码长 li ,取小数点后 li 位数作为第i 个消息的码字。四、 预习要求做实验前必须认真复习教材中关于信源编译码的有关内容。五、 实验内容及步骤1、练习使用上述函数命令。用训练序列和 Lloyd 算法,对一个正弦信号数据进行标量化。要求在实验报告中得到:1)MATLAB 程序;2)仿真结果用训练数据优化 DPCM 方法,对一个余弦信号数据进行标p211)(log)(logiii ss1)(ikspP量化。要求在实

8、验报告中得到:1)MATLAB 程序;2)仿真结果用训练序列和 Lloyd 算法,对一个正弦信号数据进行标量化。N=23;t=0:100*pi/20;u=cos(t);p, c=Lloyds(u,N);index,quant,distor=quantiz(u,p,c);plot(t,u,t,quant,*);0 2 4 6 8 10 12 14 16-1-0.8-0.6-0.4-0.200.20.40.60.81用训练数据优化 DPCM 方法,对一个余弦信号数据进行标量化。N=23;t=0:100*pi/20;u=cos(t);predictor,codebook,partition=dpcm

9、opt(u,1,N);index,quant=dpcmenco(u, codebook, partition ,predictor);sig,equant= dpcmdeco(index, codebook, predictor);plot(t,u,t,equant,*);0 2 4 6 8 10 12 14 16-1-0.8-0.6-0.4-0.200.20.40.60.812、利用 MATLAB 实现以下两种上信源编译码方法霍夫曼编码费诺编码香农编码要求在实验报告中得到:1)MATLAB 程序;2)仿真结果霍夫曼编码1、熵子程序function h=entropy(p)% H=ENTROP

10、Y(P) returns the entropy function of % the probability vector p.if length(find(p10e-10,error(Not a prob. vector, components do not add up to 1)endh=sum(-p.*log2(p);2、哈夫曼编码程序function h,l=huffman(p);%HUFFMAN Huffman code generator% h,l=huffman(p), Huffman code generator% returns h the Huffman code mat

11、rix, and l the% average codeword length for a source with % probability vector p. if length(find(p10e-10,error(Not a prob. vector, components do not add up to 1)endn=length(p);q=p;m=zeros(n-1,n);for i=1:n-1q,l=sort(q);m(i,:)=l(1:n-i+1),zeros(1,i-1);q=q(1)+q(2),q(3:n),1;endfor i=1:n-1c(i,:)=blanks(n*

12、n);endc(n-1,n)=0;c(n-1,2*n)=1;for i=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)=0;c(n-i,n+1:2*n-1)=c(n-i,1:n-1);c(n-i,2*n)=1;for j=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);endendfor i=1:nh(i,1:n)=c(1,n*(find(

13、m(1,:)=i)-1)+1:find(m(1,:)=i)*n);l1(i)=length(find(abs(h(i,:)=32);endl=sum(p.*l1);3、实验命令a=.2 .15 .13 .12 .1 .09 .08 .07 .06;b,c=huffman(a);d=entropy(a) 费诺编码1、费诺编码程序function c=fano(p)% p=0.25 0.25 0.20 0.15 0.10 0.05% c=fano(p)n=size(p,2);%已经编码完成if n=1 c=cell(1,1);c1=;return endp,index=sort(p);%按概率排序

14、p=fliplr(p);total=sum(p);%总概率acc=0;%累积概率flag=0;%是否到达尾部的标志for i=1:n-1newacc=acc+p(i);if abs(total-2 * newacc)=abs(total - 2*acc)flag=1;break; endacc=newacc;endif flagi=n;endsplit=i;%从分界点对两边的码递归做 fanoc1=fano(p(1:split-1);c2=fano(p(split:n);c=cell(1,n);%添加前缀 0,1for i=1:split-1ci=strcat(0,c1i);endfor i

15、= split:nci=strcat(1,c2i - split + 1 ); end%将顺序调整回去c=fliplr(c);c(index)=c;2、实验命令a=.2 .15 .13 .12 .1 .09 .09 .07 .06;t=fano(a) 香农编码1、香农编码程序function c=shannon(p)% p=0.25 0.25 0.20 0.15 0.10 0.05% shannon(p)p,index=sort(p);p=fliplr(p);%从大到小n=length(p);pa=0;%累加概率for i=2:npa(i)=pa(i-1)+p(i-1); endk=ceil(

16、-log2(p);%码长计算c=cell(1,n);%生成元胞数组,存码字,是 cell,跟上一行不一样for i=1:nci= ;tmp=pa(i);for j=1:k(i)tmp=tmp * 2;if tmp=1 tmp=tmp - 1;ci(j)= 1;elseci(j)= 0;endendend%p%pa%交换回原来的顺序c=fliplr(c);c(index)=c;2、实验命令a=.2 .15 .13 .12 .1 .09 .08 .07 .06;b=shannon(a);六、 思考题 1、信源编码的目的?信源编码的目的是压缩冗余度,提高信息的传输速率。七、 实验报告1、实验报告中应具备实验中每一步骤实现的程序或过程,以及实验结果;应对实验结果进行误差分析。2、回答思考题。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报