根据前面介绍的Okumura-Hata模型,进行初次C语言建模,完成输入各种参数值,计算得到传输损耗。
为了分析该模型中参数对传输损耗的影响,我们可以进行一些图像分析。这里是对传输损耗L与基站到接收端距离d以及载波频率f_c之间的关系进行了绘图,使用的是MATLAB软件绘图。
1. C语言实现计算
#include
#include //使用到 log
double ahre(int area,double f_c,double h_re); //函数声明
double cell(int area,double f_c);
int main()
{
int area; //地区
double f_c; //载波频率
double h_te; //基站天线有效高度
double h_re; //接收台天线有效高度
double d; //基站与接收台之间的水平距离
double L; //传输损耗
double a_h_re; //天线修正因子
double C_cell; //小区类型修正因子
printf("请输入载波频率 (单位MHz):\n");
scanf("%lf",&f_c);
printf("请输入基站有效高度 (单位m):\n");
scanf("%lf",&h_te);
printf("请输入移动台天线高度 (单位m):\n");
scanf("%lf",&h_re);
printf("请输入基站与移动台之间的水平距离 (单位Km):\n");
scanf("%lf",&d);
printf("请输入地形 (0表示中小城市,1表示大城市,2表示郊区,3表示农村):\n");
scanf("%d",&area);
a_h_re = ahre(area,f_c,h_re);
C_cell = cell(area,f_c);
L= 69.55+26.16*(log10(f_c))-13.82*(log10(h_te))-a_h_re+(44.9-6.55*(log10(h_te)))*(log10(d))+C_cell;
printf("此时传输损耗等于%f\n",L);
return 0;
}
double ahre(int area,double f_c,double h_re) //计算参数a_h_re
{
double a_h_re;
if(area==0)
a_h_re=(1.11*(log10(f_c))-0.7)*h_re-(1.56* log10(f_c)-0.8);
else if(f_c<=300)
a_h_re=8.29*(log10(1.54*h_re))*(log10(1.54*h_re))-1.1; //需要特别注意,平方项改为乘法
else
a_h_re=3.2*(log10(11.75*h_re))*(log10(11.75*h_re))-4.97;
return a_h_re;
}
double cell(int area,double f_c) //计算参数C_cell
{
double C_cell;
switch(area)
{
case 0:
C_cell=0;
case 1:
C_cell=0;
break;
case 2:
C_cell=-2*(log10(f_c/28))*(log10(f_c/28))-5.4;
break;
case 3:
C_cell=-4.78*(log10(f_c))*(log10(f_c))+18.33*(log10(f_c))-40.98;
break;
}
return C_cell;
}
设载波频率为900MHz,基站天线为30米,移动台天线为1米,基站与移动台之间的水平距离为20Km,计算不同地形下的传输损耗。
运行结果如下:
① 中小城市
② 大城市
③ 郊区
④ 农村
2. 绘图分析
对模型进行一些简化:
①将地区类型分为三类:城市、郊区、农村。由前面的计算可以知道,大型城市与中小型城市的传输损耗的值差距不是很大,我们这里a_h_re就以大城市的参数来进行城市传输损耗计算。
②之前在考虑区域传输损耗的时候还分为了频率大于300MHz与小于300MHz两种情况,我们作图时打算比较频率为700MHz与900MHz时传输损耗的不同,因此a_h_re就选择频率大于300MHz时的参数计算式带入计算。
我们可以得到:
城市对应的传输损耗计算方法为:
郊区对应的传输损耗计算方法为:
农村对应的传输损耗计算方法为:
这样,我们就可以直接使用上面的公式进行画图了,得到结果如下:
MATLAB绘图代码:
hold on
%频率为900MHz的情况下,传输损耗随传输距离的变化绘图
f_c=900;
h_te=30;
h_re=1;
d=1:1:20;
L_city= 69.55+26.16*(log10(f_c))-13.82*(log10(h_te))-(3.2*(log10(11.75*h_re))*(log10(11.75*h_re))-4.97)+(44.9-6.55*(log10(h_te)))*(log10(d));
L_suburb=69.55+26.16*(log10(f_c))-13.82*(log10(h_te))-(3.2*(log10(11.75*h_re))*(log10(11.75*h_re))-4.97)+(44.9-6.55*(log10(h_te)))*(log10(d))-2*(log10(f_c/28))*(log10(f_c/28))-5.4;
L_country=69.55+26.16*(log10(f_c))-13.82*(log10(h_te))-(3.2*(log10(11.75*h_re))*(log10(11.75*h_re))-4.97)+(44.9-6.55*(log10(h_te)))*(log10(d))-4.78*(log10(f_c))*(log10(f_c))+18.33*(log10(f_c))-40.98;
plot(d,L_city,'ko-',d,L_suburb,'ko-',d,L_country,'ko-');
%频率为700MHz的情况下,传输损耗随传输距离的变化绘图
f_c=700;
L_city= 69.55+26.16*(log10(f_c))-13.82*(log10(h_te))-(3.2*(log10(11.75*h_re))*(log10(11.75*h_re))-4.97)+(44.9-6.55*(log10(h_te)))*(log10(d));
L_suburb=69.55+26.16*(log10(f_c))-13.82*(log10(h_te))-(3.2*(log10(11.75*h_re))*(log10(11.75*h_re))-4.97)+(44.9-6.55*(log10(h_te)))*(log10(d))-2*(log10(f_c/28))*(log10(f_c/28))-5.4;
L_country=69.55+26.16*(log10(f_c))-13.82*(log10(h_te))-(3.2*(log10(11.75*h_re))*(log10(11.75*h_re))-4.97)+(44.9-6.55*(log10(h_te)))*(log10(d))-4.78*(log10(f_c))*(log10(f_c))+18.33*(log10(f_c))-40.98;
plot(d,L_city,'kx-',d,L_suburb,'kx-',d,L_country,'kx-');
%添加标题与横纵坐标
xlabel('基站与接收台的水平距离d(单位Km)');
ylabel('传输损耗L(单位dB)');
title('传输损耗L随距离d的变化曲线');
%添加文本框对曲线进行说明
annotation('textbox',[0.25,0.27,0.1,0.05],'LineStyle',':','String','农村');
annotation('textbox',[0.35,0.53,0.1,0.05]','LineStyle',':','String','郊区');
annotation('textbox',[0.45,0.80,0.1,0.05]','LineStyle',':','String','城市');
annotation('textbox',[0.7,0.2,0.15,0.1]','LineStyle','-','LineWidth',2,'String',strings);
strings={'o--900MHz','x--700MHz'};
hold off
%使用hold on与 hold off,可以将两个plot的图像都绘制出来,不会对前一个覆盖