信息论与编码课程大作业信道容量的迭代算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息论与编码课程大作业

题目:信道容量的迭代算法

学生姓名:

学号:2010020200

专业班级:10电子信息工程

2013 年5 月18 日

信道容量的迭代算法

1信道容量的迭代算法的步骤

一、用了matlab 实现DMC 容量迭代的算法如下: 第一步:首先要初始化信源分布:.0deta 10,1,0,1

)

(>>=⋯==,选置,,k r i r

P k i

即选取一个精度,本次中我选deta=0.000001。 第二步:}{,)

()()()

(k ij i

ji

k i

ji

k i k ij t p p

p p t 得到反向转移概率矩阵根据式子∑=

第三步:

()()()()(){}

111]

log exp[]

log exp[+++==

∑∑∑k i k i

j

ij k ji

j

ij k ji k i p P t p

t p p 计算由式。

第四步:

()

()()

()()()。

C t p t P

I C

k r i s j k ij ji k k k 10011log exp log ,+==++⎪⎭⎪⎬⎫

⎪⎩⎪⎨⎧⎥⎦⎤⎢⎣⎡==∑∑计算由式

第五步: 若

a C

C C k k k det )

1()

()1(>-++,则执行k=k+1,然后转第二步。直至转移条件不成立,接着

执行下面的程序。

第六步:输出迭代次数k 和()1+k C 和1+k P ,程序终止。

2. Matlab 实现

clear;

r=input('输入信源个数:'); s=input('输入信宿个数:');

deta=input('输入信道容量的精度: '); Q=rand(r,s); %形成r 行s 列随机矩阵Q

A=sum(Q,2); %把Q矩阵每一行相加和作为一个列矩阵A

B=repmat(A,1,s); %把矩阵A的那一列复制为S列的新矩阵

%判断信道转移概率矩阵输入是否正确

P=input('输入信道转移矩阵P:')%从这句话开始将用下面两句代替可自动生成信道转移矩阵

[r,s]=size(P);

for i=1:r

if(sum(P(i,:))~=1) %检测概率转移矩阵是否行和为1.

error('概率转移矩阵输入有误!!')

return;

end

for j=1:s

if(P(i,j)<0||P(i,j)>1) %检测概率转移矩阵是否负值或大于1

error('概率转移矩阵输入有误!!')

return;

end

end

end

%将上面的用下面两句代替可自动生成信道转移矩阵

%disp('信道转移概率矩阵:')

%P=Q./B 信道转移概率矩阵(每一个原矩阵的新数除以所在行的数总和)

i=1:1:r; %设置循环首项为1,公差为1,末项为r(Q的行数)的循环

p(i)=1/r; %原始信源分布r个信源,等概率分布

disp('原始信源分布:')

p(i)

E=repmat(p',1,s);%把r个等概率元素组成一列,复制为s列

for k=1:1:1/deta

m=E.*P; % m=p.*E; %后验概率的分子部分

a=sum(m); %把得到的矩阵m每列相加之和构成一行

su1=repmat(a,r,1);%把得到的行矩阵a复制r行,成一新矩阵sul,后验概率的分母部分

t=m./su1; %后验概率矩阵

n=exp(sum(P.*log(t),2)); %信源分布的分子部分

su2=sum(n); %信源分布的分母部分

p=n/su2; %信源分布

E=repmat(p,1,s);

C(k+1)=log(sum(exp(sum(P.*log(t),2))))/log(2);

kk=abs(C(k+1)-C(k))/C(k+1);

if(kk<=deta)

break;

end

disp('迭代次数:k='),disp(k)

end

disp('最大信道容量时的信源分布:p='),disp(p')

disp('最大信道容量:C='),disp(C(k+1))

3.运行结果及分析(宋体四号,加粗)

结果分析:这两组数据都是我随机选的,都是选的信源个数为2,信宿的个数为3,选用的精度为

0.000001。然后输入信道转移矩阵

P ,执行

}

{,)

()()()

(k ij i

ji

k i

ji

k i k ij

t p p

p p t 得到反向转移概率矩阵∑=

()()()()(){}

111]

log exp[]

log exp[+++==

∑∑∑k i k i

j

ij k ji

j

ij k ji k i p P t p

t p p 计算由式,

)

1(+k p 后

()

()()

()()()。

C t p t P

I C

k r i s j k ij ji k k k 10011log exp log ,+==++⎪⎭

⎪⎬⎫

⎪⎩⎪⎨⎧⎥⎦⎤⎢⎣⎡==∑∑计算由式,再进行

a C C C k k k det )

1()

()1(>-++的判断,这个条件满足时继续求

)

(k ij

t ,再依次往下计算,直至这个条件不

满足,然后输出k 和()

1+k C

和1+k P 。总的来说这不过是将矩阵不断的代入公式,当最后的

精度不大于0.000001.输出k 和()1+k C 和1+k P 。

相关文档
最新文档