信道容量实验报告

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

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;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 ' '

21

211exp(log )exp(log )s ji ij j r s ji ij r j p p

φφ===∑∑∑i p

————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 : '.'

f:\visualc++\channel\cpp1.cpp(60) : error C2017: illegal escape sequence

f:\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 identifier

F:\visualc++\channel\Cpp1.cpp(86) : error C2109: subscript requires array or pointer type

相关文档
最新文档