费诺编码的matlab实现.docx

上传人:b****6 文档编号:6318286 上传时间:2023-01-05 格式:DOCX 页数:7 大小:103.09KB
下载 相关 举报
费诺编码的matlab实现.docx_第1页
第1页 / 共7页
费诺编码的matlab实现.docx_第2页
第2页 / 共7页
费诺编码的matlab实现.docx_第3页
第3页 / 共7页
费诺编码的matlab实现.docx_第4页
第4页 / 共7页
费诺编码的matlab实现.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

费诺编码的matlab实现.docx

《费诺编码的matlab实现.docx》由会员分享,可在线阅读,更多相关《费诺编码的matlab实现.docx(7页珍藏版)》请在冰豆网上搜索。

费诺编码的matlab实现.docx

费诺编码的matlab实现

费诺编码的matlab实现

多媒体技术实验报告

 

学院:

城南学院

姓名:

学号:

指导老师:

尹波

时间:

2015年11月25日

 

教师评语:

成绩评阅教师日期

 

实验一:

费诺编码的matlab实现

1.实验目的

1)掌握费诺编码的思想和具体方法。

2)用MATLAB语言实现费诺编码。

2.实验原理及编码思想:

费诺编码属于概率匹配编码,但不是最佳的编码方法。

在编N进制码时首先将信源消息符号按其出现的概率依次由大到小排列开来,并将排列好的信源符号按概率值分N大组,使N组的概率之和近似相同,并对各组赋予一个N进制码元0、1……N-1。

之后再针对每一大组内的信源符号做如上的处理,即再分为概率和相同的N组,赋予N进制码元。

如此重复,直至每组只剩下一个信源符号为止。

此时每个信源符号所对应的码字即为费诺码。

具体过程如下:

[1]将信源消息符号按其出现的概率大小依次排列:

P1>=P2>=…>=Pn。

[2]依次排列的信源符号按概率值分为两大组,使两个组的概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。

[3]使划分后的两个组的概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。

[4]如此重复,直至每个组只剩下一个信源

4.程序代码

clc;

clear;

A=[0.19,0.18,0.17,0.16,0.13,0.10,0.06,0.01];

A=fliplr(sort(A));%降序排列

[m,n]=size(A);

fori=1:

n

B(i,1)=A(i);%生成B的第1列

end

%生成B第2列的元素

a=sum(B(:

1))/2;

fork=1:

n-1

ifabs(sum(B(1:

k,1))-a)<=abs(sum(B(1:

k+1,1))-a)

break;

end

end

fori=1:

n%生成B第2列的元素

ifi<=k

B(i,2)=0;

else

B(i,2)=1;

end

end

%生成第一次编码的结果

END=B(:

2)';

END=sym(END);

%生成第3列及以后几列的各元素

j=3;

while(j~=0)

p=1;

while(p<=n)

x=B(p,j-1);

forq=p:

n

ifx==-1

break;

else

ifB(q,j-1)==x

y=1;

continue;

else

y=0;

break;

end

end

end

ify==1

q=q+1;

end

ifq==p|q-p==1

B(p,j)=-1;

else

ifq-p==2

B(p,j)=0;

END(p)=[char(END(p)),'0'];

B(q-1,j)=1;

END(q-1)=[char(END(q-1)),'1'];

else

a=sum(B(p:

q-1,1))/2;

fork=p:

q-2

ifabs(sum(B(p:

k,1))-a)<=abs(sum(B(p:

k+1,1))-a);

break;

end

end

fori=p:

q-1

ifi<=k

B(i,j)=0;

END(i)=[char(END(i)),'0'];

else

B(i,j)=1;

END(i)=[char(END(i)),'1'];

end

end

end

end

p=q;

end

C=B(:

j);

D=find(C==-1);

[e,f]=size(D);

ife==n

j=0;

else

j=j+1;

end

end

B

A

END

fori=1:

n

[u,v]=size(char(END(i)));

L(i)=v;

end

avlen=sum(L.*A)

H=-sum(A.*log2(A));

disp(['ENtropyofthesource:

',num2str(H),'bits']);

5.实验结果

①实验运行结果(以[0.19,0.18,0.17,0.16,0.13,0.10,0.06,0.01]为例)

②计算:

信息熵是多少?

上述编码方法的平均码长是多少?

信息熵是2.7829;平均码长是2.88;

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1