DMC信道容量迭代算法(Matalab实现) |
您所在的位置:网站首页 › 信道容量≥0 › DMC信道容量迭代算法(Matalab实现) |
一些公式没法粘贴,以后再补上 一、用了matlab实现DMC容量迭代的算法如下: 设信道输入和输出符号集大小分别为r,s. 1.初始化信源分布:这里选deta=0.000001。 2.。 3. 。
4. 5. 若,则k=k+1,转第2步 6. 输出迭代次数k和和,终止。 二、了解了信道容量的定义和DMC信道容量迭代计算方法,我用了matlab来进行编程进行迭代计算得出信道容量。不足之处在于每迭代一次就输出一次迭代次数直到最后一次迭代。 1)输入:输入信源个数、信宿个数和信道容量的精度,输入信道转移矩阵。 2)输出:输出最佳信源分布和信道容量。
三、检验程序 之一: 输入信源个数:2 输入信宿个数:3 输入信道容量的精度:0.000001 输入信道转移矩阵P:[0.98 0.02; 0.05 0.95] 之二:P:[0.60.4;0.05 0.95] 之三:P:[0.8 0.150.05;0.05 0.15 0.8] 之四:P:[0.99 0.01 0;0.005 0.99 0.005;0 0.010.99] 四、程序源代码: clear; %r=input('输入信源个数:'); %s=input('输入信宿个数:'); %deta=input('输入信道容量的精度: '); deta=0.000001; %判断信道转移概率矩阵输入是否正确 P=input('输入信道转移矩阵P:'); [r,s]=size(P); for i=1:r if(sum(P(i,:))~=1) error('概率转移矩阵输入有误!!') return; end for j=1:s if(P(i,j)1) error('概率转移矩阵输入有误!!') return; end end end i=1:1:r; p(i)=1/r;%p为列向量 disp('原始信源分布:'),disp(p) E=repmat(p',1,s);%把r个等概率元素组成一列,复制为s列
for k=1:1:1/deta m=E.*P; q=sum(m);%把得到的矩阵m每列内部相加之和构成一行,得到输出矩阵 su1=repmat(q,r,1);%把得到的行矩阵a复制r行,成一新矩阵su1 t=P./su1; for i=1:r for j = 1:s if t(i,j)==0 t(i,j)=1 end end end n=exp(sum(P.*log(t),2));%ln(t)在这里表示为log(t),列向量 u=p.*n';%信源分布的分子,行向量 su2=sum(u);%信源分布的分母 p=u/su2; E=repmat(p',1,s); su3=max(n); C1=log2(su2);C2=log2(su3); kk=C2-C1; if(kk |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |