Matlab信道容量的迭代计算实验

一、实验目的:

熟悉 Matlab 工作环境及工具箱;

掌握一般信道容量迭代算法的原理。

                                                         

二、实验仪器:

Matlab2015a

三、实验原理:                                                           

衡量一个信息传递系统的好坏,有两个主要指标:

数量(速度)指标——信息(传输)率R

质量指标——平均差错率Pe

信息率能大到什么程度——信道容量

信道容量的定义

 

 信道

核心问题是信道容量和最佳输入分布。

根据定义,求信道容量问题就是求平均互信息量I(X;Y)关于输入概率分布Px的最大值问题。

¨ 常见信道

离散无噪信道(无损、确定、无损确定信道)

离散对称信道/准对称信道一般DMC信道容量

一般DMC信道容量的计算非常困难,信道容量计算的迭代算法能在给定的精度下用有限步数计算出一般DMC的信道容量。

定理

¨ 设DMC的转移概率矢量为,记是任意给定的一组初始输入分布,其所有分量均不为零。按下式不断对输入分布进行迭代、更新

 其中

信道容量的迭代算法流程图

 

四、实验步骤:                                                                                                               

1.先利用Matlab编写函数;

2.再根据函数将实验要求生成实验结果;

3.根据实验内容填写实验报告;                                                          

五、实验内容及数据整理:  

用Matlab软件编程实现一般信道容量迭代算法

设定不同的迭代精度

设定不同的信道

                                                                                                       

 六、实验结果及讨论                                                          

 

第一种编程方法:

clc;clear;close all

disp('请输入信道矩阵:')

Pb_a=input('Pb_a=');

Pb_a(Pb_a==0)=eps;     %Pb_a==0返回矩阵中等于0的位置,再利用Pb_a=eps赋予精度

disp('请输入初始概率分布:')

Pa0=input('Pa0=');

[r, s]=size(Pb_a);                            %判断行列的数量

[r0, s0]=size(Pa0);

while (s0~=r)                       %Matlab中~=表示不等于

    Pa0=input('阶数错误!请重新输入初始概率分布Pa0=');

    [r0, s0]=size(Pa0);

end

tol=1e-8;

Cn=0;

Cn1=10;

Pa=Pa0;

Pa(Pa==0)=eps;

while abs(Cn1-Cn)>tol

    for k=1:s0                          %表示创建一个从1到s0的行向量

        Md=0;

        for j=1:s

            Me=0;

            for i=1:r

                Me=Me+Pa(i)*Pb_a(i,j);

            end

            Md=Md+Pb_a(k,j)*log2(Pb_a(k,j)/Me);

        end

        Mb(k)=exp(Md); % Mb(k)相当于a_k

    end

    for k=1:s0

        Mc=0;

        for i=1:r

            Mc=Mc+Pa(i)*Mb(j);

        end

        Pa(k)=Pa(k)*Mb(k)/Mc;

    end

    M_Cn=0;

    for j=1:r

            M_Cn=M_Cn+Pa(j)*Mb(j);

    end

        Cn=log(M_Cn);

        Cn1=log(max(Mb));

end

C=Cn;

disp('信道容量为:')

disp(C)

disp('bit/sym')

disp('最佳输入分布为:');

disp(Pa)

结果:

 

第二种编程方法:

%离散单符号信道容量的迭代算法(MATLAB实现)

%程序编写测试环境为MATLAB R2014a

%程序运行涉及的四个参数现已调整合适,除这四个参数外其他部分不应修改

%为方便起见,程序仅输入信道转移概率矩阵P,通过P获取r,s

%鉴于MATLAB矩阵运算的优势,信道容量迭代算法改用矩阵形式表述

%程序输出部分包括最佳信源分布及对应信道容量

%提供测试矩阵,[0.5 0.5 0 0;0 0 0.5 0.5],信源等概时信道容量1.00比特/符号

clc;clear;close all;

%算法参数设置

err=1e-15;                          %误差门限参数设置

C_current=-1e30;                    %初始信道容量设置

K=10000;                            %最大迭代次数设置

fag=1e-50;                          %设定的高次小量用于替换0

%输入部分

%键盘输入,输入处理及输入判断

Pcc=input('请输入信道转移概率矩阵(输入格式示例[0.5 0.5;0.4 0.6])\n');

M=size(Pcc);                        %读取信道转移概率矩阵的大小

r=M(:,1);                           %获取信源符号个数

s=M(:,2);                           %获取信宿符号个数

%判断输入矩阵是否满足要求

tag0=sum(Pcc(:)>=0);            

% tag1=sum((Pcc*ones(s,1))==1);   

tag1=sum(abs((Pcc*ones(s,1)-1)<fag));

if tag0~=r*s||tag1~=r

    error('输入信道转移概率矩阵错误,请重新输入');

end

Pcc(Pcc==0)=fag;                    %将矩阵中的0置为高次小量

%算法部分

%设定信源,迭代求解信道容量

p=ones(1,r)./r;                     %初始化信源分布

%迭代算法(采用矩阵表述)

for k=1:K

    fai=(ones(s,1)*p).*Pcc';

    fai=fai./(fai*ones(r,r));       %计算信源条件下的后向概率

    

    p0=exp(diag(Pcc*(log(fai)))');

    p=p0/sum(p0);                   %计算新的信源分布

    C_new=log(sum(p0));             %计算信道容量,单位奈特/符号

    

    %判断迭代是否终止

    if (abs((C_new-C_current)))<=err*C_new    

        break;

    else

        C_current=C_new;            %信道容量结果更新

    end

end

%判断迭代是否失败

if k==K

    error('迭代计算失败,请重新设置相关参数');

end

%输出部分

%输出最大信道容量及对应的最佳信源分布

C=C_new/log(2);                     %单位转换,转换为比特/符号                                               

fprintf('\n');

disp('最佳信源分布P为');

disp(p);

fprintf('信道容量C为%.10f比特/符号\n',C);

结果:

 

  • 27
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值