当前位置:文档之家› 实验二 计算信道容量

实验二 计算信道容量

实验二 计算信道容量
实验二 计算信道容量

实验二计算信道容量

一、实验题目

1、已知:信源符号个数r、信宿符号个数s 、信道转移概率矩阵P。

2、输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每个具体的转移概率在运行时从键盘输入。

3、输出:信道容量C。

二、实验目的

1、理解和掌握信道容量的概念和物理意义;

2、理解计算离散信道容量的迭代算法。

三、算法设计

四、程序分析

1、信道容量:

)

()|(log )|()(max );(max C 1010)()

(i j i j i q j r i j x P x P y P x y P x y P x P Y X I j j ∑∑-=-=== 2、当正向传输的信道容量和反向传输的信道容量在误差范围内时表示此时信道

稳定,该信道容量即为所求。

3、计算正、反向传输的信道容量的迭代算法公式如下:

])()|(log

)|(exp[a i j i j j i i y P x y P x y P ∑=

))(max log(cap_max i i

a = )a )P(x log(cap_result i i

i ∑=

∑=i

i

i i i i a x P a x P x P )()()( 五、程序代码

/******************************************************************************

****************

【名称】:信道容量迭代法

【函数】:计算a[i]函数、计算cap_result 函数、计算cap_max 函数、主函数

【思路】:利用迭代法,使cap_result 初步逼近cap_max ,当误差小于e 时,cap_result 即为

信道容量

*******************************************************************************

***************/

#include

#include

#include

int X_num,Y_num; // X_num 为信源个数,Y_num 为信宿个数

int n=1;

double e; // 迭代法精度误差

double PXi[50]; // 输入符号的概率P(xi)数组

double P[50][50]; // 信道转移概率矩阵

double a[50];

double cap_result;

double cap_max;

// 迭代法参数a[i]、C、CC

double result; // 信道容量

/**************************************************************************

函数名:double Calculate_a(int k,double PXi[])

功能:计算并输出迭代法所需的参数a[k]

参数:

返回值:a[k],也就是P(yi|xj)*log(P(yi|xj)/P(yi))/log2对i从0到Y_num-1求和

**************************************************************************/ double Calculate_a(int k,double PXi[])

{

int i,j;

double sum1 = 0;

for(j=0;j

{

double sum = 0; // 必须在此处令sum置0

for(i=0;i

{

sum += PXi[i] * P[i][j];//P[i][j]表示P(yj|xi);

}

sum1 += P[k][j] * log(P[k][j] / sum); //求和得到a[k]

}

printf("a[%d] = %f\t",k,sum1); // 输出a[k]

return exp(sum1);

}

/**************************************************************************

函数名:double Calculate_cap_result(double PXi[],double a[])

功能:计算并输出迭代法所需的参数cap_result

参数:

返回值:cap_result,也即是用来逼近最值的参数

**************************************************************************/ double Calculate_cap_result(double PXi[],double a[])

{

int i;

double sum=0;

for(i=0;i

{

sum += (PXi[i] * a[i]);

}

printf("较小值=%f \n",log(sum)); // 输出迭代法所需的参数cap_result return log(sum);

}

/**************************************************************************

函数名:double Calculate_cap_max(double a[])

功能:计算并输出迭代法所需的参数cap_max

参数:

返回值:cap_max,也即a[k]的最大值*/

/**************************************************************************/ double Calculate_cap_max(double a[])

{

int i;

double max_a = a[0];

for(i=0;i

{

if(a[i] > max_a)

{

max_a = a[i];

}

}

printf("较大值=%f",log(max_a));

return log(max_a);

}

int main()

{

int i,j,flag=1;

printf("\n请输入信源个数X_num= \n\t\t\t");

scanf("%d",&X_num);

printf("\n请输入信宿个数Y_num= \n\t\t\t");

scanf("%d",&Y_num);

printf("\n请输入信道转移概率矩阵【P(Yj|Xi)】\n\n");

for(i=0;i

{

for(j=0;j

{

printf("P[%d][%d]=",i,j);

scanf("%lf",&P[i][j]);

}

}

printf("\n请输入迭代法精度误差(e):");

scanf("%lf",&e);

for(i=0;i

PXi[i] = 1 / ((double)X_num); // 初始化输入符号的概率P(xi),等概率预处理do

{

printf("\n第%d次迭代参数\n",n);

for(i=0;i

a[i] = Calculate_a(i,PXi);

printf("\n");

cap_result= Calculate_cap_result(PXi,a);

cap_max= Calculate_cap_max(a);

printf("\n");

if(cap_max-cap_result>= e) // PXi[i]重新赋值

{

double sum = 0;

for(i=0;i

{

sum += (PXi[i] * a[i]);

}

for(i=0;i

{

PXi[i] = ((PXi[i] * a[i]) / sum);

}

n ++;

}

}while(cap_max-cap_result>= e);

printf("\n\n迭代次数为:%d\n" ,n);

for(i=0;i

{

printf("最佳信源概率:%f\n" ,PXi[i]);

}

result = (cap_result/ log(2));

printf("信道容量为:%f\n\n",result);

return 0;

}

六、程序运行结果

七、心得体会

在上机之前我对于老师讲解的信道容量的解释并不特别理解,至于在上机课上完全不知道如何设计程序算法,只能参照着老师PPT上的算法写程序;之后与同学进行了讨论,也把算法算了两遍,对信道容量的理解加深了一些,对算法流程也了解了些,虽然还是没有算出如算法所写的公式,但在计算过程中,对知识有了更深的理解。

信道容量的计算

§4.2信道容量的计算 这里,我们介绍一般离散信道的信道容量计算方法,根据信道容量的定义,就是在固定信道的条件下,对所有可能的输入概率分布)(x P 求平均互信息的极大值。前面已知()Y X I ;是输入概率分布的上凸函数,所以极大值一定存在。而);(Y X I 是r 个变量 )}(),(),({21r x p x p x p 的多元函数。并且满足1)(1 =∑=r i i x p 。所以可用拉格朗日乘子法来 计算这个条件极值。引入一个函数:∑-=i i x p Y X I )();(λ φ解方程组 0) (] )();([) (=∑?-???i i i i x p x p Y X I x p λ φ 1)(=∑i i x p (4.2.1) 可以先解出达到极值的概率分布和拉格朗日乘子λ的值,然后在解出信道容量C 。因为 ) () (log )()();(11 i i i i i r i s j i y p x y Q x y Q x p Y X I ∑∑=== 而)()()(1 i i r i i i x y Q x p y p ∑== ,所以 e e y p y p i i i i i y p x y Q i x p i x p l o g l o g ))(ln ()(log ) ()()() (==????。 解(4.2.1)式有 0log )()()()()()(log )(111=--∑∑∑===λe y p x y Q x y Q x p y p x y Q x y Q i i i i i r i s j i i i i s j i i (对r i ,,2,1 =都成立) 又因为 )()()(1j k k r k k y p x y Q x p =∑= r i x y Q s j i j ,,2,1,1)(1 ==∑= 所以(4.2.1)式方程组可以转化为 ),,2,1(log ) ()(log )(1r i e y p x y Q x y Q j i j s j i j =+=∑=λ 1)(1 =∑=r i i x p

实验三 信道容量计算

实验三信道容量计算 一、实验目的: 了解对称信道与非对称信道容量的计算方法。 二、实验原理: 信道容量是信息传输率的极限,当信息传输率小于信道容量时,通过信道编码,能够实现几乎无失真的数据传输;当数据分布满足最佳分布时,实现信源与信道的匹配,使得信息传输率能够达到信道容量。本实验利用信道容量的算法,使用计算机完成信道容量的计算。 实验采用迭代算法计算信道容量,即:设DMC的转移概率pyx(i,j),p(i)是任意给定的一组初始给定输入分布,开始为等概率分布,以后逐次迭代更新p(i)的取值。其所有分量P (i)均不为0。按照如下方法进行操作: 具体方法: 1、计算q(j)=∑ i j i pyx i p) ,( *)(,pyx(i,j)为信道转移概率 2、计算a(i) 先算中间变量d(i)=∑ j j q j i pyx j i pyx) ( /) ,( log( *) ,( 然后,a(i)=exp(d(i)) 3、计算中间变量U=∑ i i p i a)( *)( 4、计算IL=log2(u) 5、计算IU=log2(max(a(i)) 6、当IU-IL>ε(ε为设定的迭代精度)时,进入以下循环,否则输出迭代次数n,信道容量C=IU计算结果,最佳分布p(i)。 ①重新计算p(i)=p(i)*a(i)/U ②计算q(j),方法同1 ③计算a(i),方法同2 ④计算中间变量U=∑ i i p i a)( *)( ⑤计算IL=log2(u) ⑥计算IU=log2(max(a(i)) ⑦计次变量n=n+1

返回6判断循环条件是否满足。 四、实验内容: 假设离散无记忆二元信道如图所示,编程,完成下列信道容量的计算 2e 1. 令120.1e e p p ==和120.01e e p p ==,先计算出信道转移矩阵,分别计算该对称信道的信道容量和最佳分布,将用程序计算的结果与用对称信道容量计算公式的结果进行比较,并贴到实验报告上。 2. 令10.15e p =,20.1e p =和10.075e p =20.01e p =,分别计算该信道的信道容量和最佳分布; 四、实验要求: 在实验报告中给出源代码,写出信道对应的条件转移矩阵,计算出相应结果。并定性讨论信道容量与信道参数之间的关系。

实验二 离散信道及其容量

实验二 离散信道及其容量 一、[实验目的] 1、理解离散信道容量的内涵; 2、掌握求二元对称信道(BSC )互信息量和容量的设计方法; 3、掌握二元扩展信道的设计方法并会求其平均互信息量。 二、[实验环境] windows XP,MATLAB 7 三、[实验原理] 若某信道输入的是N 维序列x ,其概率分布为q(x ),输出是N 维序列y ,则平均互信息量记为I(X ;Y ),该信道的信道容量C 定义为() max (X;Y)q x C I =。 四、[实验内容] 1、给定BSC 信道,信源概率空间为 信道矩阵 0.990.010.010.99P ??=???? 求该信道的I(X;Y)和容量,画出I(X;Y)和ω、C 和p 的关系曲线。 2 、编写一M 脚本文件t03.m ,实现如下功能: 在任意输入一信道矩阵P 后,能够判断是否离散对称信道,若是,求出信道容量C 。 3、已知X=(0,1,2);Y=(0,1,2,3),信源概率空间和信道矩阵分别为 求: 平均互信息量; 4、 对题(1)求其二次扩展信道的平均互信息I(X;Y)。 五、[实验过程 ] X P 0 1 0.6 0.4 = X Px 0 1 2 0.3 0.5 0.2 = 0.1 0.3 0 0.6 0.3 0.5 0.2 0 0.1 0.7 0.1 0.1 P=

每个实验项目包括:1)设计思路2)实验中出现的问题及解决方法; 1)设计思路 1、信道容量( ) max (X; Y) q x C = I ,因此要求给定信道的信道容量,只要知道该信道 的最大互信息量,即求信道容量就是求信道互信息量的过程。 程序代码: clear all,clc; w=0.6; w1=1-w; p=0.01; X P 01 = 0.6 0.4 p1=1-p; save data1 p p1; I_XY=(w*p1+w1*p)*log2(1/(w*p1+w1*p))+(w*p+w1*p1)*log2(1/(w*p+w1*p1))- ... (p*log2(1/p)+p1*log2(1/p1)); C=1-(p*log2(1/p)+p1*log2(1/p1)); fprintf('互信息量:%6.3f\n信道容量:%6.3f',I_XY,C); p=eps:0.001:1-eps; p1=1-p; C=1-(p.*log2(1./p)+p1.*log2(1./p1)); subplot(1,2,1),plot(p,C),xlabel('p'),ylabel('C'); load data1; w=eps:0.001:1-eps; w1=1-w; I_XY=(w.*p1+w1.*p).*log2(1./(w.*p1+w1.*p))+(w.*p+w1.*p1).*log2(1./(w.*p+w1.*p1))- . . .(p.*log2(1./p)+p1.*log2(1./p1)); subplot(1,2,2),plot(w,I_XY) xlabel('w'),ylabel('I_XY'); 实验结果:

寻呼空口信道容量及信道容量计算

寻呼空口信道容量及FACH 信道 容量计算方法

目录 1寻呼容量计算方法 (2) 1.1现网理论容量计算 (2) 1.2实际网络环境下的容量计算 (3) 2寻呼容量扩容方案 (3) 2.1寻呼拥塞产生的原因 (3) 2.2寻呼容量预警机制 (4) 2.3现网容量评估 (4) 2.4空口寻呼扩容方案 (5) 2.4.1方案原理 (5) 2.4.2目标容量 (6) 3FACH信道容量评估 (7)

1寻呼容量计算方法 首先需要明确寻呼容量的单位是个/时间/小区,也就是说衡量一个RNC支持多大的寻呼量是以小区为标准的,比如某RNC支持的寻呼容量应为XX个/小时/小区或者XX个/秒/小区。 RNC设备支持的理论寻呼量为45万TMSI/小时/小区,实际每小区支持的寻呼容量则取决于空口的寻呼容量配置。 空口寻呼容量配置计算方法如下(以小区为参考单位): PCH寻呼能力计算公式为:Ntfs×RoundDown[(TBSize-7)/Lue]×Npch/(Nr×Tpbp) IMSI寻呼时, Ntfs×RoundDown[(TBSize-7)/72]×Npch/(Nr×Tpbp) TMSI/PTMSI寻呼时,Ntfs×RoundDown[(TBSize-7)/40]×Npch/(Nr×T pbp) 注:RoundDown为向下取整。 如果空口环境不好,存在大量重传的时候,则上面的公式需要再除以(1+Nr),寻呼容量减半,通常情况下不考虑重传。 1.1现网理论容量计算 除西安网络进行寻呼信道扩容外,现网目前各项空口寻呼信道参数配置如下表: 协议参数说明备注现网配置 Ntfs PCH传输格式中 240bit块的个数(一 个寻呼子信道承载) 传输块个数 一般配置为0、1。Ntf与PCH所在 的SCCPCH的码道数目相关。 1 Tbsize PCH传输块大小240 Npch 每个寻呼块配置的寻 呼子信道数目 协议规定Npch<=8 8 Nr 重复因子相同寻呼的重发次数 1 Tpbp PICH的寻呼周期重复周期/ Tpbp 640ms/320ms 640

4.信道及其容量

第4章 离散信道及其容量 4.1节 离散无记忆信道(DMC, Discrete Memoryless Channel ) 什么是 “信道”? 通信的基本目标是将信源发出的消息有效、可靠地通过“信道”传输到目的地,即信宿(sink )。但什么是“信道”? Kelly 称信道是通信系统中“不愿或不能改变的部分”。比如CDMA 通信中,设备商只能针对给定的频谱范围进行设备开发,而运营商可能出于成本的考虑,不愿意进行新的投资,仍旧采用老的设备。通信是对随机信号的通信,因此信源必须具有可选的消息,因此不可能利用一个sin(〃)信号进行通信,而是至少需要两个可供发射机进行选择。一旦选择了信息传输所采用的信号,信道决定了从信源到信宿的过程中信号所受到的各种影响。从数学上理解,信道指定了接收机接收到各种信号的条件概率(conditional probability),但输入信号的先念概念(prior probability )则由使用信道的接收机指定。 如果只考虑离散时间信道,则输入、输出均可用随机变量序列进行描述。输入序列X 1, X 2,……是由发射机进行选择,信道则决定输出序列Y 1, Y 2,……的条件概率。数学上考虑的最 简单的信道是离散无记忆信道。 离散无记忆信道由三部分组成: (1) 输入字符集A ={a 1, a 2, a 3,…}。该字符集既可以是有限,也可以是可数无限。其中每个 符号a i 代表发射机使用信道时可选择的信号。 (2) 输出字符集B={b 1, b 2, b 3,…}。该字符集既可以是有限,也可以是可数无限。其中每个 符号bi 代表接收机使用信道时可选择的信号。 (3) 条件概率分布P Y |X (〃|X ),该条件分布定义在B 上,其中X ∈A 。它描述了信道对输 入信号的影响。 离散无记忆的假设表明,信道在某一时刻的输出只与该时刻的输入有关,而与该时刻之前的输入无关。或者: 1111|(|,...,,,...,)(|)n n n Y X n n P y x x y y P y x --=,n =1,2,3…. Remark: (1) n x 在信道传输时受到的影响与n 时刻以前的输入信号无关。 (2) DMC 是时不变的,即|n n Y X P 与n 无关。因此|(|)n n Y X n n P y x 可简写为|(|)Y X n n P y x 。

一般离散无记忆信道容量的迭代计算

一般离散无记忆信道容量的迭代计算 信道容量的迭代算法 1信道容量的迭代算法的步骤 一、用了matlab 实现DMC 容量迭代的算法如下: 第一步:首先要初始化信源分布: .0deta 10,1,0,1)(>>=?==,选置,,k r i r P k i 即选取一个精度,本次中我选deta=0.000001。 第二步:}{,) ()()()(k ij i ji k i ji k i k ij t p p p p t 得到反向转移概率矩阵根据式子∑=。 第三步: 第四步: 第五步: 若a C C C k k k det )1() ()1(>-++,则执行k=k+1,然后转第二步。直至转移条件不成立, 接着执行下面的程序。 第六步:输出迭代次数k 和()1+k C 和1+k P ,程序终止。 2. Matlab 实现 clear; r=input('输入信源个数:'); s=input('输入信宿个数:'); deta=input('输入信道容量的精度: '); ()()()()(){}111]log exp[] log exp[+++==∑∑∑k i k i j ij k ji j ij k ji k i p P t p t p p 计算由式()()()()()()。C t p t P I C k r i s j k ij ji k k k 10011log exp log ,+==++????????????????==∑∑计算由式

Q=rand(r,s); %形成r行s列随机矩阵Q A=sum(Q,2); %把Q矩阵每一行相加和作为一个列矩阵A B=repmat(A,1,s); %把矩阵A的那一列复制为S列的新矩阵 %判断信道转移概率矩阵输入是否正确 P=input('输入信道转移矩阵P:')%从这句话开始将用下面两句代替可自动生成信道转移矩阵 [r,s]=size(P); for i=1:r if(sum(P(i,:))~=1) %检测概率转移矩阵是否行和为1. error('概率转移矩阵输入有误!!') return; end for j=1:s if(P(i,j)<0||P(i,j)>1) %检测概率转移矩阵是否负值或大于1 error('概率转移矩阵输入有误!!') return; end end end %将上面的用下面两句代替可自动生成信道转移矩阵 %disp('信道转移概率矩阵:') %P=Q./B 信道转移概率矩阵(每一个原矩阵的新数除以所在行的数总和) i=1:1:r; %设置循环首项为1,公差为1,末项为r(Q的行数)的循环 p(i)=1/r; %原始信源分布r个信源,等概率分布 disp('原始信源分布:')

实验二 离散信道及其容量

实验二离散信道及其容量 一、[实验目的] 1、理解离散信道容量的内涵; 2、掌握求二元对称信道(BSC)互信息量和容量的设计方法; 3、掌握二元扩展信道的设计方法并会求其平均互信息量。 二、[实验环境] windows XP,MATLAB 7 三、[实验原理] 若某信道输入的是N 维序列x ,其概率分布为q(x ),输出是N 维序列y ,则平均互信息量记为I(X ;Y ),该信道的信道容量C 定义为() max (X;Y)q x C I =。四、[实验内容] 1、给定BSC 信道,信源概率空间为 信道矩阵0.990.010.010.99P ??=???? 求该信道的I(X;Y)和容量,画出I(X;Y)和ω、C 和p 的关系曲线。 2、编写一M 脚本文件t03.m,实现如下功能: 在任意输入一信道矩阵P 后,能够判断是否离散输出对称信道。 3、对题1求其二次扩展信道的平均互信息I(X;Y)。 五、[实验过程] 每个实验项目包括: 1)设计思路 1、信道容量 ()max (X;Y)q x C I =,因此要求给定信道的信道容量,只要知道该信道的最大互信息量,即求信道容量就是求信道互信息量的过程。 程序代码: clear all,clc; w=0.6; w1=1-w; p=0.01;X P 0 10.60.4 =

p1=1-p; save data1p p1; I_XY=(w*p1+w1*p)*log2(1/(w*p1+w1*p))+(w*p+w1*p1)*log2(1/(w*p+w1*p1))-... (p*log2(1/p)+p1*log2(1/p1)); C=1-(p*log2(1/p)+p1*log2(1/p1)); fprintf('互信息量:%6.3f\n信道容量:%6.3f',I_XY,C); p=eps:0.001:1-eps; p1=1-p; C=1-(p.*log2(1./p)+p1.*log2(1./p1)); subplot(1,2,1),plot(p,C),xlabel('p'),ylabel('C'); load data1; w=eps:0.001:1-eps; w1=1-w; I_XY=(w.*p1+w1.*p).*log2(1./(w.*p1+w1.*p))+(w.*p+w1.*p1).*log2(1./(w.*p+w1.*p1))-.. .(p.*log2(1./p)+p1.*log2(1./p1)); subplot(1,2,2),plot(w,I_XY) xlabel('w'),ylabel('I_XY'); 实验结果: 互信息量:0.891 信道容量:0.919 I(X;Y)和ω、C和p的关系曲线图: C X 2、离散对称信道:当离散准对称信道划分的子集只有一个时,信道关于输入和输出对称。 离散准对称信道:若一个离散无记忆信道的信道矩阵中,按照信道的输出集Y 可以将信道划分成n个子集,每个子矩阵中的每一行都是其他行同一组元素的不同排列。

信道容量实验报告

湖南大学 信息科学与工程学院 实验报告 实验名称信道容量的迭代算法课程名称信息论与编码 第1页共9页

1.实验目的 (1)进一步熟悉信道容量的迭代算法; (2)学习如何将复杂的公式转化为程序; (3)掌握C 语言数值计算程序的设计和调试技术。 2、实验方法 硬件:pc 机 开发平台:visual c++软件 编程语言:c 语言 3、实验要求 (1)已知:信源符号个数r 、信宿符号个数s 、信道转移概率矩阵P 。 (2)输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每 个具体的转移概率在运行时从键盘输入。 (3)输出:最佳信源分布P*,信道容量C 。 4.算法分析 1:procedure CHANNEL CAPACITY(r,s,(ji p )) 2:initialize:信源分布i p =1/r ,相对误差门限σ,C=—∞ 3:repeat 4: 5: 6: C 221 1 log [exp(log )] r s ji ij r j p φ==∑∑ 7:until C C σ ?≤ 8:output P*= ()i r p ,C 9:end procedure 21 21 1 exp(log ) exp(log ) s ji ij j r s ji ij r j p p φφ===∑∑∑i p 1 i ji r i ji i p p p p =∑ij φ

5.程序调试 1、头文件引入出错 f:\visualc++\channel\cpp1.cpp(4) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory ————#include 纠错://#include f:\visualc++\channel\cpp1.cpp(5) : fatal error C1083: Cannot open include file: 'values.h': No such file or directory ————#include 纠错://#include 2、变量赋值错误 f:\visualc++\channel\cpp1.cpp(17) : error C2065: 'ij' : undeclared identifier f:\visualc++\channel\cpp1.cpp(17) : error C2440: 'initializing' : cannot convert from 'int' to 'float ** ' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast ————float **phi_ij=ij=NULL; 纠错:float **phi_ij=NULL; 3、常量定义错误 f:\visualc++\channel\cpp1.cpp(40) : error C2143: syntax error : missing ';' before 'for' ————for(i=0;iDELTA) f:\visualc++\channel\Cpp1.cpp(84) : error C2021: expected exponent value, not ' ' ————if(fabs(p_j)>=DELTA) f:\visualc++\channel\Cpp1.cpp(100) : error C2021: expected exponent value, not ' ' ————if(fabs(phi_ij[i][j])>=DELTA) f:\visualc++\channel\Cpp1.cpp(116) : error C2021: expected exponent value, not ' ' ————while(fabs(C-C_pre)/C>DELTA); 纠错:#define DELTA 0.000001; F:\visualc++\channel\Cpp1.cpp(68) : error C2065: 'MAXFLOAT' : undeclared identifier F:\visualc++\channel\Cpp1.cpp(68) : warning C4244: '=' : conversion from 'int' to 'float', possible loss of data ————C=-MAXFLOAT; 纠错:#define MAXFLOAT 1000000; 3、引用中文逗号 f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xa1' f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xb1' f:\visualc++\channel\cpp1.cpp(60) : error C2065: 'Starting' : undeclared identifier f:\visualc++\channel\cpp1.cpp(60) : error C2059: syntax error : '.'

正式实验报告二—信道容量的计算

一、实验目的 1.掌握离散信道的信道容量的计算方法; 2.理解不同类型信道的不同特点与不同的计算方法; 二、实验内容 1.进一步熟悉一般离散信道的信道容量计算方法; 2.进一步复习巩信道性质与实际应用; 3.学习如何将复杂的公式转化为程序。 三、实验仪器、设备 1、计算机-系统最低配置256M内存、P4 CPU; 2、MATLAB编程软件。 四、实现原理 信道容量是信息传输率的极限,当信息传输率小于信道容量时,通过信道编码,能够实现几乎无失真的数据传输;当数据分布满足最佳分布时,实现信源与信道的匹配,使得信息传输率能够达到信道容量。本实验利用信道容量的算法,使用计算机完成信道容量的计算。 实验采用迭代算法计算信道容量,即:设DMC的转移概率pyx(i,j),p(i)是任意给定的一组初始给定输入分布,开始为等概率分布,以后逐次迭代更新p(i)的取值。其所有分量P (i)均不为0。按照如下方法进行操作: 具体方法: 1、计算q(j)= i j i pyx i p) ,( *)(,pyx(i,j)为信道转移概率 2、计算a(i)

先算中间变量d(i)=∑ j j q j i pyx j i pyx) ( /) ,( log( *) ,( 然后,a(i)=exp(d(i)) 3、计算中间变量U=∑ i i p i a)( *)( 4、计算IL=log2(u) 5、计算IU=log2(max(a(i)) 6、当IU-IL>ε(ε为设定的迭代精度)时,进入以下循环,否则输出迭代次数n,信道容量C=IU计算结果,最佳分布p(i)。 ①重新计算p(i)=p(i)*a(i)/U ②计算q(j),方法同1 ③计算a(i),方法同2 ④计算中间变量U=∑ i i p i a)( *)( ⑤计算IL=log2(u) ⑥计算IU=log2(max(a(i)) ⑦计次变量n=n+1 返回6判断循环条件是否满足。 五、实验步骤 1、计算非对称信道的信道容量 运行程序

信道及信道容量

第5章 信道及信道容量 教学内容包括:信道模型及信道分类、单符号离散信道、多符号离散信道、多用户信道及连续信道 5.1信道模型及信道分类 教学内容: 1、一般信道的数学模型 2、信道的分类 3、信道容量的定义 1、 一般信道的数学模型 影响信道传输的因素:噪声、干扰。 噪声、干扰:非函数表述、随机性、统计依赖。 信道的全部特性:输入信号、输出信号,以及它们之间的依赖关系。 信道的一般数学模型: 2、 信道的分类 输出随机信号 输入、输出随机变量个数 输入和输出的个数 信道上有无干扰 有无记忆特性 3、信道容量的定义 衡量一个信息传递系统的好坏,有两个主要指标: 图5.1.1 一般信道的数学模型 离散信道、连续信道、半离散或半连续信道 单符号信道和多符号信道 有干扰信道和无干扰信道 有记忆信道和无记忆信道 单用户信道和多用户信道 速度指标 质量指标

速度指标:信息(传输)率R ,即信道中平均每个符号传递的信息量; 质量指标:平均差错率e P ,即对信道输出符号进行译码的平均错误概率; 目标:速度快、错误少,即R 尽量大而e P 尽量小。 信道容量:信息率R 能大到什么程度; )/()()/()();(X Y H Y H Y X H X H Y X I R -=-== 若信道平均传送一个符号所需时间为t 秒,则 ) ;(1 Y X I t R t =(bit/s ) 称t R 为信息(传输)速率。 分析: 对于给定的信道,总存在一个信源(其概率分布为* )(X P ),会使信道的信息率R 达到 最大。 ();(Y X I 是输入概率)(X P 的上凸函数,这意味着);(Y X I 关于)(X P 存在最大值) 每个给定的信道都存在一个最大的信息率,这个最大的信息率定义为该信道的信道容量,记为C ,即 ) ;(max max Y X I R C X X P P ==bit/符号 (5.1.3) 信道容量也可以定义为信道的最大的信息速率,记为 t C ?? ? ???==);(1max max Y X I t R C X X P t P t (bit /s ) (5.1.4) 解释: (1)信道容量C 是信道信息率R 的上限,定量描述了信道(信息的)最大通过能力; (2)使得给定信道的);(Y X I 达到最大值(即信道容量C )的输入分布,称为最佳输入(概率)分布,记为* )(X P ; (3)信道的);(Y X I 与输入概率分布)(X P 和转移概率分布)/(X Y P 两者有关,但信道容量 C 是信道的固有参数,只与信道转移概率)/(X Y P 有关。 4、意义: 研究信道,其核心问题就是求信道容量和最佳输入分布。根据定义,求信道容量问题就是求平均互信息量);(Y X I 关于输入概率分布)(X P 的最大值问题。一般来说,这是一个很困难的问题,只有对一些特殊信道,如无噪信道等,才能得到解析解,对于一般信道,必须借助于数值算法。

信道容量及其一般计算方法

实验一信道容量及其一般计算方法 1.实验目的 一般离散信道容量的迭代运算 2.实验要求 (1)理解和掌握信道容量的概念和物理意义 (2)理解一般离散信道容量的迭代算法 (3)采用Matlab编程实现迭代算法 (4)认真填写实验报告。 3.源代码 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 //若输出概率小于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) //若行相加小于等于0.9999999或者大于等于1.000001 Error //('不符合概率分布') end end b=input('输入迭代精度:'); //输入迭代精度 for i=1:N p(i)=1.0/N; //取初始概率为均匀分布(每行值分别为1/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); //均匀分布的值乘上矩阵值后+q(j),然后赋值给q(j)实现求和

实验二 一般信道容量迭代算法

实验二 一般信道容量迭代算法 1. 实验目的 掌握一般离散信道的迭代运算方法。 2. 实验要求 1) 理解和掌握信道容量的概念和物理意义 2) 理解一般离散信道容量的迭代算法 3) 采用Matlab 编程实现迭代算法 4) 认真填写试验报告 3.算法步骤 ①初始化信源分布),,,,,(21)0(p p p p P r i ????=(一般初始化为均匀分布),置迭代计数器k=0,设信道容量相对误差门限为δ,δ>0,可设-∞=C )0(; ②∑= i k i ij k i ij k ji p p p p )()() (? s j r i ,??=??=,1;,,1 ③∑ ∑∑??????????????????????=+i k ji j ij k ji j ij k i p p p ?? )()() 1(ln exp ln exp r i ,,1??= ④?? ??????????????=∑∑+i k ji j ij k p C ?)()1(ln exp ln ⑤如果δ≤-++C C C k k k )1()()1(,转向⑦; ⑥置迭代序号k k →+1,转向②; ⑦输出p k i ) 1(+和C k )(1+的结果; ⑧停止。 4.代码P=input('转移概率矩阵P=') e=input('迭代精度e=') [r,s]=size(P); n=0; C=0; C_k=0; C_k1=0; X=ones(1,r)/r;

A=zeros(1,r); B=zeros(r,s);%初始化各变量 while(1) n=n+1; for i=1:r for j=1:s B(i,j)=log(P(i,j)/(X*P(:,j))+eps); if P(i,j)==0 B(i,j)=0; else end end A(1,i)=exp(P(i,:)*B(i,:)'); end C_k=log2(X*A'); C_k1=log2(max(A)); if (abs(C_0-C_1)

信道容量

当一个信道受到加性高斯噪声的干扰时,如果信道传输信号的功率和信道的带宽受限,则这种信道传输数据的能力将会如何?这一问题,在信息论中有一个非常肯定的结论――高斯白噪声下关于信道容量的山农(Shannon)公式。本节介绍信道容量的概念及山农定理。 1、信道容量的定义 在信息论中,称信道无差错传输信息的最大信息速率为信道容量,记为。 从信息论的观点来看,各种信道可概括为两大类:离散信道和连续信道。所谓离散信道就是输入与输出信号都是取值离散的时间函数;而连续信道是指输入和输出信号都是取值连续的。可以看出,前者就是广义信道中的编码信道,后者则是调制信道。 仅从说明概念的角度考虑,我们只讨论连续信道的信道容量。 2. 山农公式 假设连续信道的加性高斯白噪声功率为(W),信道的带宽为(Hz),信号功率为(W),则该信道的信道容量为 这就是信息论中具有重要意义的山农公式,它表明了当信号与作用在 信道上的起伏噪声的平均功率给定时,具有一定频带宽度的信道上,理论上单位时间内可能传输的信息量的极限数值。

由于噪声功率与信道带宽有关,故若噪声单边功率谱密度为(W/Hz),则噪声功率。因此,山农公式的另一种形式为 由上式可见,一个连续信道的信道容量受、、三个要素限制,只要这三个要素确定,则信道容量也就随之确定。 3. 关于山农公式的几点讨论 山农公式告诉我们如下重要结论: (1)在给定、的情况下,信道的极限传输能力为,而且此时能够做到无差错传输(即差错率为零)。这就是说,如果信道的实际传输速率大于值,则无差错传输在理论上就已不可能。因此,实际传输速率一般不能大于信道容量,除非允许存在一定的差错率。 (2)提高信噪比(通过减小或增大),可提高信道容量。特别是,若,则,这意味着无干扰信道容量为无穷大; (3)增加信道带宽,也可增加信道容量,但做不到无限制地增加。这是因为,如果、一定,有

信道容量实验报告

w .. . .. 湖南大学 信息科学与工程学院 实验报告 实验名称信道容量的迭代算法 课程名称信息论与编码

1.实验目的 (1)进一步熟悉信道容量的迭代算法; (2)学习如何将复杂的公式转化为程序; (3)掌握C 语言数值计算程序的设计和调试技术。 2、实验方法 硬件:pc 机 开发平台:visual c++软件 编程语言:c 语言 3、实验要求 (1)已知:信源符号个数r 、信宿符号个数s 、信道转移概率矩阵P 。 (2)输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每 个具体的转移概率在运行时从键盘输入。 (3)输出:最佳信源分布P*,信道容量C 。 4.算法分析 1:procedure CHANNEL CAPACITY(r,s,( ji p )) 2:initialize:信源分布 i p =1/r ,相对误差门限σ,C=—∞ 3:repeat 4: 5: 1i ji r i ji i p p p p =∑ij φ

6: C 2211log [exp(log )] r s ji ij r j p φ==∑∑ 7:until C C σ ?≤ 8:output P*= ()i r p ,C 9:end procedure 5.程序调试 1、头文件引入出错 f:\visualc++\channel\cpp1.cpp(4) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory ————#include 纠错://#include f:\visualc++\channel\cpp1.cpp(5) : fatal error C1083: Cannot open include file: 'values.h': No such file or directory ————#include 纠错://#include 2、变量赋值错误 f:\visualc++\channel\cpp1.cpp(17) : error C2065: 'ij' : undeclared identifier f:\visualc++\channel\cpp1.cpp(17) : error C2440: 'initializing' : cannot convert from 'int' to 'float ** ' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast ————float **phi_ij=ij=NULL; 纠错:float **phi_ij=NULL; 3、常量定义错误 f:\visualc++\channel\cpp1.cpp(40) : error C2143: syntax error : missing ';' before 'for' ————for(i=0;iDELTA) f:\visualc++\channel\Cpp1.cpp(84) : error C2021: expected exponent value, not ' ' 21 211exp(log )exp(log )s ji ij j r s ji ij r j p p φφ===∑∑∑i p

利用矩阵理论详细推导MIMO信道容量

利用矩阵理论详细推导MIMO 信道容量 摘要 多输入多输出(MIMO)技术被认为是现代通信技术中的重大突破之一,以其能极大增加系统容量与改善无线链路质量的优点而受到了越来越多的重视与关注。通信信道容量是信道进行无失真传输速率的上界,因此研究MIMO 的信道容量具有巨大的指导意义。本文把矩阵理论知识与MIMO 技术信道容量中的应用紧密结合,首先建立了MIMO 信道模型,利用信息论理论和矩阵理论详细推导出MIMO 信道容量。并得出重要结论。 关键词: MIMO ;信道容量;奇异值分解 一、 引言 MIMO Multiple Input-Multiple Output)是指在通信链路的发送端与接收端均使用多个天线元的传输系统,它能够将传统通信系统中存在的多径因素变成对用户通信性能有利的因素,从而成倍地提高业务传输速率。矩阵理论在通信,自动控制等工程领域里应用广泛,而通信的难点在于信道的处理,因此,矩阵理论与无线信道的研究是一个很好的切入点。目前,MIMO 技术的信道容量和空时编码,空时复用等技术都离不开矩阵理论的应用。 二、 利用矩阵理论详细推导MIMO 信道容量 1) MIMO 信道介绍 MIMO 是多输入多输出系统,当发送信号所占用的带宽足够小的时候,信道可以被认为是平坦的, 这样,MIMO 系统的信道用一个R T n n ?的复数矩阵H 描述,H 的子元素,j i h 表示从第(1,2,...)R j j n =根发射天线到第(1,2,...)T i i n =根接收天线之间的空间信道衰落系数[1]。如下图所示: 1112121 22212T T R T R R n n n n n n H h h h h h h h h h ??????=???? ???? (2.1) 每个符号周期内,发送信号可以用一个1T n ?的列向量12[]T T i n x x x x x =??????表示,其中i x 表示 在第i 个天线上发送的数据。同时,用一个1R n ?的列向量12[]R T i n y y y y y =??????表示,其中i y 表示在第i 个天线上发送的数据。对于高斯信道,发射信号的最佳分布也是高斯分布[1]。因此,x 的元素是零均 值独立同分布的高斯变量。发送信号的协方差可以表示为: {}H xx R E xx = (2.2) 发送信号的功率可以表示为 ()xx P tr R = (2.3) 接收信号和噪声可以分别用两个1R n ?的列向量y 和n 表示。其中信道噪声是加性噪声,服从循环对称复高斯分布,并且与发射信号x 不相关,假设n 均值为0,功率为2σ。噪声的协方差为: 2 R H nn n R E nn I σ??==?? (2.4) 通过这样一个线性模型,接收信号可以表示为 y Hx n =+ (2.5)

信息量及信道容量的计算

#include #include #include using namespace std; int main() { int i,j,k,m,n; char r; char A='Y',B='N'; double x[20],p[12][12],q[12][12],y[20]; cout<<"输入信源x的个数N="; cin>>n; cout<<"输入所需信源概率:"<>m; if(m==1) { double H=0,h; for(int j=1;j<=n;j++) { h=-x[j-1]*log10(x[j-1])/log10(2); H=H+h; } cout<<"信源熵为:"<

double H1=0,h1=0 ,H2=0,h2=0; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { q[i-1][j-1]=p[i-1][j-1]*x[i-1]; //cout<<"联合概率"<<"y"<

相关主题
文本预览
相关文档 最新文档