# 紫外非视距光通信蒙特卡洛仿真模型
[![英文](https://img.shields.io/badge/lang-English-red)](README_en.md)
[![团队微信公众号](https://img.shields.io/badge/WeChat-团队公众号-brightgreen)](https://mp.weixin.qq.com/s/4cAfR8quCoGaSYzesFuFyg)
[![团队网页](https://img.shields.io/badge/Website-团队网页-blue)](https://teacher.bupt.edu.cn/yuanrenzhi/zh_CN/index.htm)
---
![项目logo](images/UV-MClogo.png)
## 简介
本项目包含两个主要的函数 `MCS` 和 `MCI`,用于模拟紫外非视距光通信的蒙特卡洛仿真模型。使用这些函数可以计算光子在不同散射阶次下的接收功率和信道脉冲响应。
## 文件说明
- `MCS.m` - 蒙特卡洛仿真模型
- `MCI.m` - 蒙特卡洛积分模型
- `startup.m` - 用于设置路径的初始化脚本
## 安装与运行
### 从 Gitee 拉取项目
1. 在本地计算机上安装 Git(如果尚未安装)。
2. 打开命令行或终端,并运行以下命令以克隆项目仓库:
```sh
git clone git@gitee.com:watcehr/montecarlo-matlab.git
```
3. 导航到项目目录:
```sh
cd montecarlo-matlab
```
### 在 MATLAB 中运行
1. 打开 MATLAB 并运行 `startup.m` 脚本以设置路径:
```matlab
% 获取项目根目录的路径
projectRoot = fileparts(mfilename('fullpath'));
% 构建 src 文件夹的路径
srcFolderPath = fullfile(projectRoot, 'src');
% 添加 src 文件夹到 MATLAB 路径中
addpath(srcFolderPath);
% 输出确认路径已添加
disp(['Added to path: ', srcFolderPath]);
```
2. 调用 `MCS` 或 `MCI` 函数进行仿真计算。
## 使用方法
### 输入参数说明
- `r` - 收发端距离
- `theta_T` - 发射机的俯仰角(定义为 z 轴和指向所形成的角度)
- `phi_T` - 发射机指向的方位角
- `beta_T` - 发射波束的开角
- `theta_R` - 接收机的俯仰角(定义为 z 轴和指向所形成的角度)
- `phi_R` - 接收机指向的方位角
- `beta_R` - 接收视场的开角
- `A_r` - 接收端接收视场的有效接收面积
- `k_a_par` - 散射过程中粒子的吸收系数
- `k_s_ray` - 散射过程中瑞利系数
- `k_s_mie` - 散射过程中的米尔系数
- `gamma`, `f`, `g` - 瑞利散射和米尔散射相散函数的相关参数
- `N` - 仿真过程中考虑的最高散射阶次
- `M` - 仿真采用的采样点数
- `t` - 接收时间相关参数构成的向量 `[Tj, T]`
- `Tj` - 最小接收时间间隔
- `T` - 最大接收时间
### 输出参数说明
- `P_tot` - 总接收功率
- `P_n` - 经过 n 阶散射后的接收功率
- `h_tot` - 总信道脉冲响应
- `h_n` - n 阶散射对应的信道脉冲响应
### 基本调用示例
```matlab
% 设置仿真固定参数
r = 100; % 收发端距离
phi_T = (360-90)*pi/180; % 发射端方位角
phi_R = pi/2; % 设置接收端的方位角为90°
theta_T = 45*pi/180; % 设置发射端仰角固定在45度
theta_R = 45*pi/180; % 设置接收端仰角固定在45度
% 设置通信系统器件参数设定以及所处环境大气环境参数
beta_T = 10/180*pi; % 设置发射端Beam的开角为10°
beta_R = 45/180*pi; % 设置接收端FOV的开角为30°
Ar = 1.77*10^-4; % 设置接收机的接受孔径面积大小,单位为m^2
kabs = 0.802*10^-3; % 设置散射过程散射吸收系数
kray = 0.266*10^-3; % 设置瑞利散射的衰减系数
kmie = 0.284*10^-3; % 设置米尔散射的衰减系数
gamma = 0.017;
f = 0.5;
g = 0.72;
% 蒙卡仿真内部参数设置
N = 3; % 设置蒙卡仿真过程中考虑的最高散射阶次为2
M = 1*10^6; % 设置仿真用的光子总个数
Tj = 0.1; % 设置每个最小的时间刻度为0.001us
T = 100; % 设置最大接收时间为100us
t = [Tj, T]; % 设置MCI计算接收时间相关参数
Receiving_time = 0:Tj:T-Tj; % 计算绘图用的时间向量us
% 调用仿真函数
[P_tot, P_n, h_tot, h_n] = MCS(r, pi/2-theta_T, phi_T, beta_T, pi/2-theta_R, phi_R, beta_R, Ar, kabs, kray, kmie, gamma, f, g, N, M, t);
[P_tot, P_n, h_tot, h_n] = MCI(r, pi/2-theta_T, phi_T, beta_T, pi/2-theta_R, phi_R, beta_R, Ar, kabs, kray, kmie, gamma, f, g, N, M, t);
```
## 注意事项
1. 接收端应放置在坐标系原点 (0, 0, 0); 发射端应放置在坐标 (0, r, 0)。
2. 当 `theta_T = 90°`,`phi_T = -90°` 时,发射端指向接收端; 当 `theta_R = 90°`,`phi_R = 90°` 时,接收端指向发射端。
3. MCI 执行时间和采样点数和散射阶数有关,`10^5` 为 `0.3s`,`10^6` 为 `3s` 依次类推。