收藏 分享(赏)

信道容量实验报告.doc

上传人:精品资料 文档编号:10532662 上传时间:2019-11-26 格式:DOC 页数:9 大小:85.50KB
下载 相关 举报
信道容量实验报告.doc_第1页
第1页 / 共9页
信道容量实验报告.doc_第2页
第2页 / 共9页
信道容量实验报告.doc_第3页
第3页 / 共9页
信道容量实验报告.doc_第4页
第4页 / 共9页
信道容量实验报告.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、第 1 页 共 9 页湖 南 大 学信息科学与工程学院实 验 报 告实验名称 信道容量的迭代算法课程名称 信息论与编码湖南大学大学信息科学与工程学院 实验报告 第 2 页 共 9 页- 2 -1.实验目的(1)进一步熟悉信道容量的迭代算法;(2)学习如何将复杂的公式转化为程序;(3)掌握 C 语言数值计算程序的设计和调试技术。2、实验方法硬件:pc 机开发平台:visual c+软件编程语言:c 语言3、实验要求(1)已知:信源符号个数 r、信宿符号个数 s、信道转移概率矩阵 P。(2)输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每个具体的转移概率在运行时从键盘输入。(3)输

2、出:最佳信源分布 P*,信道容量 C。4.算法分析1:procedure CHANNEL CAPACITY(r,s,( )jip2:initialize:信源分布 =1/r,相对误差门限 ,C=ip3:repeat4: 1ijrijpij5: 21exp(log)sjiijjrsjiijjip6:C 221logexp(log)rsjiijj7:until 8:output P*= ,C()irp9:end procedure 湖南大学大学信息科学与工程学院 实验报告 第 3 页 共 9 页- 3 -5.程序调试1、头文件引入出错f:visualc+channelcpp1.cpp(4) : f

3、atal error C1083: Cannot open include file: unistd.h: No such file or directory#include纠错:/#includef:visualc+channelcpp1.cpp(5) : fatal error C1083: Cannot open include file: values.h: No such file or directory#include纠错:/#include2、变量赋值错误f:visualc+channelcpp1.cpp(17) : error C2065: ij : undeclared i

4、dentifierf:visualc+channelcpp1.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 castfloat *phi_ij=ij=NULL;纠错:float *phi_ij=NULL;3、常量定义错误f:visualc+channelcpp1.cpp(40) : erro

5、r C2143: syntax error : missing ; before forfor(i=0;iDELTA)f:visualc+channelCpp1.cpp(84) : error C2021: expected exponent value, not if(fabs(p_j)=DELTA)f:visualc+channelCpp1.cpp(100) : error C2021: expected exponent value, not if(fabs(phi_ijij)=DELTA)f:visualc+channelCpp1.cpp(116) : error C2021: exp

6、ected exponent value, not while(fabs(C-C_pre)/CDELTA);纠错:#define DELTA 0.000001;F:visualc+channelCpp1.cpp(68) : error C2065: MAXFLOAT : undeclared identifierF:visualc+channelCpp1.cpp(68) : warning C4244: = : conversion from int to float, possible loss of dataC=-MAXFLOAT;纠错:#define MAXFLOAT 1000000;3

7、、引用中文逗号f:visualc+channelcpp1.cpp(60) : error C2018: unknown character 0xa1f:visualc+channelcpp1.cpp(60) : error C2018: unknown character 0xb1f:visualc+channelcpp1.cpp(60) : error C2065: Starting : undeclared identifierf:visualc+channelcpp1.cpp(60) : error C2059: syntax error : .湖南大学大学信息科学与工程学院 实验报告

8、第 4 页 共 9 页- 4 -f:visualc+channelcpp1.cpp(60) : error C2017: illegal escape sequencef:visualc+channelcpp1.cpp(60) : error C2018: unknown character 0xa1f:visualc+channelcpp1.cpp(60) : error C2018: unknown character 0xb1 fprintf(stdout,”Startingn”);纠错:fprintf(stdout,“Startingn“);4、没有进行强制转换F:visualc+ch

9、annelCpp1.cpp(65) : warning C4244: = : conversion from double to float, possible loss of datap_ii=1.0/(float)r;纠错:p_ii=(float)(1.0/(float)r);F:visualc+channelCpp1.cpp(101) : warning C4244: += : conversion from double to float, possible loss of data sumi+=p_jiij*log( phi_ijij)/ log(2.0);纠错:sumi+=(flo

10、at)(p_jiij*log( phi_ijij)/ log(2.0);F:visualc+channelCpp1.cpp(103) : warning C4244: = : conversion from double to float, possible loss of datasumi=pow(2.0,sumi);纠错:sumi=(float)(pow(2.0,sumi);F:visualc+channelCpp1.cpp(114) : warning C4244: = : conversion from double to float, possible loss of dataC=

11、log(p_j)/ log(2.0);纠错:C= (float)(log(p_j)/ log(2.0);4、表达式错误F:visualc+channelCpp1.cpp(86) : error C2065: phi_ji : undeclared identifierF:visualc+channelCpp1.cpp(86) : error C2109: subscript requires array or pointer typeF:visualc+channelCpp1.cpp(86) : error C2109: subscript requires array or pointer

12、typephi_ijij=p_ii* phi_jiij/p_j;纠错:phi_ijij=p_ii* p_jiij/p_j;F:visualc+channelCpp1.cpp(122) : error C2065: fprint : undeclared identifierF:visualc+channelCpp1.cpp(122) : error C2018: unknown character 0xa1F:visualc+channelCpp1.cpp(122) : error C2018: unknown character 0xb1F:visualc+channelCpp1.cpp(1

13、22) : error C2065: The : undeclared identifierF:visualc+channelCpp1.cpp(122) : error C2146: syntax error : missing ) before identifier iterationF:visualc+channelCpp1.cpp(122) : error C2017: illegal escape sequenceF:visualc+channelCpp1.cpp(122) : error C2017: illegal escape sequenceF:visualc+channelC

14、pp1.cpp(122) : error C2018: unknown character 0xa1F:visualc+channelCpp1.cpp(122) : error C2018: unknown character 0xb1fprint(stdout,”The iteration number is %d.nn”,k);纠错:fprintf(stdout,“The iteration number is %d.nn“,k);F:visualc+channelCpp1.cpp(145) : error C2143: syntax error : missing ) before ;

15、free(p_i);湖南大学大学信息科学与工程学院 实验报告 第 5 页 共 9 页- 5 -纠错:free(p_i);5、没有返回值F:visualc+channelCpp1.cpp(149) : warning C4508: main : function should return a value; void return type assumed、纠错:return 0;6.改进程序/*引入头文件*/#include#include#include/*定义常量*/#define DELTA 0.0000001/DELTA 为相对误差门限#define MAXFLOAT 1000000;

16、/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 为判定输入转移概

17、率矩阵是否合法float * sum=NULL;/信源符号所带的全部信息量float p_j;/条件概率/*输入信源符号和新宿符号个数*/printf(“请输入信源符号个数 r、信宿符号个数 s.n“);printf(“+注意!r 必须大于等于 s!+n“);fscanf(stdin,“%d“,fscanf(stdin,“%d“,/*为 p_i,p_ji 和 phi_ij 分配内存空间*/p_i=(float *)calloc(r,sizeof(float);p_ji=(float *)calloc(r,sizeof(float);湖南大学大学信息科学与工程学院 实验报告 第 6 页 共 9

18、页- 6 -/*为每个 p_ji 分配大小为 s 的内存空间*/for(i=0;i=0)/如果转移概率矩阵的概率和大于 1,输入数据不合法fprintf(stdout,“invalid input data.n“);exit(-1); /*显示开始计算*/ fprintf(stdout,“Startingn“);/*初始化 p_i 和 phi_ij*/for(i=0;i=DELTA)for(i=0;i=DELTA)sumi+=(float)(p_jiij*log( phi_ijij)/ log(2.0);sumi=(float)(pow(2.0,sumi);p_j+=sumi;for(i=0;

19、iDELTA);free(sum);sum=NULL;湖南大学大学信息科学与工程学院 实验报告 第 8 页 共 9 页- 8 -/*显示结果*/fprintf(stdout,“The iteration number is %d.nn“,k);/迭代次数fprintf(stdout,“The capacity of the channel is %.6f bit/symbol:nn“,C);/信道容量fprintf(stdout,“The best input probability distribution is :n“);/最佳信源分布for(i=0;i=0;i-)free(phi_iji

20、);phi_iji=NULL;free(phi_ij);phi_ij=NULL;for(i=r-1;i=0;i-)free(p_jii);p_jii=NULL;free(p_ji);p_ji=NULL;free(p_i);p_i=NULL;exit(0);return 0;7.实验结果湖南大学大学信息科学与工程学院 实验报告 第 9 页 共 9 页- 9 -8、实验结论信道容量是指信道能无错误传送的最大信息率。对于只有一个信源和一个信宿的单用户信道,它是一个数,单位是比特每秒或比特每符号。它代表每秒或每个信道符号能传送的最大信息量,或者说小于这个数的信息率必能在此信道中无错误地传送。信道的输入

21、、输出都取值于离散符号集,且都用一个随机变量来表示的信道就是离散单符号信道。由于信道中存在干扰,因此输入符号在传输中将会产生错误,这种信道干扰对传输的影响可用传递概率来描述。信道传递概率通常称为前向概率。它是由于信道噪声引起的,所以通常用它描述信道噪声的特性。有时把 p(x)称为输入符号的先验概率。而对应的把p(x|y)称为输入符号的后验(后向)概率。 平均互信息 I(X;Y) 是接收到输出符号集 Y 后所获得的关于输入符号集 X的信息量。信源的不确定性为 H(X),由于干扰的存在,接收端收到 Y 后对信源仍然存在的不确定性为 H(X|Y),又称为信道疑义度。信宿所消除的关于信源的不确定性,也

22、就是获得的关于信源的信息为 I(X;Y),它是平均意义上每传送一个符号流经信道的信息量。对于固定的信道,总存在一种信源(某种输入概率分布) ,使信道平均传输一个符号接收端获得的信息量最大,也就是说对于每个固定信道都有一个最大的信息传输率,这个最大的信息传输率即为信道容量,而相应的输入概率分布称为最佳输入分布。 为了评价实际信道的利用率,应具体计算已给信道的容量。这是一个求最大值的问题。由于互信息对输入符号概率而言是凸函数,其极值将为最大值,因此这也就是求极值的问题。对于离散信道, P(x)是一组数,满足非负性和归一性等条件,可用拉 格 朗 日 乘 子 法 求得条件极值。对于连续信道, P(x)是一函数,须用变分法求条件极值。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报