1.1 程序分析
(1)提示用户输入离散对称信道的信道矩阵
使用input函数,
复制代码
1
2P = input('请输入离散对称信道的信道矩阵:');
(2)判断输入矩阵是否为离散对称信道,总体思路如下:
对称信道要求不仅每行都是第一行元素的不同排列,而且每列都是第一列元素的不同排列。于是,先对矩阵的第一行和第一列进行排序(这里采用MATLAB自带的排序函数sort,默认采用升序排序),继而利用循环对从第二行和第二列开始直到最后一行和最后一列的矩阵元素进行排序,并与第一行和第一列进行比较。如果一旦不相等就跳出循环,提示用户不是对称信道,否则进行第三步计算信道容量。
程序代码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21%% 判断是否为离散对称信道 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)计算信道容量
根据公式
复制代码
1
2
3
4
5
6
7
8
9
10%% 信道容量 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 完整程序
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34clc;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时达到最大值?
复制代码
1
2
3
4
5clc;clear; p = 0:0.000001:1; c = 1+(1-p).*log2(1-p)+p.*log2(p); plot(p,c);
最后
以上就是爱笑流沙最近收集整理的关于matlab离散对称信道的信道容量仿真的全部内容,更多相关matlab离散对称信道内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复