⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 om-hata.cpp

📁 移动通信奥村模型计算信号衰落的C语言程序源代码
💻 CPP
字号:
#include <stdio.h>
#include <math.h>
//#include <string.h>

char CityType_Landform[4]; //城市类型选择、适用地形。定义为全局变量。
double frequency = 0;                 //频率
char c=NULL,m=NULL;

double City_Lb (double f,double hb,double hm,double d)//市区传播损耗中值函数,单位为dB
                                                 //f(MHz):工作频率,  hb(m):基站天线有效高度,
                                                 //hm(m):移动台天线高度, d(km):收发天线之间的距离
{     
	double Modi_Factor( double );//函数声明
	return 69.55+26.16*log10(f)-13.82*log10(hb)-Modi_Factor(hm)+( 44.9-6.55*log10(hb) )*log10(d);
}


double Suburb_Lb (double f,double hb,double hm,double d)//郊区传播损耗函数
{
	return City_Lb(f,hb,hm,d)-2*pow( log10(f/28) , 2)- 5.4 ;
}


double Width_Lb (double f,double hb,double hm,double d)//开阔去传播损耗函数
{
	return City_Lb(f,hb,hm,d)-4.78*pow( log10(f) , 2)-18.33*log10(f)-40.98;
}

double Modi_Factor (double hm )//移动台天线高度校正因子,单位(dB)
{
	
	if ('c'==CityType_Landform[0] )//&& frequency<300)   //大城市
	{
		if(frequency<300)
		{
			return 8.29*pow( log10(1.54*hm) , 2)-1.1 ; 
		}
		else
			return 3.2*pow( log10(11.75*hm) , 2)-4.97;
	}
	else 	
		return ( 1.1*log10(frequency)-0.7 )*hm-1.56*log10(frequency)+0.8;
	
}

void main ()
{	
	int i; 
	//char Landform;
	double hb=0,hm=0,d=0;
	double Value=0;
	char u=NULL,s=NULL,w=NULL;
	

	printf("应用说明:\n本函数的使用范围为:150MHz<=f<=1920MHz,可扩展到3000MHz,20m<=hb<=1000m,1m<=hm<=10                    m,1km<=d<=100km,准平坦地形。\n\n");
	printf("操作说明:输入的字母用“空格键”分开 ;回车键进入下一步操作!\n\n");
	printf("请输入城市类型:大城市输入c,中、小城市输入m 。\n");
	printf("请输入适用地形:市区输入u,郊区输入s,开阔区输入w 。\n\r");
	
label0:for(i=0;i<1;i++)
	   {
		   
label1:	gets(CityType_Landform) ; //scanf("%c%c",&City_Type,&Landform);
	
		if ( (CityType_Landform[0]=='c'||CityType_Landform[0]=='m') && (CityType_Landform[2]=='u'||CityType_Landform[2]=='s'||CityType_Landform[2]=='w') )
		{
			printf("请输入信号频率f(MHz)=");
label2:		scanf("%lf",&frequency);
			if(frequency>=150 && frequency<=1920 )//&& hb>=20&&hb<=1000 && hm>=1&&hm<=10 && d>=1&&d<=100 )
			{
				printf("请输入基站天线高度hm(m)=");
label3:			scanf("%lf",&hb);
				if(hb>=20 && hb<=1000)
				{
					printf("请输入移动台天线高度hb(m)=");
label4:				scanf("%lf",&hm);
					if(hm>=1 && hm<=10)
					{
						printf("请输入收、发天线之间距离d(km)=");
label5:					scanf("%lf",&d);
						if(d>=1 && d<=100)
						{
							if(CityType_Landform[0]=='c' && CityType_Landform[2]=='u' )
							{
								Value=City_Lb(frequency,hb,hm,d);
								printf("大城市市区的传播衰耗值Value=%.3lf (dB)\n",Value);
								if('\r')
								{
									goto label0;
								}
							}	
		
							if('c'==CityType_Landform[0] && 's'==CityType_Landform[2])
							{
								Value=Suburb_Lb(frequency,hb,hm,d);
								printf("大城市郊区的传播衰耗值Value=%.3lf (dB)\n",Value);
							}
							if('c'==CityType_Landform[0] && 'w'==CityType_Landform[2])
							{
								Value=Width_Lb(frequency,hb,hm,d);
								printf("大城市开阔区的传播衰耗值Value=%.3lf (dB)\n",Value);
							}



							if('m'==CityType_Landform[0] && 'u'==CityType_Landform[2])
							{
								Value=City_Lb(frequency,hb,hm,d);
								printf("中、小城市市区的传播衰耗值Value=%.3lf (dB)\n",Value);
							}
							if('m'==CityType_Landform[0] && 's'==CityType_Landform[2])
							{
								Value=Suburb_Lb(frequency,hb,hm,d);
								printf("中、小城市郊区的传播衰耗值Value=%.3lf (dB)\n",Value);
							}
							if('m'==CityType_Landform[0] && 'w'==CityType_Landform[2])
							{
								Value=Width_Lb(frequency,hb,hm,d);
								printf("中、小城市开阔区的传播衰耗值Value=%.3lf (dB)\n",Value);
							}
						
						}//收发距离if
						else
							printf("您输入的收、发天线距离不再适用范围,请仔细阅读“应用说明”并重新输入 !\n");
							goto label5;

					}//移动台天线高度if
					else
						printf("您输入的移动台天线高度不在适用范围,请仔细阅读“应用说明”并重新输入 !\n");
						goto label4;
				}//基站天线高度if
				else
					printf("您输入的基站天线高度不在适用范围,请仔细阅读“应用说明”并重新输入 !\n");
					goto label3;
			}//信号频率if
			else
				printf("您输入的信号频率不在适用范围,请仔细阅读“应用说明”并重新输入 !\n");
				goto label2;
		}//城市类型和适用地形if 
		else
			printf("您输入的城市类型和适用地形代码错误,请仔细阅读“操作说明”并重新输入 !\n");
			goto  label1;
	}
}//main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -