首页 > 编程知识 正文

香农编码的用途,c语言编码

时间:2023-05-06 07:07:13 阅读:61153 作者:1698

实验三香农代码

信息论与编码实验报告

系:哈尔滨理工大学荣成校区

专业:电子信息工程

学号:

名称:

日期: 2015年6月16日

香农码

信息论与编码第三次实验报告

一、实验的目的和任务?

1、 理解源代码的意思吗?

2、 你熟悉吗? MATLAB编程;

3、 掌握香农代码的方法和计算机的实现?

4、 对给定的源进行香农编码,计算编码效率;

二、实验原理介绍?

给出某个源符号的概率分布,按以下顺序进行香农编码

? 1、源符号概率从大到小排列;

2、满足以下不等式的整数值的长度是多少?

3、计算第I条消息的累积概率,以创建唯一可读消息:

? 4、将累积概率转换为二进制数;

如果取二进制小数点后的位数,则成为该消息符号的二进制码字。

三.实验设备

电脑

Matlab2014

四.编码程序

n=input(n=); %输入源符号的数量

s=0; 初始化%行的概率

l=0; 初始化%列的概率

H=0; %初始化信息熵

for i=1:N

p(I )=input('p=' ); %输入源符号概率分布向量

p(I ) 1; %输入概率小于1

s=sp(I ); %行的概率总和

h=h(-p ) I ) *log2 ) p ) I ); %计算源信息熵

结束

ifabs(s-1 )0 %报告行概率和1时的错误

错误(不符合概率分布) ) ) )。

结束

for i=1:N-1 %for按循环概率分布大小对源进行排序

for j=i 1:N

IFP(I ) )。

m=p(j;

p(j )=p ) I;

p(I )=m;

结束

结束

结束

for i=1:N

a=-log2(p ) I ); 决定满足%不等式的整数a,将a作为第I个码字的长度

ifmod(a,1 )==0 %a对1取馀数后代入a

w=a;

else

w=fix(a1; %计算每个源符号的代码长度

结束

L=LP(I ) *w; %计算平均代码长度

结束

r=l; %香农编码的消息率(此处为L=1、m=2) ) ) ) ) ) ) ) )。

n=H/r; %编码效率计算

p(1)=0; %初期1列为0;

for i=2:N

p(I )=0; %初期1列为0; 累计加法

for j=1:i-1

p(I )=p ) I ) p ) j; %从两列开始累计

结束

结束

计算%累积概率

for i=1:N

for j=1:w

w(I,j )=福克斯(p ) I ) *2; %每次对p(I )取码字,长度与a相同

p(I )=p(I ) *2-fix ) p (I ) *2); 将%累积概率转换为l(I )位的二进制码字

结束

结束

W %显示码字

r %表示平均代码长度

n %表示编码效率

H %表示信息熵h

实验结果

香农

N=6

p=0.25

p=0.25

p=0.20

p=0.15

p=0.10

p=0.05

W=

0 0 0 0 0

0 1 0 0 0

1 0 0 0 0

1 0 1 1 0

1 1 0 1 1

1 1 1 1 0

r=

2.7000

n=

0.8975

H=

2.4232

六、实验心得

在这次实验中,我们首先进行了需求分析,制定了流程图,了解到需要根据流程图完成各个模块,然后进行调试和编辑,从而提高了我要做的事情

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。