用matlab实现香农码和费诺码.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

信息论与编码

―大作业

班级:电信091班

姓名:徐胜

学号:2009012630

目录

TOC\o1-3\h\z\u一、用matlab实现Shannon编码3

1、编码主程序3

2、含有的子函数binary4

3、考前须知5

4、例题展示5

二、用matlab实现Feno编码7

1、编码主程序7

2、两个子m文件展示9

3、考前须知12

4、例题展示12

一、用matlab实现Shannon编码

1、编码主程序

n=input(输入单符号信源个数n=)

p=zeros(1,n);

fori=1:n

p(1,i)=input(输入单符号信源个数:);

end

ifsum(p)1||sum(p)1

error(不符合概率分布无效)

end

y=fliplr(sort(p));%大到小排序

D=zeros(n,4);%生成n*4的零矩阵

D(:,1)=y;%把y赋给零矩阵的第一列

fori=2:n

D(1,2)=0;%令第一行第二列的元素为0

D(i,2)=D(i-1,1)+D(i-1,2);%求累加概率

end

fori=1:n

D(i,3)=-log2(D(i,1));%求第三列的元素

D(i,4)=ceil(D(i,3));%求第四列的元素,对D(i,3)向无穷方向取最小正整数

end

D

A=D(:,2);%取出D中第二列元素

B=D(:,4);%取出D中第四列元素

forj=1:n

C=binary(A(j),B(j))%生成码字

End

2、含有的子函数binary

function[C]=binary(A,B)%对累加概率求二进制的函数

C=zeros(1,B);%生成零矩阵用于存储生成的二进制数,对二进制的每一位进行操作

temp=A;%temp赋初值

fori=1:B%累加概率转化为二进制,循环求二进制的每一位,A控制生成二进制的位数

temp=temp*2;

iftemp1

temp=temp-1;

C(1,i)=1;

else

C(1,i)=0;

end

end

3、考前须知

正式运行前应该把binary.m文件放到matlab的工作空间中去,以保证主函数能成功调用。

图一子函数存储示意图

4、例题展示

将课本第五章例题4键入入运行,可得结果和课本完全一致。

输入信源符号个数n=7

n=

7

输入信源符号概率:0.2

输入信源符号概率:0.19

输入信源符号概率:0.18

输入信源符号概率:0.17

输入信源符号概率:0.15

输入信源符号概率:0.1

输入信源符号概率:0.01

D=

0.200002.32193.0000

0.19000.20002.39593.0000

0.18000.39002.47393.0000

0.17000.57002.55643.0000

0.15000.74002.73703.0000

0.10000.89003.32194.0000

0.01000.99006.64397.0000

C=

000

C=

001

C=

011

C=

100

C=

101

C=

1110

C=

1111110

二、用matlab实现Feno编码

1、编码主程序

clearall;

N=input(N=);%输入信源符号的个数

s=0;l=0;H=0;

fori=1:N

fprintf(第%d个,i);

p(i)=input(p=);%输入信源符号概率分布矢量,p(i)1

ifp(i)=0

error(不符合概率分布)

end

s=s+p(i)

H=H+(-p(i)*log2(p(i)));%计算信源信息熵

end

if(s=0.999999||s=1.000001)

error(不符合概率分布)

end

tic;

fori=1:N-1%按概率分布大小对信源排序

forj=i+1:N

ifp(i)p(j)

m=p(j);p(j)=p(i);p(i)=m;

end

end

end

x=f1(1,N,p,1);

fori=1:N%计算平均码长

L(i)=le

文档评论(0)

181****7662 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档