实验一--信道容量的迭代算法.doc

实验一--信道容量的迭代算法.doc
实验一--信道容量的迭代算法.doc

信息工程12班吴玉明52111209

实验一信道容量的迭代算法

一、实验目的

1、掌握信道容量的概念。

2、了解迭代法计算信道容量的流程。

3、熟悉Matlab程序的设计和调试方法。

二、实验要求

1、学习Matlab软件编程和调试方法;

2、输入:任意一个信道转移概率矩阵。包括信源符号个数、信宿符号个数、

信道转移概率,在程序运行时从键盘输入;

3、输出:输入的信道矩阵、信道容量C。

三实验算法程序

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)<0

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)<=0.999999||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); 五 信道容量迭代算法流程图

四 .实验的算法:

1. 初始化信源分布:p i =r

1

,循环变量k=1 ,门限△ ,C (0)=-∞;

2. ∑==

r

i ji

k i

ji

k i k ij p p

p p 1

)()()(φ

3. ∑∑∑===+=

r i s

j k ij ji

s

j k ij ji k i

p

p p 1

1)(1

)()

1(]

log exp[]log exp[φφ

4. ])log ex p(log[1

1

)()

1(∑∑==+=r i s

j k ij ji k p C

φ

5. 若

?>-++)

1()

()1(k k k C C C ,则k=k+1 ,转第2步

6. 输出P *=()

()

r

k i P 1+和()1+k C ,终止。

五算法流程图如下:

六实验截图

(一)

(二)

七实验总结与体会

本次试验是建立在迭代的基础上 ,首先要深刻理解信道容量的迭代算法,其次是,如何将复杂的公式转化为程序通过此次实验,我了解了信道容量的迭代算法的基本知识,学会了如何将复杂的公式如何用程序语言描述出来,掌握了高级语言数值计算过程程序的设计和调试的相关知识,对于将实际问题公式转化为程序的能力有提高

相关主题
相关文档
最新文档