当前位置:文档之家› 一般离散无记忆信道容量的迭代计算

一般离散无记忆信道容量的迭代计算

一般离散无记忆信道容量的迭代计算
信道容量的迭代算法
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 得到反向转移概率矩阵根据式子∑=。

第三步:
第四步:
第五步: 若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('输入信道容量的精度: ');
()()()()(){}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 ,+==++⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎥⎦⎤⎢⎣⎡==∑∑计算由式
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,执行
,将得到的结果代入,得到)1(+k p 后
,再进行
a C C C k k k det )1()
()1(>-++的判断,这个条件满足时继续求,再依次往下计算,直至
这个条件不满足,然后输出k 和()1+k C 和1+k P 。

总的来说这不过是将矩阵不断的代入公式,当最后的精度不大于0.000001.输出k 和()1+k C 和1+k 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 计算由式()()()()()()。

C t p t P I C k r i s j k ij ji k k k 10011log exp log ,+==++⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎥⎦⎤⎢⎣⎡==∑∑计算由式)(k ij
t
4.心得体会
在此次matlab编程实现一般离散无记忆信道容量的迭代算法的过程中,开始我觉得这十分的困难,经过网上查阅资料和请教同学,最后才对本次设计有了一定的理解,详细理解了信道容量的迭代算法过程。

经过理解,发现这种编码其实挺简单的,最重要的是怎样用程序把它实现,这对我们的编程能力也是一次考验。

相关主题