当前位置:文档之家› DMC信道容量迭代计算的matlab实现

DMC信道容量迭代计算的matlab实现

DMC 信道容量迭代计算的matlab 实现--通信与信息系统
一、用了matlab 实现DMC 容量迭代的算法如下:
1. 初始化信源分布:.0deta 10,1,0,1)(>>=⋯==,选置,,k r i r
P k i 一般我选deta=0.000001。

2. }{,)()()()(k ij i
ji
k i ji k i k ij t p p p p t 得反向转移概率矩阵由式∑=。

3.
()()()()(){}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 计算由式。

4.
()()()()()()。

C t p t P I C k r i s j k ij ji k k k 10011log exp log ,+==++⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎥⎦⎤⎢⎣⎡==∑∑计算由式
5. 若a C C C k k k det )1()
()1(>-++,则k=k+1,转第2步
6.输出迭代次数k 和()1+k C 和1+k P ,终止。

二、了解了信道容量的定义和DMC 信道容量迭代计算方法,我用了matlab 来进行编程进行迭代计算得出信道容量。

不足之处在于每迭代一次就输出一次迭代次数直到最后一次迭代。

1)输入:输入信源个数、信宿个数和信道容量的精度,程序能任意生成随机的
信道转移概率矩阵,也可以自己输入信道转移矩阵。

2)输出:输出最佳信源分布和信道容量。

将附件里的dmc.m 文件直接run 运行
可以自主输入信道转移概率矩阵,按照程序中提示将那两句代替判
断输入矩阵是否正确的那部分,dmc1.m 运行可以随机生成信道转移
概率矩阵。

三、检验程序
之一:
输入信源个数:2
输入信宿个数:3
输入信道容量的精度: 0.000001
输入信道转移矩阵P :[0.5000 0.3000 0.2000;0.3000 0.5000 0.2000] 之二:P :[0.4000 0.3000 0.2000;0.3000 0.5000 0.2000] 之三:P :[1.1000 -0.3000 0.2000;0.3000 0.5000 0.2000] 之四:P:[0.6 0.4;0.01 0.99]
之五:自动生成信道转移矩阵
四、程序源代码:
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))
五、运行结果如下:
检验程序之一:
输入信源个数:2
输入信宿个数:3
输入信道容量的精度:0.000001
输入信道转移矩阵P:[0.5000 0.3000 0.2000;0.3000 0.5000 0.2000]
P =
0.5000 0.3000 0.2000
0.3000 0.5000 0.2000
原始信源分布:
ans =
0.5000 0.5000
迭代次数:k=
1
最大信道容量时的信源分布:p=
0.5000 0.5000
最大信道容量:C=
0.0365
检验程序之二:P:[0.4000 0.3000 0.2000;0.3000 0.5000 0.2000]
检验程序之三:P:[1.1000 -0.3000 0.2000;0.3000 0.5000 0.2000]
检验程序之四:P:[0.6 0.4;0.01 0.99]
输入信源个数:2
输入信宿个数:2
输入信道容量的精度:0.000001
输入信道转移矩阵P:[0.6 0.4;0.01 0.99]
P =
0.6000 0.4000
0.0100 0.9900
原始信源分布:
ans =
0.5000 0.5000
迭代次数:k=
1
迭代次数:k=
2
迭代次数:k=
3
迭代次数:k=
4
迭代次数:k=
5
迭代次数:k=
6
迭代次数:k=
7
迭代次数:k=
8
迭代次数:k=
9
最大信道容量时的信源分布:p=
0.4240 0.5760
最大信道容量:C=
0.3688
检验程序之五:自动生成信道转移矩阵变为dmc1.m文件改程序如下:
结果运行如下:
输入信源个数:2
输入信宿个数:2
输入信道容量的精度:0.000001 信道转移概率矩阵:
P =
0.6102 0.3898
0.3223 0.6777
原始信源分布:
ans =
0.5000 0.5000
迭代次数:k=
1
迭代次数:k=
2
迭代次数:k=
3
迭代次数:k=
4
迭代次数:k=
5
迭代次数:k=
6
迭代次数:k=
7
迭代次数:k=
8
迭代次数:k=
9
迭代次数:k=
10
迭代次数:k=
11
迭代次数:k=
12
最大信道容量时的信源分布:p=
0.4977 0.5023
最大信道容量:C=
0.0610
YS20112508 夏笑笑通信与信息系统。

相关主题