1、DMC 信道容量迭代计算的 matlab 实现-通信与信息系统一、用了 matlab 实现 DMC 容量迭代的算法如下:1.初始化信源分布: 一般我选.0deta10,1,0)( , 选置, krirPkideta=0.000001。2. 。, )()()( kijijikikij tpt得 反 向 转 移 概 率 矩 阵由 式 3. 111 logexp kikijijkijijkiki pPt计 算由 式。4. CtptPIC krisjkijjikk 10011 logexlog, 计 算由 式5.若 ,则 k=k+1,转第 2 步akdet)1(6.输出迭代次数 k 和 和 ,终止。1
2、kCkP二、了解了信道容量的定义和 DMC 信道容量迭代计算方法,我用了 matlab 来进行编程进行迭代计算得出信道容量。不足之处在于每迭代一次就输出一次迭代次数直到最后一次迭代。1)输入:输入信源个数、信宿个数和信道容量的精度,程序能任意生成随机的信道转移概率矩阵,也可以自己输入信道转移矩阵。2)输出:输出最佳信源分布和信道容量。将附件里的 dmc.m 文件直接 run 运行可以自主输入信道转移概率矩阵,按照程序中提示将那两句代替判断输入矩阵是否正确的那部分,dmc1.m 运行可以随机生成信道转移概率矩阵。3、检验程序之一:输入信源个数:2输入信宿个数:3输入信道容量的精度: 0.0000
3、01输入信道转移矩阵 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 列随机矩阵 QA=sum(Q,2); %把 Q
4、 矩阵每一行相加和作为一个列矩阵 AB=repmat(A,1,s); %把矩阵 A 的那一列复制为 S 列的新矩阵%判断信道转移概率矩阵输入是否正确P=input(输入信道转移矩阵 P:)%从这句话开始将用下面两句代替可自动生成信道转移矩阵r,s=size(P); for i=1:rif(sum(P(i,:)=1) %检测概率转移矩阵是否行和为 1. error(概率转移矩阵输入有误!) return;endfor j=1:sif(P(i,j)1) %检测概率转移矩阵是否负值或大于 1error(概率转移矩阵输入有误!) return;endendend%将上面的用下面两句代替可自动生成信道转
5、移矩阵%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/detam=E.*P; % m=p.*E; %后验概率的分子部分a=sum(m); %把得到的矩阵 m 每列相加之和构成一行su1=repmat(a,r,1);%把得到的行矩阵 a 复制 r 行,成一新矩阵 sul
6、,后验概率的分母部分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) enddisp(最大信道容量时的信源分布:p=),disp(p)disp(最大信道容量:C=),disp(C(k+1)五、运行结果如下:检验程序之一
7、:输入信源个数:2输入信宿个数:3输入信道容量的精度: 0.000001输入信道转移矩阵 P:0.5000 0.3000 0.2000;0.3000 0.5000 0.2000P =0.5000 0.3000 0.20000.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.500
8、0 0.2000检验程序之四:P:0.6 0.4;0.01 0.99输入信源个数:2输入信宿个数:2输入信道容量的精度: 0.000001输入信道转移矩阵 P:0.6 0.4;0.01 0.99P =0.6000 0.40000.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.38980.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.0610YS20112508 夏笑笑 通信与信息系统