版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖南大学信息科学与工程学院实验报告实验名称信道容量的迭代算法课程名称信息论与编码.8: output P*=(Pi)r,C9: end procedure1.实验目的(1)进一步熟悉信道容量的迭代算法;(2)学习如何将复杂的公式转化为程序;(3)掌握 C 语言数值计算程序的设计和调试技术。2、实验方法硬件:pc 机开发平台:visual C+软件编程语言:c 语言3、实验要求(1)已知:信源符号个数 r、信宿符号个数 s、信道转移概率矩阵 P。(2)输入: 任意的一个信道转移概率矩阵。 信源符号个数、 信宿符号个数和每 个具体的转移概率在运行时从键盘输入。(3)输出:最佳信源分布 P*,信道容
2、量 Co4.算法分析1: procedure CHANNEL CAPACITY(r,s,(Pji)2: initialize:信源分布Pi=1/r,相对误差门限,C=3: repeat4:ijPiPjirPiPjii 15:sexp( Pjilog2 ij)Pi 丄rsexp(jPjilog?ij)6:rlog2【r 1exp(sPjilog2 ij)j 17:Cun tilC.5.程序调试1、头文件引入出错f:visualc+channelcpp1.cpp(4) : fatal error C1083: Cannot open include file:unistd.h: No such f
3、ile or directory#include纠错:/#include f:visualc+channelcpp1.cpp(5) : fatal errorC1083: Cannot open include file: values.h: No such file or directory#include纠错:/#include2、变量赋值错误f:visualc+channelcpp1.cpp(17) : error C2065: ij : undeclared identifierf:visualc+channelcpp1.cpp(17) : error C2440: initializ
4、ing : cannot convert from int to float * Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-stylecastfloat *phi_ij=ij=NULL;纠错:float *phi_ij=NULL;3、常量定义错误f:visualc+channelcpp1.cpp(40) : error C2143: syntax error : missing ; before forfor(i=0;iDELTA)f:vis
5、ualc+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: expected exponent value, not while(fabs(C-C_pre)/CDELTA);纠错:#define
6、 DELTA 0.000001; F:visualc+channelCpp1.cpp(68) : error C2065: MAXFLOAT :undeclared identifier F:visualc+channelCpp1.cpp(68) : warning C4244: = : conversion from int tofloat, possible loss of dataC=-MAXFLOAT;纠错:#define MAXFLOAT 1000000;3、引用中文逗号f:visualc+channelcpp1.cpp(60) : error C2018: unknown char
7、acter 0 xa1f:visualc+channelcpp1.cpp(60) : error C2018: unknown character 0 xb1f:visualc+channelcpp1.cpp(60) : error C2065: Starting : undeclared identifierf:visualc+channelcpp1.cpp(60) : error C2059: syntax error : .f:visualc+channelcpp1.cpp(60) : error C2017: illegal escape sequencef:visualc+chann
8、elcpp1.cpp(60) : error C2018: unknown character 0 xa1f:visualc+channelcpp1.cpp(60) : error C2018: unknown character 0 xb1fprintf(stdout,”Starting.n”);纠错:fprintf(stdout,Starting.n);4、没有进行强制转换F:visualc+channelCpp1.cpp(65) : warning C4244: = : conversion from double to float, possibleloss of datap_ii=1
9、.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 datasumi+=p_jiij*log( phi_ijij)/ log(2.0);纠错:sumi+=(float)(p_jiij*log( phi_ijij)/log(2.0);F:visualc+channelCpp1.cpp(103) : warning C4244: = : conversion fr
10、om double to float, possibleloss of datasumi=pow(2.0,sumi);纠错:sumi=(float)(pow(2.0,sumi);F:visualc+channelCpp1.cpp(114) : warning C4244: = : conversion from double to float, possibleloss of dataC= log(p_j)/ log(2.0);纠错:C= (float)(log(p_j)/ log(2.0);4、表达式错误F:visualc+channelCpp1.cpp(86) : error C2065:
11、 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 typephi_ijij=p_ii* phi_jiij/p_j;纠错:phi_ijij=p_ii* p_jiij/p_j;F:visualc+channelCpp1.cpp(122) : error C20
12、65: fprint : undeclared identifierF:visualc+channelCpp1.cpp(122) : error C2018: unknown character 0 xa1F:visualc+channelCpp1.cpp(122) : error C2018: unknown character 0 xb1F:visualc+channelCpp1.cpp(122) : error C2065: The : undeclared identifierF:visualc+channelCpp1.cpp(122) : error C2146: syntax er
13、ror : missing ) before identifier iterationF:visualc+channelCpp1.cpp(122) : error C2017: illegal escape sequenceF:visualc+channelCpp1.cpp(122) : error C2017: illegal escape sequenceF:visualc+channelCpp1.cpp(122) : error C2018: unknown character 0 xa1F:visualc+channelCpp1.cpp(122) : error C2018: unkn
14、own character 0 xb1fprint(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 ;free(p_i);.纠错:free(p_i);5、没有返回值F:visualc+channelCpp1.cpp(149) : warning C4508: main : function should
15、return voidreturn type assumed、纠错:return 0;6.改进程序/*引入头文件*/ #include #include #include/*定义常量*/#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为新
16、宿符号个数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(stdi
17、n,%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;ir;i+)p_jii=(float *)calloc(s,sizeof(float);phi_ij=(float *)calloc(r,sizeof(float*);/*输入转移概率矩阵*/ for(i=0;ir;i+)a value;为判定./*为每个phi_ij分配大小为s的内存空间*/ phi_iji=(floa
18、t *)calloc(s,sizeof(float); printf(信道转移概率矩阵P.n);for(i=0;ir;i+)for(j=0;js;j+) fscanf(stdin,%f,&p_jiij);/*判定输入的转移概率矩阵是否正确*/ for(i=0;ir;i+)validate=0.0;for(j=0;j=0)/如果转移概率矩阵的概率和大于 法fprintf(stdout,invalid input data.n);exit(-1);/*显示开始计算.*/ fprintf(stdout,Starting.n);/*初始化p_i和phi_ij*/ for(i=0;ir;i+)/* p_
19、i为等概率,即概率为1/r*/ p_ii=(float)(1.0/(float)r);/*初始化信道容量c,迭代次数k和临时变量variable*/C=-MAXFLOAT;k=0;/*为sum分配大小为r的内存空间*/sum=(float *)calloc(r,sizeof(float);/*开始迭代计算*/dok+;/每进行一次迭代,迭代次数k加1 /*计算phi_ij(k)*/ for(j=0;js;j+)p_j=0.0; for(i=0;i=DELTA) for(i=0;ir;i+) phi_ijij=p_ii*p_jiij/p_j;else for(i=0;ir;i+) phi_iji
20、j=0.0;/*计算p_i(k+1)*/p_j=0.0; for(i=0;ir;i+) sumi=0.0;for(j=0;j=DELTA) sumi+=(float)(p_jiij*log( phi_ijij)/ log(2.0); 1,输入数据不合.sumi=(float)(pow(2.0,sumi);p_j+=sumi;for(i=0;iDELTA);free(sum);sum=NULL;./*显示结果*/fprintf(stdout,The iteration number is %d.nn,k);/迭代次数fprintf(stdout,The capacity of the chann
21、el is %.6f bit/symbol:nn,C);/容量fprintf(stdout,The best input probability distribution is :n);/ for(i=0;i=0;i-)free(phi_iji); 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.实验结果信道最佳信源分布.i F;visual c+ chiumeLDelLicXC|) )pl. eze*请输入信:蔚官疸礦科匕+itS! ! !必须大于等于*! ! +2 2信道转移慨卒距阵P-B. 1 G_2 0_3 8 .1StrMLiriy The iLtiML丄uni diuniLier 1客5 -The capacty of the channel is 1.428287 bit/symbol:The Jbest input pnobabilitdistribution is -0.4918010.508199Pt*ess anv key to camtinue八、实验结论信道
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工厂原料转让合同范例
- 托管运营合同范文
- 摄影设备租借合同范本
- 包装服务合同模板2024年
- Castleman病的诊断与治疗
- 2024年房屋建筑施工安全责任协议书范文
- 产品与企业文化广告创意合作协议
- 合伙权益出售合同样本
- 居间合同范本样本
- 高校校舍扩建协议范本
- 新版东方大学俄语1-第8课
- 【课件】第二单元第三节汉族民歌课件-2021-2022学年高中音乐人音版(2019)必修音乐鉴赏
- 急性肾损伤PPT通用课件
- 高标准基本农田建设监理工作总结
- 机电安装工程技术专业培训
- 7逆合成分析法与合成路线设计
- 工程材料构配件设备报审表
- 《Monsters 怪兽》中英对照歌词
- 华东地区SMT公司信息
- 隧道弃渣及弃渣场处理方案
- 隔代教育PPT课件
评论
0/150
提交评论