大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
实验三香农编码
信息论与编码实验报告
院系: 哈尔滨理工大学荣成校区
专业: 电子信息工程
学号:
姓名:
日期: 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=s+p(i); %行概率求和
H=H+(-p(i)*log2(p(i)));%计算信源信息熵
end
if abs(s-1)>0 %若行概率和>1则报错
error(‘不符合概率分布’)
end
for i=1:N-1 %for循环按概率分布大小对信源排序
for j=i+1:N
if p(i)
m=p(j);
p(j)=p(i);
p(i)=m;
end
end
end
for i=1:N
a=-log2(p(i)); %确定满足不等式的整数a,并领a为第i个码字的长度
if mod(a,1)==0 %a对1取余后赋值给a
w=a;
else
w=fix(a+1); %计算各信源符号的码长
end
l=l+p(i)*w; %计算平均码长
end
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); %从2列开始累加
end
end
%计算累加概率
for i=1:N
for j=1:w
W(i,j)=fix(P(i)*2); %对每次的P(i)取码字,长度与a相同
P(i)=P(i)*2-fix(P(i)*2); %将累加概率转化为L(i)位二进制码字
end
end
W %显示码字
r %显示平均码长
n %显示编码效率
H %显示信息熵H
实验结果
>> xiangnong
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
六、实验心得
此次实验让我明白了做程序需要先进行需求分析,然后画出流程图,根据流程图把每部分模块完成,然后再进行调试和编辑,提高了我做
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/195272.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...