大三下信息论实验报告.docx

上传人:b****5 文档编号:6188246 上传时间:2023-01-04 格式:DOCX 页数:17 大小:171.24KB
下载 相关 举报
大三下信息论实验报告.docx_第1页
第1页 / 共17页
大三下信息论实验报告.docx_第2页
第2页 / 共17页
大三下信息论实验报告.docx_第3页
第3页 / 共17页
大三下信息论实验报告.docx_第4页
第4页 / 共17页
大三下信息论实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

大三下信息论实验报告.docx

《大三下信息论实验报告.docx》由会员分享,可在线阅读,更多相关《大三下信息论实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

大三下信息论实验报告.docx

大三下信息论实验报告

实验1绘制二进熵函数曲线、串联信道容量曲线

一、实验内容

用Excel或Matlab软件制作二进熵函数曲线、串联信道容量曲线。

二、实验环境

1.计算机

2.Windows2000或以上

3.MicrosoftOffice2000或以上

4.Matlab6.0或以上

三、实验目的

1.掌握Excel的数据填充、公式运算和图表制作

2.掌握Matlab绘图函数

3.掌握、理解熵函数表达式及其性质

四、实验要求

1.提前预习实验,认真阅读实验原理以及相应的参考书。

2.认真高效的完成实验,实验中服从实验室管理人员以及实验指导老师的管理。

3.认真填写实验报告。

五、实验原理

1.Excel的图表功能(略)

2.信源熵的概念及性质

3.串联信道的信道容量(图1)。

图1三个二元对称信道(BSC)的串联

串联

信道转移矩阵

信道容量

I

I,II

I,II,III

p=0.00001:

0.001:

0.9999;

h=Hp(p);

plot(p,h);

title('熵函数')

p=0.00001:

0.001:

0.9999;

c=1-Hp(p.^3+3.*p.*(1-p).^2);

plot(p,c);

title('信道容量')

p=0.00001:

0.001:

0.9999;

c1=1-Hp(p);

c2=1-Hp(2*p.*(1-p));

c3=1-Hp(p.^3+3.*p.*(1-p).^2);

subplot(3,1,1)

plot(p,c1);

title('CⅠ');

subplot(3,1,2)

plot(p,c2);

title('CⅠⅡ');

subplot(3,1,3)

plot(p,c3);

title('CⅠⅡⅢ');

 

 

实验4容量代价函数的计算程序设计

1、问题的提出:

假定一个离散无记忆信源(DMC)的输入符号集为AX={1,2,...,r},输出符号集为AY={1,2,....,s},信道的转移概率矩阵P(Y|X):

{p(y|x)};该信道不是免费的,其输入代价为b(x)。

容量代价函数C(β)=supCn(β)/n

n

如果单位时间内占用信道的平均代价必须≤β,则C(β)的值表示信道单位时间内能够可靠传输的最大信息量。

计算容量代价函数C(β)在通信领域,密码学等方面均有着很重要的用途。

对于一般信道要求出C(β)非常困难,计算过程繁琐,很容易计算错误。

2、解决问题的原理方法:

1.C()的一般计算方法:

计算bmin是很容易的。

当bmin£b£bmax时,设试验信源X达到了C(b),即C(b)=max{I(X;Y):

E([b(x)]=b}。

在数学上,就是在约束条件下:

(1)

并且P(x)³0

(2)

的约束下求平均互信息量

的条件极大值。

为此引入待定常数S和m,并作辅助函数

(3)

其中

得,

(4)

上式两边同乘以p(x)并对x求和。

即C(b)=loge+Sb+m(5)

显然(4)提供r个方程,再加上

(1)

(2)的方程,共r+2个方程;而有r个未知数p(x)、及S、m,共r+2未知数,显然可以求解。

一般来说,S、m是b的函数。

(1)

(2)(4)组成的r+2个方程是一个非常复杂的非线性方程组。

(4)式可以写成矩阵形式:

2.一般非线性方程组求解方法:

下面介绍求非线性方程组一组是实根的梯度法:

设非线性方程组为

并定义目标函数为:

则梯度法的计算过程如下:

(1)选取一组初值x0,x1,...,xn-1

(2)计算目标函数值F

(3)若F

(4)计算目标函数在(x0,x1,...,xn-1)的偏导数

再计算

(5)计算

其中l=F/D。

重复

(2)~(5)直到满足精度要求为止。

在上述过程中,如果D=0,则说明遇到了目标函数的局部极值点,此时可改变初值在试试。

在我们的问题中,不会遇到该问题。

另在计算中我们限制一个最大循环次数,以防D过小,使计算时间过长的情况。

 

3、解决问题的具体方法:

用Matlab画出容量代价函数C(b)的曲线图。

为了计算一给定代价信道的容量函数,要用3个MATLAB函数,如下:

⏹Cfun

CFUN代价容量方程组,用于信道容量

x输入,一行m+2列(1*(m+2)

beta平均代价,标量

b代价矩阵,一行m列(1*m)

Py_x转移概率矩阵,m行n列(m*n)

代码:

functionF=Cfun(x,beta,b,Py_x)

%CFUN代价容量方程组,用于信道容量

%x输入,一行m+2列(1*(m+2)

%beta平均代价,标量

%b代价矩阵,一行m列(1*m)

%Py_x转移概率矩阵,m行n列(m*n)

sizePy_x=size(Py_x);

m=sizePy_x

(1);

n=sizePy_x

(2);

F=zeros(m+2,1);

i=1:

m;

P_y=x(1,1:

m)*Py_x;

TP_y=zeros([m,n]);

forj=1:

m

TP_y(j,:

)=P_y;

end

TP_y=TP_y';

t=Py_x(i,:

)'./TP_y;

t(find(t==0))=1;

F(i)=sum(Py_x(i,:

)'.*log2(t))-log2(exp

(1))-x(m+1)*b(i)-x(m+2);

F(m+1)=1-sum(x(1,1:

m));

F(m+2)=beta-sum(x(1,1:

m).*b);

⏹C

C求信道容量

beta平均代价,标量

b代价矩阵,一行m列(1*m)

Py_x转移概率矩阵,m行n列(m*n)

代码:

functionc=C(beta,b,Py_x)

%C求信道容量

%beta平均代价,标量

%b代价矩阵,一行m列(1*m)

%Py_x转移概率矩阵,m行n列(m*n)

sizeB=size(b);

sizePy_x=size(Py_x);

if~(sizeB

(2)==sizePy_x

(1))

disp('参数b的列数应和参数Py_x的行数相同');

c=-1;

return;

end

m=sizePy_x

(1);

n=sizePy_x

(2);

sumPy=sum(Py_x');

if~(all(Py_x>=0)&all(sumPy==1))

disp('参数Py_x的每个元素都要大于或等于0,且每行的和应等于1');

c=-1;

return;

end

minBeta=min(b);

ifbeta

disp('参数beta太小');

c=-1;

return;

end

x0=ones(1,m+2)./m;

options=optimset('TolFun',0.000001,'Display','off');

r=fsolve(@Cfun,x0,options,beta,b,Py_x);

s=r(m+1);

u=r(m+2);

c=log2(exp

(1))+s*beta+u;

end

⏹plotCBeta

PLOTCBETA画信道的代价容量曲线

b代价向量,一行m列(1*m)

Py_x转移概率矩阵,m行n列(m*n)

代码:

function[minb,maxb]=plotCBeta(b,Py_x)

%PLOTCBETA画信道的代价容量曲线

%b代价向量,一行m列(1*m)

%Py_x转移概率矩阵,m行n列(m*n)

minBeta=min(b);

maxBeta=max(b);

beta=minBeta:

0.1:

maxBeta;

l=length(beta);

r=zeros(1,l);

fori=1:

l

r(i)=C(beta(i),b,Py_x);

end

minb=minBeta;

maxC=max(r);

maxb=maxC;

l=find(r==maxC);

plot(beta(1:

l),r(1:

l));

end

4、实验结果:

示例1:

Q=[100;010;001],b=[321],求其代价容量函数?

>>Q=[100;010;001];

>>b=[3,2,1];

>>plotCBeta(b,Q)

结果:

ans=

1

 

五、结果分析

C(b)的性质:

在βmin≤β≤βmax内,是一个严格上升函数。

C(βmin)=Cmin,C(βmax)=Cmax。

当β≥βmax时,C(β)是一个常数Cmax。

因此C(β)=max{I(X;Y):

E[b(x)]=β},βmin≤β≤βmax。

这说明,达到C(β)的试验信号,可以在E[b(x)]=β的区域中找到,实际上也只能在这个区域内找到。

 

实验6BCH循环码的编码与译码

一、实验内容

用VC或Matlab软件编写循环BCH码的编码与译码程序。

利用程序对教科书的例题做一个测试。

二、实验环境

1.计算机

2.Windows2000或以上

3.MicrosoftVisualC++6.0或以上

4.Matlab6.0或以上

三、实验目的

1.通过BCH循环码的编码与译码程序的编写,彻底了解并掌握循环BCH的编码与译码原理

2.通过循环BCH码的编码与译码程序的编写,提高编程能力。

四、实验要求

1.提前预习实验,认真阅读实验原理以及相应的参考书。

2.对不同信道的进行误码率分析。

特别是对称信道,画出误码性能图。

即信道误码率与循环汉明码之间的关系。

3.认真填写实验报告。

五、实验原理

1.循环BCH的编码与译码原理(略)

2.循环BCH的程序实现。

六、实验步骤

bch_en_decode.m文件

functionbch_en_decode()

code=bch155

code=code+randerr(5,15,1:

3);

code=rem(code,2);

code=gf(code)%随机产生1-3位错误

decode=debch155(code)

end

functiondecode=debch155(code)

code=gf(code);

M=4;

code=gf(code.x,M);

[m,n]=size(code);decode=[];

code1=[];

fori=1:

m;code1=code(i,:

);

M=code1.m;T2=6;N=15;

S=code1*((gf(2,M,code1.prim_poly)).^([N-1:

-1:

0]'*([1:

T2])));

LambdaX=gf([1zeros(1,T2)],M,code1.prim_poly);

Tx=[01zeros(1,T2-1)];

L=0;

fork=1:

T2;

LambdaXTemp=LambdaX;

Delta=S(k)-LambdaXTemp(1+[1:

L])*(S(k-[1:

L]))';

ifDelta.x;

LambdaX=LambdaXTemp-Delta*Tx;

if2*L

L=k-L;

Tx=LambdaXTemp/Delta;

end;

end;

Tx=[0Tx(1:

T2)];

end;

LambdaXValue=LambdaX.x;

LambdaX=gf(LambdaXValue(1:

max(find(LambdaXValue))),M,code1.prim_poly);

errLoc_int=roots(LambdaX);errLoc=log(errLoc_int);

fori=1:

length(errLoc);

errorMag=1;

code1(N-errLoc(i))=code1(N-errLoc(i))-errorMag;

end;

decode=[decode;code1];end;

ccode=gf(decode.x);

decoded=ccode(:

1:

5);

end

function[yout]=bch155(x)%定义函数

k=5;%信息码位,BCH(15,5)

ifnargin<1

x2=randint(5,k);

n=5;

msg=x2%判断输入信息,若未输入,系统自动产生5组信息码,并显示出信息位

elseifrem(length(x),k)==0;n=length(x)/k;x2=[];%判断msg是否为K的整数倍,并把输入码员分组

fori=0:

n-1

x2=[x2;x(i*k+1)x(i*k+2)x(i*k+3)x(i*k+4)x(i*k+5)];

end

ifrem(length(x),k)>0%把输入码员补零并分组

x=[x,zeros(size(1:

k-rem(length(x),k)))];

n=length(x)/k;x2=[];

fori=0:

n-1

x2=[x2;x(i*k+1)x(i*k+2)x(i*k+3)x(i*k+4)x(i*k+5)];

end

end

end

ik=[eye(5)zeros(5,10)];%输入信息码扩展

x3=x2*ik;

yout=[];

fori=1:

n

g=[10100110111];

[w,yo]=deconv(x3(i,:

),g);%产生余式

yo=abs(rem(yo,2));

yout=[yout;yo];

end

yout=yout+x3;%产生信息码

end

运行结果:

msg=

11010

01101

01000

11101

00100

 

code=

110101100100011

011011100001010

010001111010110

111010110010001

001000111101011

code=GF

(2)array.

Arrayelements=

110101010100011

011111100001010

000001111000110

110010111010001

001100111101011

decode=GF(2^4)array.Primitivepolynomial=D^4+D+1(19decimal)

Arrayelements=

110101100100011

011011100001010

010001111010110

111010110010001

001000111101011

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

当前位置:首页 > 高中教育 > 高考

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

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