⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 信道容量.txt

📁 matlab语言实现信道容量编码
💻 TXT
字号:
clc;clear all;
N = input('输入信源符号X的个数N='); 
M = input('输出信源符号Y的个数M='); 
p_yx=zeros(N,M);   %程序设计需要信道矩阵初始化为零
fprintf('输入信道矩阵概率\n')
for i=1:N
     for j=1:M
     p_yx(i,j)=input('p_yx=');%输入信道矩阵概率
     if p_yx(i)<0
     error('不符合概率分布')
     end
     end
end
for i=1:N   %各行概率累加求和
     s(i)=0;
     for j=1:M
         s(i)=s(i)+p_yx(i,j);
     end
end
for i=1:N     %判断是否符合概率分布
if (s(i)<=0.999999||s(i)>=1.000001)
   error('不符合概率分布')
end
end
b=input('输入迭代精度:');%输入迭代精度
for i=1:N
     p(i)=1.0/N;   %取初始概率为均匀分布
end
for j=1:M   %计算q(j)
     q(j)=0;
   for i=1:N
       q(j)=q(j)+p(i)*p_yx(i,j);
   end
end        
for i=1:N     %计算a(i)
     d(i)=0;
     for j=1:M
         if(p_yx(i,j)==0)
           d(i)=d(i)+0;
         else
         d(i)=d(i)+p_yx(i,j)*log(p_yx(i,j)/q(j));
       end
   end
   a(i)=exp(d(i));
end
u=0;
for i=1:N   %计算u
     u=u+p(i)*a(i);
end
IL=log2(u); %计算IL
IU=log2(max(a));%计算IU
n=1;
while((IU-IL)>=b) %迭代计算
     for i=1:N
         p(i)=p(i)*a(i)/u; %重新赋值p(i)
     end
     for j=1:M   %计算q(j)
         q(j)=0;
         for i=1:N
             q(j)=q(j)+p(i)*p_yx(i,j);
         end
     end
     for i=1:N   %计算a(i)
         d(i)=0;
         for j=1:M
             if(p_yx(i,j)==0)
               d(i)=d(i)+0;
             else
             d(i)=d(i)+p_yx(i,j)*log(p_yx(i,j)/q(j));
             end
       end
       a(i)=exp(d(i));
     end
     u=0;
     for i=1:N   %计算u
         u=u+p(i)*a(i);
     end
       IL=log2(u); %计算IL
       IU=log2(max(a));%计算IU
       n=n+1;
end
fprintf('信道矩阵为:\n');
disp(p_yx);
fprintf('迭代次数n=%d\n',n);
fprintf('信道容量C=%f比特/符号',IL);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -