资源描述:
《香农编码的MATLAB实现.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、实验二香农编码的MATLAB实现一、实验目的熟悉MATLAB平台及工作环境熟练使用条件判断语句、循环语句掌握香农编码的步骤掌握利用MATLAB实现香农编码二、实验原理1.香农编码步骤(1)将信源符号按概率从大到小的顺序排序:(2)令p(a0)=0,用pa(aj)(j=i+1)表示第i个码字的累加概率,则:二、实验原理1.香农编码步骤(3)令ki为第i个码字的码长,按照下式计算出各概率对应的码字长度ki:(4)把各个累加概率pa(aj)由十进制小数转化为二进制小数,并取小数点后的前ki位作为对应信源符号ai的码字。二、实验原理【例3.3.1】设有一单符号离散无记忆信源:
2、对该信源编二进制香农码。2.以教材P39例题3.3.1信源为例二、实验原理iaip(ai)jpa(aj)ki码字a001a10.2510.000200(0.000)22a20.2520.250201(0.010)23a30.2030.5003100(0.1000)24a40.1540.7003101(0.1011)25a50.1050.85041101(0.11011)26a60.0560.950511110(0.111100)22.以教材P39例题3.3.1信源为例二、实验原理平均码长:信源熵:信息率:编码效率:2.以教材P39例题3.3.1信源为例三、实验内容1.
3、程序设计(1)代码初始化clc;%清除命令窗口的内容clearall;%清除工作空间的内容p=[0.250.250.200.150.100.05];%输入信源分布n=length(p);%计算信源符号的个数三、实验内容(2)判断信源是否合法,计算信源熵ifmin(p)<0
4、
5、max(p)>1%判断概率值是否介于0到1之间disp(['信源分布P(X)=[',num2str(p),']']);disp('概率值必须介于0到1之间,请重新输入信源分布');returnelseifsum(p)~=1%判断概率累加和是否等于1disp(['信源分布P(X)=[',num2st
6、r(p),']']);disp('概率累加和必须等于1,请重新输入信源分布');return三、实验内容(2)判断信源是否合法,计算信源熵elseH=0;%熵值初始化为0fori=1:nH=-p(i)*log2(p(i))+H;%累加各个符号的概率加权endend三、实验内容(3)按照概率大小排序,并计算累加概率p=sort(p,'descend');%降序排列pa=zeros(1,n);%对累加概率矩阵初始化forj=2:npa(j)=pa(j-1)+p(j-1);%计算累加概率end三、实验内容(4)计算每个码字的长度k=zeros(1,n);%对码长矩阵初始化f
7、ori=1:nk(i)=ceil(-log2(p(i)));%计算每个码字长度,向上取整end三、实验内容(5)十进制小数转换成二进制小数k_max=max(k);bin=zeros(n,k_max);%对二进制小数矩阵初始化fori=1:nforj=1:k_maxbin(i,j)=floor(pa(i)*2);%将累加概率转换成二进制pa(i)=pa(i)*2-floor(pa(i)*2);endend三、实验内容(6)取小数点后ki位作为码字codeword=zeros(n,k_max);%对码字矩阵初始化fori=1:nforj=1:k_maxifj>k(i)c
8、odeword(i,j)=blanks(1);%创建空白串elseifbin(i,j)==0codeword(i,j)='0';三、实验内容(6)取小数点后ki位作为码字elseifbin(i,j)==1codeword(i,j)='1';endendendendcodeword=char(codeword);%码字三、实验内容(7)计算平均码长、信息率和编码效率K=sum(p.*k);%平均码长R=K;%信息率eff=H/R;%编码效率三、实验内容(8)输出结果disp(['信源分布P(X)=[',num2str(p),']']);disp('编码结果:');for
9、i=1:ndisp([num2str(p(i)),'->',num2str(codeword(i,:))]);enddisp(['信源熵H(X)=',num2str(H),'(bit/sign)']);disp(['平均码长K=',num2str(K),'(bit/sign)']);disp(['信息率R=',num2str(R),'(bit/sign)']);disp(['编码效率η=',num2str(eff)]);三、实验内容2.实验结果p=[0.250.250.200.150.100.05]三、实验内容2.实验结果p=[0.20.190.18