实验三-信道容量计算

合集下载

实验报告-3-信道容量

实验报告-3-信道容量

《信息与编码》课内实验报告学生姓名:及学号:学院:班级:课程名称:信息与编码实验题目:离散信道容量指导教师姓名及职称:2015年4月20日目录一、实验目的 (1)二、实验内容 (1)三、实验要点及说明 (1)四、实现方法 (1)五、实验结果 (1)六、源程序清单 (2)七、思考及总结 (3)一、实验目的1.掌握离散信道的信道容量的计算方法;2.理解不同类型信道的不同特点与不同的计算方法;二、实验内容1.进一步熟悉一般离散信道的信道容量计算方法;2.进一步复习巩信道性质与实际应用;3.学习如何将复杂的公式转化为程序。

三、实验要点及说明准确理解信道容量计算公式意义及如何计算,并能通过matlab编程计算相应信道容量;要编写一个通用的程序,计算不同类型的信道的容量,进一步分析影响信道容量的因素。

四、实现方法以matlab软件为基础,以通过编程,1)计算对称信道的信道容量。

2)计算非对称信道的信道容量。

3)分析影响信道容量的因素。

五、实验结果1:计算对称信道的信道容量>> dcxdrl([.2 .8;.8 .2])ans =0.27812:计算非对称信道的信道容量fdcrl([.2 .8 ;.1 .9])ans =0.01443:影响信道容量的因素影响信道容量的因素有:信源和信宿的个数,以及各个信道的概率,虽然说,这个过程中会有信息量的损失,但是这个我们在计算信道容量的时候也是计算在内。

六、源程序清单1:对称function y=dcxdrl(p)%计算对称信道容量[h,l]=size(p);if h~=lerror('非对称信道矩阵非方阵')endif abs(sum(p')-1)>0.00001*ones(1,h)error('信道概率分布错误!')endif abs(sum(p)-sum(p'))>0.0001*ones(1,h)error('非对称信道!')endy=log2(l)+sum(p(1,:).*log2(p(1,:)));2:非对称function y=fdcrl(p)%非对称信道容量[l,m]=size(p);if l~=m|max(abs(sum(p')-1))>0.001error('信道矩阵非方阵或概率分布错误!')endb=p.*log2(p);x=p\sum(b,2);y=log2(sum(2.^x));七、思考及总结通过这次课内实验更加理解了信道容量计算公式意义及如何计算,并且能通过matlab编程计算相应信道容量,并能准确地计算出对称与非对称的信道容量。

信道容量基本原理的应用

信道容量基本原理的应用

信道容量基本原理的应用1. 什么是信道容量?信道容量是指信道能够传输的最大信息速率,也称为信息传输速率上限。

在信息论中,信道容量被用来衡量信道的质量和可靠性。

2. 信道容量的计算方法信道容量的计算方法根据不同的信道模型和条件而有所不同,以下是几种常见的计算方法:•高斯信道容量计算–对于高斯信道,信道容量可以通过香农公式进行计算。

香农公式的表达式为:C = B * log2(1 + S/N),其中C为信道容量,B为信道的带宽,S为信道中的信号功率,N为信道中的噪声功率。

•多径信道容量计算–对于多径信道,信道容量的计算比较复杂。

通常需要考虑多径传播导致的信号衰减、时延扩展以及相关性等因素。

•天线阵列信道容量计算–对于天线阵列系统,信道容量的计算需要考虑信号的幅度、相位和天线之间的相关性。

3. 信道容量的应用信道容量的基本原理在通信系统中有广泛的应用,以下是一些常见的应用领域:•码率控制–在数据通信中,为了提高信道的利用率和系统的可靠性,常常会根据信道容量进行码率控制。

通过控制发送端的编码速率,可以适应信道的变化,提高系统的性能。

•功率分配–在无线通信系统中,多个用户共享有限的频谱资源。

为了提高系统的容量和性能,需要根据信道容量进行功率分配。

通过将更多的功率分配给信道质量好的用户,可以提高系统的整体性能。

•天线设计–在无线通信系统中,天线设计对信号的传输质量和容量有很大影响。

根据信道容量的计算结果,可以优化天线的配置和布局,提高系统的容量和覆盖范围。

•无线网络规划–在无线网络规划中,信道容量是一个重要的指标。

根据信道容量的计算结果,可以确定网络的规模和布局,优化网络的覆盖范围和用户体验。

4. 信道容量的局限性虽然信道容量在通信系统中有重要的应用,但是它也存在一些局限性:•复杂性–信道容量的计算需要考虑多个因素,涉及到复杂的数学模型和计算方法。

这对于系统的设计和优化需要专业的知识和技能。

•理论上的极限–信道容量的计算结果是基于理论模型和假设的。

信道容量的计算方法

信道容量的计算方法

信道容量的计算方法信道容量的计算方法:1、对于离散无记忆信道,香农公式是计算信道容量的重要方法。

香农公式为C = W log₂(1 + S/N),其中C表示信道容量,W表示信道带宽,S表示信号功率,N表示噪声功率。

2、在计算信道容量时,先确定信道带宽W的值。

例如,在一个无线通信系统中,经过测量或者根据通信标准规定,信道带宽可能是20MHz。

3、接着确定信号功率S。

信号功率可以通过功率测量仪器得到,比如在一个发射机输出端测量到的功率为10W。

4、然后确定噪声功率N。

噪声功率的确定需要考虑多种因素,如热噪声、干扰噪声等。

热噪声功率可以根据公式N₀= kT₀B计算,其中k是玻尔兹曼常数,T₀是绝对温度,B是等效噪声带宽。

在常温下,假设T₀= 290K,若等效噪声带宽与信道带宽相同为20MHz,可算出热噪声功率,再加上其他干扰噪声功率得到总的噪声功率N。

5、将确定好的W、S、N的值代入香农公式计算信道容量C。

6、对于离散有记忆信道,计算信道容量会更复杂。

需要考虑信道的记忆特性,通常采用马尔可夫链来描述信道状态的转移概率。

7、构建马尔可夫链的状态转移矩阵,矩阵中的元素表示从一个状态转移到另一个状态的概率。

8、通过求解马尔可夫链的稳态分布,结合输入符号的概率分布,利用信息论中的互信息公式来计算信道容量。

9、在多输入多输出(MIMO) 系统中,信道容量的计算又有不同。

需要考虑多个发射天线和多个接收天线之间的信道矩阵H。

10、利用矩阵H的特征值等信息,根据MIMO信道容量公式C = log₂det(I + ρHH*)计算信道容量,其中ρ是信噪比,I是单位矩阵,H*是H的共轭转置矩阵。

信道容量的计算方法研究

信道容量的计算方法研究

信道容量的计算方法研究
信道容量是指在某个给定的带宽和信噪比条件下,传输信息的最大速率。

信道容量通常用单位时间内传输的比特数(比特每秒)来表示。

计算信道容量的公式为:
C = B × log2(1 + S/N)
其中,C表示信道容量,B表示信道带宽,S表示信号功率,N 表示噪声功率。

此公式在120年前由德国数学家Hartley提出,称为哈特利公式。

它用于描述在理想信道条件下的信息传输限制。

该公式表示,在频带B内、噪声功率为N的情况下,传输速率C理论上最高为
C=B*log2(1+S/N)。

这个公式是通过链路的信道特性分析来得出的,实际链路中应用时需要估计 S/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,(jip ))2:initialize:信源分布ip =1/r ,相对误差门限σ,C=—∞3:repeat 4:5:6:C2211log [exp(log )]rsji ij r j p φ==∑∑7:until C Cσ∆≤8:output P*=()i rp ,C9:end procedure21211exp(log )exp(log )sji ij j r sjiij r j p pφφ===∑∑∑ip 1i jiri jii 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<unistd.h>纠错://#include<unistd.h>f:\visualc++\channel\cpp1.cpp(5) : fatal error C1083: Cannot open include file: 'values.h': No such file or directory————#include<values.h>纠错://#include<values.h>2、变量赋值错误f:\visualc++\channel\cpp1.cpp(17) : error C2065: 'ij' : undeclared identifierf:\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;i<r;i++)phi_ij[i]=(float *)calloc(s,sizeof(float));f:\visualc++\channel\cpp1.cpp(52) : error C2021: expected exponent value, not ' '————if(fabs(validate -1.0)>DELTA)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 identifierF:\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 identifierf:\visualc++\channel\cpp1.cpp(60) : error C2059: syntax error : '.'f:\visualc++\channel\cpp1.cpp(60) : error C2017: illegal escape sequencef:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xa1'f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xb1'————fprintf(stdout,”Starting..\n”);纠错:fprintf(stdout,"Starting..\n");4、没有进行强制转换F:\visualc++\channel\Cpp1.cpp(65) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data————p_i[i]=1.0/(float)r;纠错:p_i[i]=(float)(1.0/(float)r);F:\visualc++\channel\Cpp1.cpp(101) : warning C4244: '+=' : conversion from 'double' to 'float', possible loss of data————sum[i]+=p_ji[i][j]*log( phi_ij[i][j])/ log(2.0);纠错:sum[i]+=(float)(p_ji[i][j]*log( phi_ij[i][j])/ log(2.0));F:\visualc++\channel\Cpp1.cpp(103) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data————sum[i]=pow(2.0,sum[i]);纠错:sum[i]=(float)(pow(2.0,sum[i]));F:\visualc++\channel\Cpp1.cpp(114) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data————C= log(p_j)/ log(2.0);纠错:C= (float)(log(p_j)/ log(2.0));4、表达式错误F:\visualc++\channel\Cpp1.cpp(86) : error C2065: 'phi_ji' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(86) : error C2109: subscript requires array or pointer typeF:\visualc++\channel\Cpp1.cpp(86) : error C2109: subscript requires array or pointer type ————phi_ij[i][j]=p_i[i]* phi_ji[i][j]/p_j;纠错:phi_ij[i][j]=p_i[i]* p_ji[i][j]/p_j;F:\visualc++\channel\Cpp1.cpp(122) : error C2065: 'fprint' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xa1'F:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xb1'F:\visualc++\channel\Cpp1.cpp(122) : error C2065: 'The' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(122) : error C2146: syntax error : missing ')' before identifier 'iteration'F:\visualc++\channel\Cpp1.cpp(122) : error C2017: illegal escape sequenceF:\visualc++\channel\Cpp1.cpp(122) : error C2017: illegal escape sequenceF:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xa1'F:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xb1'————fprint(stdout,”The iteration number is %d.\n\n”,k);纠错:fprintf(stdout,"The iteration number is %d.\n\n",k);F:\visualc++\channel\Cpp1.cpp(145) : error C2143: syntax error : missing ')' before ';' ————free((p_i);纠错:free(p_i);5、没有返回值F:\visualc++\channel\Cpp1.cpp(149) : warning C4508: 'main' : function should return a value; 'void' return type assumed、纠错:return 0;6.改进程序/*引入头文件*/#include<stdio.h>#include<math.h>#include<stdlib.h>/*定义常量*/#define DELTA 0.0000001//DELTA为相对误差门限#define MAXFLOAT 1000000;//MAXFLOAT为初始化信道容量值int main( void){/*定义全局变量*//*register允许直接从寄存器中读取变量,提高速率*/register int i,j;//i、j为整型变量register int k;//信道容量迭代计算次数int r,s;//r为信源符号个数,s为新宿符号个数float *p_i=NULL;//r个信源符号发生的概率float **p_ji=NULL;//信源到新宿的信道转移概率矩阵Pfloat **phi_ij=NULL;float C,C_pre,validate;//C为信道容量,C_pre为信道最大容量,validate为判定输入转移概率矩阵是否合法float * sum=NULL;//信源符号所带的全部信息量float p_j;//条件概率/*输入信源符号和新宿符号个数*/printf("请输入信源符号个数r、信宿符号个数s...\n");printf("+++++注意!!!r必须大于等于s!!+++++\n");fscanf(stdin,"%d",&r);fscanf(stdin,"%d",&s);/*为 p_i,p_ji 和 phi_ij 分配内存空间*/p_i=(float *)calloc(r,sizeof(float));p_ji=(float **)calloc(r,sizeof(float));/*为每个p_ji分配大小为s的内存空间*/for(i=0;i<r;i++)p_ji[i]=(float *)calloc(s,sizeof(float));phi_ij=(float **)calloc(r,sizeof(float*));/*输入转移概率矩阵*/for(i=0;i<r;i++)/*为每个phi_ij分配大小为s的内存空间*/phi_ij[i]=(float *)calloc(s,sizeof(float));printf("信道转移概率矩阵P...\n");for(i=0;i<r;i++)for(j=0;j<s;j++)fscanf(stdin,"%f",&p_ji[i][j]);/*判定输入的转移概率矩阵是否正确*/for(i=0;i<r;i++){validate=0.0;for(j=0;j<s;j++){validate +=p_ji[i][j];}if((validate-1.0)>=0)//如果转移概率矩阵的概率和大于1,输入数据不合法{fprintf(stdout,"invalid input data.\n");exit(-1);}}/*显示开始计算..*/fprintf(stdout,"Starting..\n");/*初始化 p_i 和 phi_ij*/for(i=0;i<r;i++){/* p_i为等概率,即概率为1/r*/p_i[i]=(float)(1.0/(float)r);}/*初始化信道容量c,迭代次数k和临时变量variable*/C=-MAXFLOAT;k=0;/* 为sum分配大小为r的内存空间*/sum=(float *)calloc(r,sizeof(float));/*开始迭代计算*/do{k++;//每进行一次迭代,迭代次数k加1/* 计算phi_ij(k)*/for(j=0;j<s;j++){p_j=0.0;for(i=0;i<r;i++)p_j+=p_i[i]*p_ji[i][j];if(fabs(p_j)>=DELTA)for(i=0;i<r;i++)phi_ij[i][j]=p_i[i]* p_ji[i][j]/p_j;elsefor(i=0;i<r;i++)phi_ij[i][j]=0.0;}/*计算p_i(k+1)*/p_j=0.0;for(i=0;i<r;i++){sum[i]=0.0;for(j=0;j<s;j++){/*相对误差门限为0*/if(fabs(phi_ij[i][j])>=DELTA)sum[i]+=(float)(p_ji[i][j]*log( phi_ij[i][j])/ log(2.0)); }sum[i]=(float)(pow(2.0,sum[i]));p_j+=sum[i];}for(i=0;i<r;i++){p_i[i]=sum[i]/p_j;}C_pre=C;C= (float)(log(2.0)/log(p_j) );}while(fabs(C-C_pre)/C>DELTA);free(sum);sum=NULL;/*显示结果*/fprintf(stdout,"The iteration number is %d.\n\n",k);//迭代次数fprintf(stdout,"The capacity of the channel is %.6f bit/symbol:\n\n",C);//信道容量fprintf(stdout,"The best input probability distribution is :\n");//最佳信源分布 for(i=0;i<r;i++)fprintf(stdout,"%.6f\n",p_i[i]);fprintf(stdout,"\n");/* 释放指针空间*/for(i=s-1;i>=0;i--){free(phi_ij[i]);phi_ij[i]=NULL;}free(phi_ij);phi_ij=NULL;for(i=r-1;i>=0;i--){free(p_ji[i]);p_ji[i]=NULL;}free(p_ji);p_ji=NULL;free(p_i);p_i=NULL;exit(0);return 0;}7.实验结果八、实验结论信道容量是指信道能无错误传送的最大信息率。

无线通信中的信道容量估计

无线通信中的信道容量估计

无线通信中的信道容量估计随着无线通信技术的发展,人们对通信速度和性能要求越来越高。

而信道容量是衡量无线通信系统性能的一个重要指标,准确估计信道容量对于优化系统设计和提高通信质量非常关键。

本文将介绍无线通信中的信道容量估计,并详细列出以下步骤:1. 了解信道容量的概念- 信道容量是指在无干扰的条件下,对于给定的频谱带宽,信道可以传输的最大信息速率。

- 在理想情况下,信道容量可以通过香农公式来计算:C = B*log2(1+S/N),其中B为频谱带宽,S为信号功率,N为噪声功率。

2. 理解无线通信中的信道特性- 无线通信中的信道受到多径传播、衰落和干扰等影响,因此真实的信道容量可能低于理论值。

- 多径传播会导致信号多次反射和绕射,造成信号传播路径的复杂性。

- 衰落是指信号在传播过程中功率的减小,可分为快衰落和慢衰落。

3. 选择合适的信道模型- 常用的信道模型有AWGN信道、瑞利衰落信道和多径衰落信道等。

- AWGN信道是指只有加性高斯白噪声的信道,适用于无干扰和无衰落的情况。

- 瑞利衰落信道适用于没有直射路径的室内和城市环境,信号只经过反射和绕射。

- 多径衰落信道适用于城市和室内环境中,信号经过多次反射和绕射。

4. 进行信道估计- 信道估计是指通过接收信号的特征来估计信道的相关参数,如增益、时延和相位等。

- 常用的信道估计方法有最小二乘法、最大似然估计和贝叶斯估计等。

5. 计算信道容量- 在得到信道的估计结果后,可以根据已选择的信道模型和估计参数来计算信道容量。

- 对于AWGN信道,信道容量可以直接使用香农公式进行计算。

- 对于瑞利衰落和多径衰落信道,可以通过蒙特卡洛仿真或数值积分等方法来估计信道容量。

6. 优化信道容量- 调整系统参数以优化信道容量是提高通信性能的关键。

- 如增加天线数量、优化调制方式、降低码率或增加功率等。

- 此外,使用信道编码和误差控制技术也可以有效提高信道容量。

7. 实际应用- 信道容量估计在无线通信系统设计和优化中具有重要作用。

《信道容量及其计算》课件

《信道容量及其计算》课件

熵的定义
熵是衡量信息不确定度的物理量,也可以理解为信 息源的不确定程度。
信息量的定义
信息量是用来衡量某个事件的信息量大小,它与事 件发生的概率成反比。
熵与信息量的关系
熵与信息量成正比,即熵越大,则信息量越多。
信道容量的计算公式
1
离散无记忆信道
不同信源符号对应不同码字,使用香农公式进行计算。
2
连续无记忆信道
总结
1 信道容量的意义
信道容量是衡量信息传输 速率的重要指标,可以优 化传输效率和提高通信质 量。
2 信道容量的应用
信道容量应用广泛,包括 无线通信、光通信、数据 传输等领域。
3 未来的发展趋势
随着技术的发展,信道容 量会越来越高,将大幅提 高信息传输的效率和可靠 性。
信宿接收到的信号是连续的,用瑞利公式计算。
3
大信噪比近似
在大信噪比的情况下,信道容量计算公式可以近似为香农公式。
应用举例
无线通信系统中的信道容量
采用MIMO技术和Turbo编码,可以大幅度提高无线 传输的速率和可靠性。
光通信系统中的信道容量
采用波分复用技术和波分多路复用技术,可以大幅 度提高光纤的传输速率。
信道容量及其计算
本次课件将介绍信道容量的基本概念和计算公式,以及其在无线通信和光通 信等领域的应用举例。
什么是信道容量
信道的定义
信道是信息传输的媒介,以某种信号作为信息的表现形式,通过某种物质媒介进行传播。
信道容量的定义
信道容量是在满息量。
熵与信息量

信道容量迭代计算实验报告

信道容量迭代计算实验报告

信道容量迭代计算实验报告王升10271051信科1002信道容量迭代计算实验报告一、实验目的:了解信道容量的定义和计算方法,能编写出正确的程序进行迭代计算得出信道容量。

二、实验要求:1)输入:输入信源个数、信宿个数和信道容量的精度,程序能任意生成随机的信道转移概率矩阵。

2)输出:输出最佳信源分布和信道容量。

三、实验环境:Matlab四、实验原理:五、源程序代码:clear;r=input('输入信源个数:');s=input('输入信宿个数:');deta=input('输入信道容量的精度:');Q=rand(r,s); %创建m*n随机分布矩阵A=sum(Q,2);B=repmat(A,1,s);disp('信源转移概率矩阵:'),p=Q./B %信源转移概率矩阵i=1:1:r;q(i)=1/r;disp('原始信源分布:'),qc=-10e-8;C=repmat(q',1,s);for k=1:1:100000m=p.*C; %后验概率的分子部分a=sum(m); %后验概率的分母部分su1=repmat(a,r,1);t=m./su1; %后验概率矩阵D=exp(sum(p.*log(t),2)); %信源分布的分子部分su2=sum(D); %信源分布的分母部分q=D/su2; %信源分布C=repmat(q,1,s);c(k+1)=log(sum(exp(sum(p.*log(t),2))))/log(2);kk=abs(c(k+1)-c(k))/c(k+1);if(kk<=0.000001)break;endenddisp('最大信道容量时的信源分布:q='),disp(q') disp('最大信道容量:c='),disp(c(k+1))六、实验结果:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三信道容量计算
一、实验目的:
了解对称信道与非对称信道容量的计算方法。

二、实验原理:
信道容量是信息传输率的极限,当信息传输率小于信道容量时,通过信道编码,能够实现几乎无失真的数据传输;当数据分布满足最佳分布时,实现信源与信道的匹配,使得信息传输率能够达到信道容量。

本实验利用信道容量的算法,使用计算机完成信道容量的计算。

实验采用迭代算法计算信道容量,即:设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 =,分别计算该信道的信道容量和最
佳分布;
四、实验要求:
在实验报告中给出源代码,写出信道对应的条件转移矩阵,计算出相应结果。

并定性讨论信道容量与信道参数之间的关系。

附:程序参考代码(matlab)。

相关文档
最新文档