我是靠谱客的博主 爱笑流沙,最近开发中收集的这篇文章主要介绍matlab离散对称信道的信道容量仿真,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述
1.1 程序分析
(1)提示用户输入离散对称信道的信道矩阵
使用input函数,

P = input('请输入离散对称信道的信道矩阵:');

(2)判断输入矩阵是否为离散对称信道,总体思路如下:
对称信道要求不仅每行都是第一行元素的不同排列,而且每列都是第一列元素的不同排列。于是,先对矩阵的第一行和第一列进行排序(这里采用MATLAB自带的排序函数sort,默认采用升序排序),继而利用循环对从第二行和第二列开始直到最后一行和最后一列的矩阵元素进行排序,并与第一行和第一列进行比较。如果一旦不相等就跳出循环,提示用户不是对称信道,否则进行第三步计算信道容量。
程序代码如下:

%% 判断是否为离散对称信道
hang = sort(P(1,:));
lie = sort(P(:,1));
[c,s] = size(P); 
for i = 2:c
    if (sort(P(i,:)) == hang )
        A = 1;
    else
        A = 0;
        break;
    end
    for k = 2:s
        if(sort(P(:,k)) == lie)
            B = 1;
        else
            B = 0;
            break;
        end
    end   
end

(3)计算信道容量
根据公式

%% 信道容量
if( A == 1 && B == 1)
H = P(1,:); 
I = - log2(H);
    C = log2(s) - sum(H.*I);
    fprintf('信道容量为%.4f比特/符号n',C);
else
    fprintf('不是对称信道n');
end

1.2 程序运行结果分析在这里插入图片描述
1.3 完整程序

clc;clear;
syms A;syms B;
P = input('请输入离散对称信道的信道矩阵:');
%% 判断是否为离散对称信道
hang = sort(P(1,:));
lie = sort(P(:,1));
[c,s] = size(P); 
for i = 2:c
    if (sort(P(i,:)) == hang )
        A = 1;
    else
        A = 0;
        break;
    end
    for k = 2:s
        if(sort(P(:,k)) == lie)
            sort(P(:,2));
            B = 1;
        else
            B = 0;
            break;
        end
    end   
end
%% 信道容量
if( A == 1 && B == 1)
H = P(1,:); 
I = - log2(H);
    C = log2(s) - sum(H.*I);
    fprintf('信道容量为%.4f比特/符号n',C);
else
    fprintf('不是对称信道n');
end

2、用MATLAB绘制二元对称离散信道容量的曲线。分析为什么当p从1/2逐渐增大到1时C反而增加,而当p=1时达到最大值?

clc;clear;
p = 0:0.000001:1;
c = 1+(1-p).*log2(1-p)+p.*log2(p);
plot(p,c);

最后

以上就是爱笑流沙为你收集整理的matlab离散对称信道的信道容量仿真的全部内容,希望文章能够帮你解决matlab离散对称信道的信道容量仿真所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部