Okumura-Hata模型 传输损耗计算 传输距离对传输损耗的影响

根据前面介绍的Okumura-Hata模型,进行初次C语言建模,完成输入各种参数值,计算得到传输损耗。

为了分析该模型中参数对传输损耗的影响,我们可以进行一些图像分析。这里是对传输损耗L与基站到接收端距离d以及载波频率f_c之间的关系进行了绘图,使用的是MATLAB软件绘图。

1. C语言实现计算

    #include<stdio.h>
    #include<math.h>    //使用到 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的图像都绘制出来,不会对前一个覆盖

猜你喜欢

转载自blog.csdn.net/qq_33523925/article/details/88166938