一般离散无记忆信道容量的迭代(diédài)计算信道容量的迭代(diédài)算法1信道容量的迭代(diédài)算法的步骤一、用了matlab实现DMC容量(róngliàng)迭代的算法如下:第一步:首先(shǒuxiān)要初始化信源分布:即选取一个精度,本次中我选deta=0.000001。第二步:第三步:。第四步:第五步:若,则执行k=k+1,然后转第二步。直至转移条件不成立,接着执行下面的程序。第六步:输出迭代次数k和和,程序终止。2.Matlab实现clear;r=input('输入信源个数:');s=input('输入信宿个数:');deta=input('输入信道容量的精度:');Q=rand(r,s);%形成r行s列随机矩阵QA=sum(Q,2);%把Q矩阵每一行相加和作为一个列矩阵AB=repmat(A,1,s);%把矩阵(jǔzhèn)A的那一列(yīliè)复制为S列的新矩阵(jǔzhèn)%判断信道转移概率(gàilǜ)矩阵输入是否正确P=input('输入(shūrù)信道转移矩阵P:')%从这句话开始将用下面两句代替可自动生成信道转移矩阵[r,s]=size(P);fori=1:rif(sum(P(i,:))~=1)%检测概率转移矩阵是否行和为1.error('概率转移矩阵输入有误!!')return;endforj=1:sif(P(i,j)<0||P(i,j)>1)%检测概率转移矩阵是否负值或大于1error('概率转移矩阵输入有误!!')return;endendend%将上面的用下面两句代替可自动生成信道转移矩阵%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列fork=1:1:1/detam=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;enddisp('迭代(diédài)次数:k='),disp(k)enddisp('最大信道容量时的信源分布(fēnbù):p='),disp(p')disp('最大信道容量:C='),disp(C(k+1))3.运行结果(jiēguǒ)及分析结果分析(fēnxī):这两组数据都是我随机选的,都是选的信源个数为2,信宿(xìnxiǔ)的个数为3,选用的精度为0.000001。然后输入信道转移矩阵P,执行exp[pjilogtkij]j,将得到的结果代入由式pik1kexp[plogtij]jiij计算Pk1pik1,得到后由式Ck1IPk1ksrk,tlogexppjilogtij计算Ck1。j0i0,再进行,再依次往下计算,C(k1)C(k)(k1)C直至这个条件不满足,然后输出k和Ck1和Pk1。总的来说这不过是将矩阵不断的代入公式,当最后的精度不大于0.000001.输出k和Ck1和Pk1。deta的判断,这个条件满足时继续求第二组数据(shùjù):4.心得体会在此次(cǐcì)matlab编程实现一般离散(lísàn)无记忆信道容量的迭代(diédài)算法的过程中,开始我觉得(juéde)这十分的困难,经过(jīngguò)网上查阅资料和请教同学,最后才对本次设计有了一定的理解,详细理解了信道容量的迭代算法过程。经过理解,发现这种编码其实挺简单的,最重要的是怎样用程序把它实现,这对我们的编程能力也是一次考验。内容总结(1)一般离散无记忆信道容量的迭代计算信道容量的迭代算法1信道容量的迭代算法的步骤一、用了matlab实现DMC容量迭代的算法如下:第一步:首先要初始化信源分布:即选取一个精度,本次中我选deta=0.000001(2)fori=1:rif(sum(P(i,:))~=1)%检测概率转移矩阵是否行和为1.error('概率转移矩阵输入有误