已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖南大学大学信息科学与工程学院实验报告第9页 共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,()2:initialize:信源分布=1/r,相对误差门限,C=3:repeat4:5:6:C 7:until 8:output P*= ,C9:end procedure 5. 程序调试1、头文件引入出错f:visualc+channelcpp1.cpp(4) : fatal 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 identifierf: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) : error 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: expected 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、引用中文逗号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 : .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,”Starting.n”);纠错:fprintf(stdout,Starting.n);4、没有进行强制转换F:visualc+channelCpp1.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+=(float)(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= 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 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(122) : 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+channelCpp1.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 ; free(p_i);纠错: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;/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;ir;i+) p_jii=(float *)calloc(s,sizeof(float);phi_ij=(float *)calloc(r,sizeof(float*);/*输入转移概率矩阵*/for(i=0;ir;i+)/*为每个phi_ij分配大小为s的内存空间*/ phi_iji=(float *)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)/如果转移概率矩阵的概率和大于1,输入数据不合法 fprintf(stdout,invalid input data.n); exit(-1); /*显示开始计算.*/ fprintf(stdout,Starting.n); /*初始化 p_i 和 phi_ij*/ for(i=0;ir;i+) /* p_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); /*开始迭代计算*/ do k+;/每进行一次迭代,迭代次数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_ijij=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); 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 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); 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. 实验结果8、 实验结论 信道容量是指信道能无错误传送的最大信息率。对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 应收账款会计专业论文题目2000字
- 中文引用诗歌脚注格式
- 建筑工程风险管理论文
- 科技项目财务审计中的问题及对策
- 实习单位指导教师评语45句
- 《生物工程》毕业论文教学大纲
- 煤炭企业生产与管理环节的成本控制-成本管理论文-管理学论文
- 论文答辩问题怎么写
- 浅析《傲慢与偏见》中体现的女性主义
- 大学生创业的主要风险及对策分析
- 中国过敏性哮喘诊治指南2025年解读
- 2025云南楚雄州元谋县产业投资集团有限公司员工招聘公17人告笔试历年常考点试题专练附带答案详解试卷3套
- 2025智能美妆镜产品开发与市场需求调研报告
- 冬季防冻安全课件
- 河南相关课件
- 西昌古诗文品读智慧树知到期末考试答案2024年
- 管径与流量计算表
- 水上客运企业安全风险辨识分级管控指南
- 涉电镀工艺企业(园区)安全隐患排查表
- 心愿(任志萍词伍嘉冀曲、吴小平编合唱)合唱谱图片格式-合唱谱
- 大华网络摄像机检测报告DHIPCHFW12XYZM
评论
0/150
提交评论