Okumura—Hata模型的计算机编程摘要:移动通信中,由于移动台在不停的运动,电波传播的实际情况是复杂多变的。为此,人们通过大量的实地测量和分析,总结归纳了多种经验模型。通常在一定情况下,使用这些模型对移动通信电波传播特性进行估算,都能获得比较准确的预测结果。Okumura—Hata模型是目前应用最广泛的模型,由此,通过计算机编程或仿真更能方便的得出基本传输损耗。关键词:移动通信Okumura—Hata编程传输损耗一、Okumura—Hata模型的介绍移动通信中电波传播的实际情况是复杂多变的。实践证明,任何试图使用一个或几个理论公式计算的结果,都将引入较大误差。甚至与实测结果相差甚远。为此,人们通过大量的实地测量和分析,总结归纳了多种经验模型。通常在一定情况下,使用这些模型对移动通信电波传播特性进行估算,都能获得比较准确的预测结果。能否准确预测基站信号的覆盖情况是移动通信网络规划的优劣所在,提高预测准确度的关键在于选择最能接近实测值的预测模型。目前应用较为广泛的是OM模型(Okumura模型),为了在系统设计时,使Okumura模型能采用计算机进行预测,Hata对Okumura模型的基本中值场强通过对其他预测模型的分析对比,并与实测数据的仿真比较,得出了0kumum—Hata预测模型更接近实测值的结论。移动通信系统中的无线电波是在不规则地形情况下进行传播的,在估算路径损耗时,应考虑特定地区的地形因素,预测模型的目标是预测特定点或特定区域(小区)的信号强度,但在方法复杂性和精确性方面差异很大,因此针对不同地形特点,要选择最适合于本地的预测模型。在传播预测模型中通常将地形划分为城区、郊区、开阔地和空间自由传播四种情况,城市郊区人口密度介于乡村和繁华市区,基站规划需同时考虑覆盖范围和用户容量两方面因素,随着移动用户的急剧增加,目前城市郊区基站的覆盖范围通常不足lkm,要选择预测模型,需将该地区具有代表性的测量数据代人模型,根据仿真结果以确定出可选用的模型。二、Okumura—Hata模型的原理Okumura/Hata模型是以准平滑地形的市区作基准,其余各区的影响均以校正因子的形式出现。Okumura/Hata模型的基本传输损耗模式为:Lb(市区)=69.55+26.16lgf-13.82loghb-α(hm)+(44.9-6.55lghb)lgdLbs=Lb(市区)-2[g(f/28)]2—5.4dBLb=Lb(市区)-4.78(gf)2+18.33Igf-40.94dB式中:Lb:市区准平滑地形电波传播损耗中值(dB)f:工作频率(MHz)hb:基站天线有效高度(m)hm:移动台天线有效高度(m)d:移动台与基站之间的距离(km)α(hm):移动台天线高度校正因子对于移动台天线高度校正因子由下式进行计算:(1)、对于中小城市(除大城市以外的其它所有城市〉α(hm)=(1.1lgf-0.7)hm一(15619f-0.8)(2)、对于大城市α(hm)=8.29(lg1.54hm)^-1.1(f≤300MHz)α(hm)=3.2(lg11.75hm)^-4.97(f≥300MHz)此公式适用范围为:150MHz≤f≤1920MHz30m≤hb≤200m,1m≤hm≤10m,1km≤d≤20km,准平滑地形。三、Okumura—Hata模型的计算机编程实现(一)、数据结构(1)、首先定义一个结构体数据类型,里面存放的数据元素有地区类型、城市类型、工作频率,基站天线有效高度,移动台天线高度,移动台天线高度校正因子,基本传输损耗(2)、然后定义几个功能模块的函数:voidInitOH();初始化界面voidRET();返回主程序intread();从OH读入数据到datavoidwrite();测试值写入文件OHvoidADD();添加测试值doubleAa(intcity,doublef,doubleHm);计算移动台天线高度校正因子doubleL(intarea,doublef,doubled,doubleHb,doubleAHm)计算Lb基本传输损耗voidLIST();查看测试值(3)、编写各功能模块之后,只需按要求输入基本的数据,然后即可得出移动台天线高度校正因子(二)、编程测试效果四、结束语0kumum—Hata模型的计算机编程实现,首先必须建立在对该模型有较好的理解上,但从根本上来说,用计算机编程来描述0kumum—Hata模型还是一种比较肤浅的学习。本次计算机编程总的来说,不存在很难的地方,只要明确各个模块的功能,依次编写出各个功能模块的函数,然后根据条件输入必需的数据,就能成功的输出基本的传输损耗。当然,以后,还要继续学习对0kumum—Hata模型计算机可视化仿真。参考文献:[1]章坚武《移动通信》(第二版)西安电子科技大学出版社[2]谭浩强《c语言程序设计》(第三版)清华大学出版社附件:编程原代码#includestdio.h#includestring.h#includestdlib.h#includemath.h#defineSIZE300#defineTRUE1/*--------------------OH_PRA用于存放7个影响Lb的参数以及Lb---------------------*/typedefstruct{intarea;//地区(市区-0.郊区-1.//开阔区-2)intcity;//城市(中.小城市-0,//大城市-1)doubled;//收发天线之间的距离,//kmdoublef;//工作频率,MHzdoubleHb;//基站天线有效高度,mdoubleHm;//移动台天线高度,mdoubleAHm;//移动台天线高度校//正因子,dBdoubleLb;//基本传输损耗,dB}OH_PRA;/*-------------------------------全局变量-------------------------------------*/OH_PRAdata[SIZE];//数据组最大容量300组intNumber=0;/*-------------------------------函数列表-------------------------------------*/voidInitOH();//初始化界面voidRET();//返回主程序intread();//从OH读入数据到data//数组voidwrite();//测试值写入文件OHvoidADD();//添加测试值doubleAa(intcity,doublef,doubleHm);//计算移动台天线高度//校正因子doubleL(intarea,doublef,doubled,doubleHb,doubleAHm);//计算Lb基本传输损耗//函数voidLIST();//查看测试值/*-------------------------------主程序---------------------------------------*/voidmain(){FILE*fp;inti=0;intchoose=0;charyesorno;if((fp=fopen(OH,rb))!=0){Number=read();//从文件读入数据,并返回读入数据的个数给Number,//若文件原来有两组数据,则Number为3}else{printf(\n=========提示:文件不存在,是否要创建一个?(y/n)\n);scanf(%c,&yesorno);if(yesorno=='y'){fp=fopen(OH,wb);fclose(fp);}else{exit(0);}}//创建新文件system(cls);while(TRUE)//始终显示主界面{InitOH();scanf(%d,&choose);system(cls);switch(choose){case1:ADD();RET();break;case2:LIST();RET();break;case0:return;default:break;}fflush(stdin);getchar();system(cls);}//return0;}voidInitOH(){printf(\t*************************************************************\n);printf(\t**\n);printf(\t*Okumura-Hata预测系统*\n);printf(\t**\n);printf(\t*[1]增加预测值[2]查看预测值*\n);printf(\t*[0]退出系统*\n);printf(\t*************************************************************\n);}voidRET(){printf(\t===按Enter键返回主菜单\n);}intread(){FILE*fp=NULL;inti=0;fp=fopen(OH,rb);while(fread(&data[i],sizeof(OH_PRA),1,fp))//ifanerroroccursorifthe//endofthefileisencountered//beforereachingcount.i++;fclose(fp);returni;}voidwrite(){FILE*fp;fp=fopen(OH,ab+);fwrite(&data[Number],sizeof(OH_PRA),1,fp);fclose(fp);}voidADD(){printf(ADDanewdataum:\n);printf(请输入地区类型(市区-0.郊区-1.开阔区-2):\n);scanf(%d,&data[Number].area);printf(请输入城市类型(中.小城市-0,大城市-1):\n);scanf(%d,&data[Number].city);printf(请输入收发天线之间的距离d(km):\n);scanf(%lf,&data[Number].d);printf(请输入工作频率f(MHz):\n);scanf(%lf,&data[Number].f);printf(请输入基站天线有效高度Hb(m):\n);scanf(%lf,&data[Number].Hb);printf(请输入移动台天线高度(m):\n);scanf(%lf,&data[Number].Hm);data[Number].AHm=Aa(data[Number].city,data[Number].f,data[Number].Hm);data[Number].Lb=L(data[Number].area,data[Number].f,data[Number].d,data[Number].Hb,data[Number].AHm);printf(thecontentsthatyouwantedtoaddis:\n);printf(areacity\td\tf\tHb\tHm\tAHM\tLb\n);printf(%4d%5d\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n,data[Number].area,data[Number].city,data[Number].d,data[Number].f,data[Number].Hb,data[Number].Hm,data[Number].AHm,data[Number].Lb);write();Number++;}doubleAa(intcity,doublef,doubleHm){doubleAHm=0;switch(city){case0:AHm=(1.1*log10(f)-0.7)*Hm-1.56*log10(f)+0.8;break;case1:if(f=300){A