您好,欢迎访问三七文档
实验程序代码:r=input('输入信源个数:');s=input('输入信宿个数:');deta=input('输入信道容量的精度:');Q=rand(r,s);%形成r行s列随机矩阵QA=sum(Q,2);%把Q矩阵每一行相加和作为一个列矩阵AB=repmat(A,1,s);%把矩阵A的那一列复制为S列的新矩阵P=input('输入信道转移矩阵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;endendendi=1:1:r;%设置循环首项为1,公差为1,末项为r(Q的行数)的循环p(i)=1/r;%原始信源分布r个信源,等概率分布disp('原始信源分布:')p(i)=1/r;E=repmat(p',1,s);%把r个等概率元素组成一列,复制为s列fork=1:1:1/detam=E.*P;%后验概率的分子部分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('迭代次数:k='),disp(k)enddisp('最大信道容量时的信源分布:p='),disp(p')disp('最大信道容量:C='),disp(C(k+1))实验运行结果:(1)、输入信源(行)个数:2输入信宿(列)个数:3输入信道容量的精度:0.00001输入信道转移矩阵P:[0.20.30.5;0.30.20.5]P=0.20000.30000.50000.30000.20000.5000原始信源分布:迭代次数:k=1最大信道容量时的信源分布:p=0.50000.5000最大信道容量:C=0.0145(2)、输入信源(行)个数:3输入信宿(列)个数:3输入信道容量的精度:0.000001输入信道转移矩阵P:[0.10.70.2;0.20.10.7;0.30.50.2]P=0.10000.70000.20000.20000.10000.70000.30000.50000.2000原始信源分布:迭代次数:k=168最大信道容量时的信源分布:p=0.47430.52560.0001最大信道容量:C=0.3017
本文标题:DMC信道编码
链接地址:https://www.777doc.com/doc-2910061 .html