语言:C++
功能:计算在信号传播过程中,由于降雨导致的传播损耗
输入参数:信号频率f、降雨率R、通过降雨层的有效路径长度d_rain
#include <iostream>
#include <cmath>
#include <math.h>
#include"RainFall_Loss.h"//在源文件中实现函数方法
using namespace std;
//f为频率,d_rain为通过降雨层的有效路径长度,R为降雨率
//Rr计算降雨衰减率的函数
double Rr(double f, double R) {
double tao_degree = 90, theta_degree = 50;//单位为°
double tao = tao_degree * M_PI / 180.0, theta = theta_degree * M_PI / 180.0;//将角度转化为弧度
double log_kH = 0, log_kV = 0;
double aH_single = 0, aV_single = 0;
//导入k_H等需要的参数
double m_kH = -0.18961, m_kV = -0.16398, m_aH = 0.67849, m_aV = -0.053739;
double c_kH = 0.71147, c_kV = 0.63297, c_aH = -1.95537, c_aV = 0.83433;
double aj_k[2][4] = { {-5.3398,-0.35351,-0.23789,-0.94158},{-3.80595,-3.44965,-0.39902,0.50167} };//先H后V
double bj_k[2][4] = { {-0.10008,1.26970,0.86036,0.64552},{0.56934,-0.22911,0.73042,1.07319} };
double cj_k[2][4] = { {1.13098,0.45400,0.15354,0.16817},{0.81061,0.51059,0.11899,0.27195} };
double aj_a[2][5] = { {-0.14318,0.29591,0.32177,-5.37610,16.1721},{-0.07771,0.56727,-0.20238,-48.2991,48.5833} };
double bj_a[2][5] = { {1.82442,0.77564,0.63773,-0.96230,-3.29980},{2.33840,0.95545,1.14520,0.791669,0.791459} };
double cj_a[2][5] = { {-0.55187,0.19822,0.13164,1.47828,3.43990},{-0.76284,0.54039,0.26809,0.116226,0.116479} };
//计算k_H
double sum_kH = 0;
for (int i = 0; i < 4; i++) {
//M_E表示自然对数的近似值
double e = 2.71828;
double y = (log10(f) - bj_k[0][i]) / cj_k[0][i];
double x = aj_k[0][i] * pow(e, -y * y);
sum_kH += x;
}
log_kH = sum_kH + m_kH * log10(f) + c_kH;
double k_H = pow(10,log_kH);
cout << "k_H:" << k_H << endl;
//计算k_V
double sum_kV = 0;
for (int i = 0; i < 4; i++) {
//M_E表示自然对数的近似值
double e = 2.71828;
double y = (log10(f) - bj_k[1][i]) / cj_k[1][i];
double x = aj_k[1][i] * pow(e, -y * y);
sum_kV += x;
}
log_kV = sum_kV + m_kV * log10(f) + c_kV;
double k_V = pow(10,log_kV);
cout << "k_V:" << k_V << endl;
//计算a_H
double sum_aH = 0;
for (int i = 0; i < 5; i++) {
//M_E表示自然对数的近似值
double e = 2.71828;
double y = (log10(f) - bj_a[0][i]) / cj_a[0][i];
double x = aj_a[0][i] * pow(e, -y * y);
sum_aH += x;
}
double a_H = sum_aH + m_aH * log10(f) + c_aH;
//计算a_V
cout << "a_H:" << a_H << endl;
double sum_aV = 0;
for (int i = 0; i < 5; i++) {
//M_E表示自然对数的近似值
double e = 2.71828;
double y = (log10(f) - bj_a[1][i]) / cj_a[1][i];
double x = aj_a[1][i] * pow(e, -y * y);
sum_aV += x;
}
double a_V = sum_aV + m_aV * log10(f) + c_aV;
cout << "a_V:" << a_V << endl;
//计算k和alpha
double k = (k_H + k_V + (k_H - k_V) * cos(2 * tao) * cos(theta) * cos(theta)) / 2;
double alpha = (k_H * a_H + k_V * a_V + (k_H * a_H - k_V * a_V) * cos(2 * tao) * cos(theta) * cos(theta)) / (2 * k);
//返回降雨衰减率(dB/km)
double Rr = k * pow(R, alpha);
return Rr;
}
double RainFall_Loss(double f, double d_rain, double R) {
double Ap = Rr(f, R) * d_rain;
return Ap;
}
附参考的ITU建议书下载链接:
https://download.youkuaiyun.com/download/m0_56846436/88601208