信息论与编码实验报告Word文档格式.docx
- 文档编号:21975522
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:12
- 大小:315.48KB
信息论与编码实验报告Word文档格式.docx
《信息论与编码实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《信息论与编码实验报告Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
左边重,右边重,平衡。
这3种情况也是等概率的,所以他所提供的信息量为:
y=Log3
在K次测量中,要将事件的不确定度完全消除,所以
K=Log(2N+1)/Log3
根据上式,当N=12时,K=2.92<
3所以13只硬币是可以在3次称量中达到
目的的。
通过此式,我们还可以计算得到:
通过3次测量而找出异常硬币,N的最大值为13.
2.方案的提出
为了描述方便,我们给这12枚硬币分别编号
(1)-(12)。
首先,任选8个比较,如选:
⑴⑵⑶⑷比⑸⑹⑺⑻
1.若一样重,则假币在⑼~⑿中,第二步:
⑼⑽比⑾⑴
(1)若一样重,则可能的假币为⑿。
则第三步:
⑴比⑿
a.若一样重,则没有假币;
b.不一样重,则假币为⑿:
如果
(1)>
(12),则假币轻,反之,假币重;
(2)若⑼⑽重,则第三步:
⑼比⑽
a.若一样重,则假币为⑾(较轻)
b.不一样重,则假币为⑼、⑽中较重者
(3)若⑼⑽轻,则第三步:
a.若一样重,则假币为⑾(较重)
b.不一样重,则假币为⑼、⑽中较轻者
2.若⑴⑵⑶⑷重,则第二步:
⑴⑵⑸比⑶⑷⑹
(1)若一样重,则假币在⑺⑻中,第三步:
⑺比⑻假币为⑺、⑻中较轻者
(2)若⑴⑵⑸端较重,则假币在⑴⑵⑹中,第三步:
⑴比⑵
a.若一样重,则假币为⑹(较轻)
b.不一样重,则假币为⑴⑵中较重者
(3)若⑶⑷⑹端较重,则假币在⑶⑷⑸中,第三步:
⑶比⑷
a.若一样重,则假币为⑸(较轻)
b.不一样重,则假币为⑶、⑷中较重者
3.若⑴⑵⑶⑷轻,则与上面类似,第二步:
⑴⑵⑸比⑶⑷⑹
⑺比⑻假币为⑺、⑻中较重者
(2)若⑴⑵⑸端较轻,则假币在⑴⑵⑹中,第三步:
⑴比⑵
a.若一样重,则假币为⑹(较重)
b.不一样重,则假币为⑴⑵中较轻者
(3)若⑶⑷⑹端较轻,则假币在⑶⑷⑸中,第三步:
a.若一样重,则假币为⑸(较重)
b.不一样重,则假币为⑶、⑷中较轻者
3.用C语言编程实现上述方案为:
#include
<
stdio.h>
void
main()
{
int
i;
float
a[12];
for(i=0;
i<
12;
i++)
scanf("
%f"
&
a[i]);
if(a[0]+a[1]+a[2]+a[3]==a[4]+a[5]+a[6]+a[7])
if(a[0]+a[1]+a[2]==a[8]+a[9]+a[10])
if(a[8]==a[11])
printf("
There
is
no
special
coin!
\n"
);
else
if(a[8]>
a[11])
a
coin:
%f(12)
and
it'
s
lighter
than
others.\n"
a[11]);
heavier
}
if(a[0]+a[1]+a[2]>
a[8]+a[9]+a[10])
if(a[8]==a[9])
%f(11)
a[10]);
a[9])
%f(10)
a[9]);
%f(9)
a[8]);
if(a[0]+a[1]+a[2]+a[3]>
a[4]+a[5]+a[6]+a[7])
if(a[0]+a[2]+a[5]==a[1]+a[4]+a[8])
if(a[6]==a[7])
%f(4)
a[3]);
if(a[6]>
a[7])
%f(8)
a[7]);
%f(7)
a[6]);
if(a[0]+a[2]+a[5]>
a[1]+a[4]+a[8])
if(a[0]==a[2])
%f(5)
a[4]);
if(a[0]>
a[2])
%f
(1)
a[0]);
%f(3)
a[2]);
if(a[1]>
a[8])
%f
(2)
a[1]);
if(a[5]<
%f(6)
a[5]);
else
if(a[0]+a[2]+a[5]<
{
if(a[1]<
if(a[5]>
}
}
运行结果如图:
即输入12个数表示这12枚硬币的重量,最后输出哪一枚为假币,并判断其轻重。
四、实验总结
本次实验首先用信息熵的角度对实验进行了理论分析,即理论上要将假币找出,即消除事件的不确定度,只需要3次即可。
然后又通过实际的称重情况对如何使用3次来称出硬币进行了分类讨论。
最后附上的C语言程序则是对实际称重过程的描述。
通过本次实验,我对信息熵的理解更深入了,即要要想得到一个事件最终结果,即消除其不确定度便可以实现。
通过这样的理解,对于信息熵在实际生活中的应用也得到了拓展。
实验二信道容量的迭代算
一、实验目的
(1)进一步熟悉信道容量的迭代算法。
(2)学习如何将复杂的公式转化为程序。
(3)掌握C语言数值计算程序的设计和调试技术。
二、实验原理
1.算法如下
记
,
,
i=1,2...r;
j=1,2...s
初始化信源分布
,置迭代计数器k=0,设信道容量相对误差门限为δ,δ>
0;
如果
,转向
置迭代序号k+1k,转向
输出
的结果和
的结果
停止
2.算法流程图如下
三、实验容
1.令pe1pe20.1和pe1pe20.01,分别计算该对称信道的信道容量和最佳分布;
2.令pe10.15,pe20.1和pe10.075pe20.01,分别计算该信道的信道容量和最佳分布;
信道容量是信息传输率的极限,当信息传输率小于信道容量时,通过信道编码,能够实现几乎无失真的数据传输;
当数据分布满足最佳分布时,实现信源与信道的匹配,使得信息传输率能够达到信道容量。
本实验利用信道容量的迭代算法,使用计算机完成信道容量的计算。
四、实验程序如下
#include<
math.h>
intmain()
{
doublePe1,Pe2,Pa1_=0,Pa2_=0;
doubleb1a1,b2a1,b1a2,b2a2;
doublePa1=0,Pa2=0;
doubleI=0,max=0;
//平均互信息量,最大平均互信息量
intcount=0;
输入信道容量参数Pe1:
"
%lf"
Pe1);
输入信道容量参数Pe2:
Pe2);
信道容量参数:
Pe1=%lfPe2=%f\n"
Pe1,Pe2);
b1a1=1-Pe1;
b2a1=Pe1;
b1a2=Pe2;
b2a2=1-Pe2;
for(Pa1=0.01;
Pa1<
=1;
Pa1=Pa1+0.01)
{Pa2=1-Pa1;
count=count+1;
I=Pa1*b1a1*(log(b1a1/(Pa1*b1a1+Pa2*b1a2))/log
(2))
+Pa1*b2a1*(log(b2a1/(Pa1*b2a1+Pa2*b2a2))/log
(2))
+Pa2*b1a2*(log(b1a2/(Pa1*b1a1+Pa2*b1a2))/log
(2))
+Pa2*b2a2*(log(b2a2/(Pa1*b2a1+Pa2*b2a2))/log
(2));
%10lf"
I);
if(I>
max)
max=I;
Pa1_=Pa1,Pa2_=Pa2;
else
continue;
一共计算机了:
%d\n"
count);
最大互信息量为:
%lf\n"
max);
最大互信息量的P(a1)=%lf;
P(a2)=%lf\n"
Pa1_,Pa2_);
五、实验结果如图
1.Pe1=Pe2=0.1,计算结果如图:
2.Pe1=Pe2=0.01计算结果如图:
3.Pe1=0.15,Pe2=0.1时的计算结果如图:
4.Pe1=0.075,Pe2=0.01时的计算结果如下:
六、实验总结
本次实验通过信道容量迭代算法的编程计算,我对信道容量迭代算法有了全新的认识,此前对教材的理解可能就停留在教材上的那几个计算公式上,但是这次实验通过对程序的编写,我深刻体会到自己知识学的太浅薄,没有从本质上把握住要点,运用知识也有些生硬。
因此,在今后学习当中,要注意去深度思考,把所学知识有机联系起来,从而把书由薄变厚,再总结进而把书由厚变薄,掌握本质,理解要领。
此次实验进一步加强了我的编程能力和严谨的逻辑思维能力,受益颇多。
实验三
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息论 编码 实验 报告