基于ITU-R P.838-3建议书编写的雨衰模型

语言: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱电子的央铭丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值