概述
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离散对称信道的信道容量仿真所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复