实验一: 信道容量的计算
一、实验目的
(1) 进一步熟悉信道容量的迭代算法。
(2) 学习如何将复杂的公式转化为程序。
(3) 掌握高级语言数值计算程序的设计和调试技术。
二、实验原理:
迭代算法计算信道容量的原理如图所示:
三、实验步骤
11. 初始化信源分布:pi=,循环变量k=1,门限△,C(0)=-∞;
r
(k)
2. φ(k)pji
ij=pi
∑r
p(k)
ipji
i=1
s
exp[k)
jilogφ(
ij]
3. p(k+1)∑p
i=j=1
∑rs
exp[∑pk)
jilogφ(
ij]
i=1j=1
)rs
4. C(k+1=log[∑exp(∑p(k)
jilogφij)]
i=1j=1
+1)
5. 若C(k-C(k)
C(k+1)>∆,则k=k+1,转第2步
6. 输出P*=(P(k+1)
i)k+1)r和C(,终止。
7. 。分别对两个矩阵 ⎡⎢0.690.260.05⎤⎡
⎣0.05 0.25 0.7⎥⎦ ⎢0.690.26⎤
⎣0.05 0.7⎥⎦
四、实验程序
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)
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)=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);
例一的运行结果:
输入信源符号X的个数N=2
输出信源符号Y的个数M=2
五、实验结果
对矩阵⎢
⎡0.690.260.05⎤ ⎥ 进行运算后结果为 : 0.050.70.25⎣⎦
⎡0.690.26⎤而对矩阵⎢ ⎥ 运算发生错误
0.050.7⎣⎦
六、分析讨论
利用迭代算法求信道容量试验中,我们可以看出,当信道矩阵符合概率分布,且其小数表示精度较高时,在判定门限合适的情况下,其计算的信道容量比较符合实际值;当其信道矩阵不符合概率分布,程序报错。或实验数据的小数表示不能满足实验精度要求时,所计算的信道容量将会出现较大误差。
实验一: 信道容量的计算
一、实验目的
(1) 进一步熟悉信道容量的迭代算法。
(2) 学习如何将复杂的公式转化为程序。
(3) 掌握高级语言数值计算程序的设计和调试技术。
二、实验原理:
迭代算法计算信道容量的原理如图所示:
三、实验步骤
11. 初始化信源分布:pi=,循环变量k=1,门限△,C(0)=-∞;
r
(k)
2. φ(k)pji
ij=pi
∑r
p(k)
ipji
i=1
s
exp[k)
jilogφ(
ij]
3. p(k+1)∑p
i=j=1
∑rs
exp[∑pk)
jilogφ(
ij]
i=1j=1
)rs
4. C(k+1=log[∑exp(∑p(k)
jilogφij)]
i=1j=1
+1)
5. 若C(k-C(k)
C(k+1)>∆,则k=k+1,转第2步
6. 输出P*=(P(k+1)
i)k+1)r和C(,终止。
7. 。分别对两个矩阵 ⎡⎢0.690.260.05⎤⎡
⎣0.05 0.25 0.7⎥⎦ ⎢0.690.26⎤
⎣0.05 0.7⎥⎦
四、实验程序
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)
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)=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);
例一的运行结果:
输入信源符号X的个数N=2
输出信源符号Y的个数M=2
五、实验结果
对矩阵⎢
⎡0.690.260.05⎤ ⎥ 进行运算后结果为 : 0.050.70.25⎣⎦
⎡0.690.26⎤而对矩阵⎢ ⎥ 运算发生错误
0.050.7⎣⎦
六、分析讨论
利用迭代算法求信道容量试验中,我们可以看出,当信道矩阵符合概率分布,且其小数表示精度较高时,在判定门限合适的情况下,其计算的信道容量比较符合实际值;当其信道矩阵不符合概率分布,程序报错。或实验数据的小数表示不能满足实验精度要求时,所计算的信道容量将会出现较大误差。