香农编码的matlab语言实现

香农编码的matlab语言实现

ID:44875184

大小:32.01 KB

页数:5页

时间:2019-11-01

香农编码的matlab语言实现_第1页
香农编码的matlab语言实现_第2页
香农编码的matlab语言实现_第3页
香农编码的matlab语言实现_第4页
香农编码的matlab语言实现_第5页
资源描述:

《香农编码的matlab语言实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《信息处理与编码》结课大作业学号:班级:姓名:成绩:香农编码的matlab语言实现1、问题背景:1949年香农在《有噪声时的通信》一文中提出了信道容量的概念和信道编码定理,为信道编码奠定了理论基础。无噪信道编码定理(又称香农第一定理)指出,码字的平均长度只能大于或等于信源的熵。有噪信道编码定理(又称香农第二定理)则是编码存在定理。它指出只要信息传输速率小于信道容量,就存在一类编码,使信息传输的错误概率可以任意小。随着计算技术和数字通信的发展,纠错编码和密码学得到迅速的发展。2、课题分析:运用mat

2、lab编写程序求解任给信源符号概率的香农编码。给定一组信源符号概率,通过所编写的程序对信源符号概率编码,求出此信源符号概率对应的香农编码。3、编程方法:据课本上的介绍编码香农码的方法。首先,给定信源符号概率,要先判断信源符号概率是否满足概率分布,即各概率之和是否为1,如果不为1就没有继续进行编码的必要,虽然任可以正常编码,但编码失去了意义。其次,对信源符号概率进行从小到大的排序,以便进行下一步。从第一步就知道信源符号的个数n,于是构造一个nx4的零矩阵D,以便储存接下来运算的结果。把排好序的信源符

3、号概率以列的形式赋给D的第一列。再次,做编码的第二步,求信源符号概率的累加概率(方法见程序),用来编写码字。接着求各信源符号概率对应的自信息量,用于求解码长k。然后,我们对刚求的自信息量对无穷方向取最小正整数,得到的最小正整数就是该信源符号所对应编码的码长k,有了码长,接下来就可以求解码字。最后,对所求到的累加概率求其二进制,取其小数点后的数,所取位数由该信源符号对应的码长决定,所用的步骤结束,依次得到各信源符号的香农编码。4、程序展现:clc;clear;A=[0.4,0.3,0.1,0.09,

4、0.07,0.04];A=fliplr(sort(A));%降序排列[m,n]=size(A);fori=1:nB(i,1)=A(i);%生成B的第1列end%生成B第2列的元素a=sum(B(:,1))/2;fork=1:n-1ifabs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1,1))-a)break;endendfori=1:n%生成B第2列的元素ifi<=kB(i,2)=0;elseB(i,2)=1;endend%生成第一次编码的结果END=B(:,2)';END

5、=sym(END);%生成第3列及以后几列的各元素j=3;while(j~=0)p=1;while(p<=n)x=B(p,j-1);forq=p:nifx==-1break;elseifB(q,j-1)==xy=1;continue;elsey=0;break;endendendify==1q=q+1;endifq==p

6、q-p==1B(p,j)=-1;elseifq-p==2B(p,j)=0;END(p)=[char(END(p)),'0'];B(q-1,j)=1;END(q-1)=[char(

7、END(q-1)),'1'];elsea=sum(B(p:q-1,1))/2;fork=p:q-2ifabs(sum(B(p:k,1))-a)<=abs(sum(B(p:k+1,1))-a);break;endendfori=p:q-1ifi<=kB(i,j)=0;END(i)=[char(END(i)),'0'];elseB(i,j)=1;END(i)=[char(END(i)),'1'];endendendendp=q;endC=B(:,j);D=find(C==-1);[e,f]=size(

8、D);ife==nj=0;elsej=j+1;endendBAENDfori=1:n[u,v]=size(char(END(i)));L(i)=v;endavlen=sum(L.*A)运行结果:B=0.40000-1.0000-1.0000-1.0000-1.00000.30001.00000-1.0000-1.0000-1.00000.10001.00001.000000-1.00000.09001.00001.000001.0000-1.00000.07001.00001.00001.0000

9、0-1.00000.04001.00001.00001.00001.0000-1.0000A=0.40000.30000.10000.09000.07000.0400END=[0,10,1100,1101,1110,1111]avlen=2.2000>>5、结果分析:此程序是据课本香农编码叙述编写,编写过程简洁,能够看到每个过程的结果,经过多次循环和函数调用直接求解码字。在运行开始先确定要求解的信源符号个数,输入概率时循环控制输入的次数,接下来判断概率是否符合要求。香农编码是码符号

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。