修改了烟幕模型和dll导出函数接口,版本升级为 1.2.0

This commit is contained in:
Tian jianyong 2025-04-07 18:11:19 +08:00
parent 7aef2c7e05
commit 0b9917a724
19 changed files with 1102 additions and 278 deletions

View File

@ -54,10 +54,13 @@ Console.WriteLine($"激光透过率: {transmittance:F4}");
- `MillimeterWaveTransmittanceModel.cs`: 毫米波透过率模型
- `UVTransmittanceModel.cs`: 紫外线透过率模型
- `AtmosphericTurbulenceModel.cs`: 大气湍流模型
- `SmokeTransmittanceModel.cs`: 烟幕透过率模型
## 版本历史
- 1.0.0 (2024-10-13): 初始版本发布
- 1.1.0 (2025-01-07): 添加湍流模型
- 1.2.0 (2025-03-10): 添加烟幕模型
## 作者

View File

@ -0,0 +1,144 @@
# 大气湍流光传输模型设计文档
## 大气湍流光传输模型的原理总体描述
大气湍流是指大气中不规则的流动和涡旋运动,这种现象会导致光波在传播过程中发生折射、散射和衰减,从而影响光传输的质量和稳定性。大气湍流对光传输的影响主要体现在以下几个方面:
1. **折射率结构常数 (C²n)**
- 大气折射率结构常数是描述湍流强度的关键参数。它反映了大气中折射率的空间变化程度。C²n 越大,表示湍流越强,对光传输的影响也越显著。
2. **闪烁效应**
- 闪烁是指光强度的快速波动,主要由大气湍流引起。闪烁效应会导致接收到的光信号不稳定,影响通信质量。闪烁指数 (σ²I) 用于量化这种效应,其值越大,表示闪烁越严重。
3. **光束漂移**
- 光束漂移是指光束在传播过程中由于湍流的影响而发生的随机偏移。这种偏移会导致光束偏离目标,影响接收精度。光束漂移的大小与传输距离、湍流强度和传输高度有关。
4. **相干长度 (r₀)**
- 相干长度是指光波在大气中保持相干性的尺度。相干长度越小,表示湍流对光波相位的扰动越大,影响光传输的相干性。
5. **综合湍流效应**
- 综合湍流效应是对上述各个因素的综合评估。通过计算综合湍流效应,可以量化大气湍流对光传输的整体影响,帮助设计和优化光通信系统。
### 计算方法
大气湍流光传输模型通过一系列数学公式来描述湍流对光传输的影响。这些公式基于物理理论和经验模型,如 Hufnagel-Valley 模型和 Rytov 理论。通过输入环境参数(如传输距离、风速和高度),模型可以计算出折射率结构常数、闪烁指数、光束漂移等关键参数,从而评估湍流对光传输的影响。
## 1. 模型概述
### 1.1 设计目标
- 实现大气湍流对光传输影响的精确计算
- 提供完整的湍流效应评估系统
- 支持不同环境条件下的光传输性能预测
### 1.2 模型结构图
```mermaid
classDiagram
class AtmosphericTurbulenceModel {
+CalculateTurbulenceEffect()
+CalculateC2n()
+CalculateAngleOfArrival()
+CalculateIsoplanatismAngle()
-CalculateFriedParameter()
-CalculateScintillationIndex()
-CalculateBeamWander()
-CalculateCoherenceLength()
}
```
### 1.3 处理流程图
```mermaid
flowchart TD
A[输入参数] --> B[计算大气折射率结构常数 C2n]
B --> C[计算弗里德参数]
B --> D[计算闪烁指数]
B --> E[计算光束漂移]
C --> F[综合湍流效应计算]
D --> F
E --> F
F --> G[输出湍流效应]
```
## 2. 理论基础与计算模型
### 2.1 大气折射率结构常数 (C²n)
- **理论依据**:修改的 Hufnagel-Valley 模型
- **计算公式**
\[C_n^2(h) = A(\frac{v}{27})^2(h×10^{-5})^{10}e^{-h/1000} + 2.7×10^{-15}e^{-h/1500}\]
- **参数说明**
- h: 高度(米)
- v: 风速(米/秒)
- A: 湍流强度系数1.7×10⁻¹³
### 2.2 弗里德参数 (r₀)
- **理论依据**:大气相干性理论
- **计算公式**
\[r_0 = (0.423k^2C_n^2L)^{-3/5}\]
- **参数说明**
- k: 波数2π/λ)
- L: 传输距离
- C²n: 大气折射率结构常数
### 2.3 闪烁指数 (σ²I)
- **理论依据**Rytov 理论
- **计算公式**
\[\sigma_I^2 = 1.23C_n^2k^{7/6}L^{11/6}\]
- **参数说明**
- k: 波数
- L: 传输距离
- C²n: 大气折射率结构常数
### 2.4 光束漂移
- **理论依据**:湍流引起的光束偏移
- **计算公式**
\[\theta_{BW} = 2.87(C_n^2Lh^{5/3})^{1/3}\]
- **参数说明**
- h: 传输高度
- L: 传输距离
- C²n: 大气折射率结构常数
## 3. 综合效应评估
### 3.1 湍流效应计算
- **计算公式**
\[E_{turb} = e^{-\sigma_I^2}(1-e^{-r_0/\theta_{BW}})\]
- **缩放处理**
\[E_{final} = 1 - 0.8(1-E_{turb})\]
### 3.2 辅助参数计算
#### 到达角
- **计算公式**
\[\theta_{AA} = 2.91(C_n^2L/D^{1/3})^{0.6}\]
- **参数说明**
- D: 接收器口径
#### 等晕角
- **计算公式**
\[\theta_{iso} = 0.314(C_n^2k^2L)^{-3/5}\]
## 4. 使用建议
1. **输入参数范围**
- 传输距离:建议 100m - 10km
- 传输高度:建议 1m - 1000m
- 风速:建议 0 - 30m/s
2. **注意事项**
- 模型适用于水平传输路径
- 建议在计算前验证输入参数的合理性
- 结果解释时需考虑实际环境条件
## 5. 参数相关性分析
1. **距离相关性**
- 闪烁指数随距离增加最快11/6次方
- 弗里德参数随距离减小较慢(-3/5次方
2. **波长相关性**
- 通过波数k体现
- 短波长光束受湍流影响更大
3. **高度相关性**
- C²n随高度呈指数衰减
- 光束漂移与高度的5/3次方相关

View File

@ -0,0 +1,124 @@
# 红外线传输模型设计文档
## 综述
红外线传输模型用于模拟和计算红外线在大气中的传输特性特别是在不同天气条件下的透过率。该模型的主要作用是评估红外线在大气中的衰减程度以便在红外成像和通信中提供可靠的数据支持。红外线的主要透明窗口在3μm至5μm和8μm至12μm之间。
### 相关理论
模型基于光谱模型法结合Rayleigh散射、Mie散射和分子吸收理论计算红外线在大气中的传输特性。Rayleigh散射主要影响短波长红外线而Mie散射则与气溶胶的大小和浓度有关。分子吸收则考虑了水汽和CO2对红外线的吸收。
### 影响模型的环境参数
- **波长**红外线波长范围为3μm至12μm波长越短散射越强。
- **湿度**:影响水汽吸收,湿度越高,吸收越强。
- **气溶胶密度**影响Mie散射气溶胶浓度越高散射越强。
- **CO2浓度**影响分子吸收CO2浓度越高吸收越强。
### 使用场景和案例
红外线传输模型广泛应用于红外成像系统的设计和优化,帮助评估不同大气条件下的成像质量。此外,该模型还用于红外通信系统的设计,确保在不同环境条件下的通信稳定性。
## 1. 模型概述
### 1.1 设计目标
- 实现红外线在大气中的传输特性计算
- 考虑水汽和CO2吸收的影响
- 使用光谱模型法进行计算
### 1.2 模型结构图
```mermaid
classDiagram
class IRTransmittanceModel {
+CalculateTransmittance()
-CalculateBandAttenuation()
-CalculateRayleighScattering()
-CalculateMieScattering()
-CalculateMolecularAbsorption()
-CalculateWeatherEffect()
}
```
### 1.3 处理流程图
```mermaid
flowchart TD
A[输入参数] --> B[光谱分段]
B --> C[计算每个波段的衰减]
C --> D[考虑天气条件影响]
D --> E[输出最终透过率]
```
## 2. 理论基础与计算模型
### 2.1 光谱模型法
- **理论依据**:光谱模型法用于计算不同波长的衰减
- **计算公式**
- Rayleigh散射\[0.02735 \times \text{wavelength}^{-4.08}\]
- **参数说明**
- wavelength: 波长(微米),影响散射强度,波长越短,散射越强。
- Mie散射\[3.91 / \text{Visibility} \times \text{AerosolDensity}\]
- **参数说明**
- Visibility: 能见度(公里),影响散射强度,能见度越低,散射越强。
- AerosolDensity: 气溶胶密度(相对单位),影响散射强度,密度越高,散射越强。
- 分子吸收:\[\text{水汽和CO}_2\text{吸收系数}\]
- **参数说明**
- 水汽和CO₂吸收系数描述水汽和二氧化碳对红外线的吸收能力浓度越高吸收越强。
### 2.2 天气影响
- **计算公式**
- 雨、雪、雾、沙尘的影响通过经验公式计算
### 天气条件影响
红外线传输模型考虑了不同天气条件对透过率的影响,包括雨、雪、雾和沙尘等。每种天气条件通过特定的经验公式计算其对红外线传输的衰减效应。例如,雨和雪会增加大气中的水滴和冰晶,导致更强的散射和吸收;雾和沙尘则通过增加气溶胶浓度来影响透过率。模型通过调整这些参数,能够在不同天气条件下提供准确的红外线透过率评估。
### 2.3 总体计算公式
红外线透过率的总体计算公式如下:
\[T_{IR} = \exp(-\alpha_{total} \times d) \times W_{weather}\]
其中:
- $T_{IR}$红外线透过率范围0-1
- $\alpha_{total}$:总衰减系数,由各波段衰减系数加权和计算得到
- $d$:传输距离(千米)
- $W_{weather}$:天气影响因子
总衰减系数的计算公式为:
\[\alpha_{total} = \sum_{i=1}^{n} \alpha(\lambda_i) \times w(\lambda_i)\]
其中:
- $\alpha(\lambda_i)$第i个波段的衰减系数
- $w(\lambda_i)$第i个波段的权重
- $\lambda_i$第i个波段的波长
- $n$:波段总数
波段衰减系数由三部分组成:
\[\alpha(\lambda) = \alpha_{Rayleigh}(\lambda) \times 4.0 + \alpha_{Mie}(\lambda) \times 5.0 + \alpha_{absorption}(\lambda) \times 4.0\]
其中:
- $\alpha_{Rayleigh}(\lambda)$:瑞利散射系数
- $\alpha_{Mie}(\lambda)$:米氏散射系数
- $\alpha_{absorption}(\lambda)$分子吸收系数包括水汽和CO2吸收
天气影响因子的计算公式为:
\[W_{weather} = \exp(-2.0 \times (R_{rain} + R_{snow} + R_{fog} + R_{dust}))\]
其中:
- $R_{rain}$:雨的衰减效应
- $R_{snow}$:雪的衰减效应
- $R_{fog}$:雾的衰减效应
- $R_{dust}$:沙尘的衰减效应
## 3. 使用建议
1. **输入参数范围**
- 传输距离:建议 100m - 10km
- 波长范围3μm - 12μm
2. **注意事项**
- 模型适用于水平传输路径
- 建议在计算前验证输入参数的合理性

View File

@ -0,0 +1,116 @@
# 激光传输模型设计文档
## 综述
激光传输模型用于模拟和计算激光在大气中的传输特性特别是在不同天气条件和湍流条件下的透过率。该模型的主要作用是评估激光在大气中的衰减和偏移以便在激光通信和测距中提供可靠的数据支持。激光的主要透明窗口通常在1.06μm。
### 相关理论
模型基于大气湍流模型结合Rayleigh散射、Mie散射和分子吸收理论计算激光在大气中的传输特性。湍流效应是影响激光传输的关键因素主要通过折射率结构常数和闪烁指数来量化。
### 影响模型的环境参数
- **波长**激光波长常用的通常为1.06μm和 10.6μm波长越短散射越强。
- **风速**:影响湍流强度,风速越大,湍流越强。
- **湍流强度**通过折射率结构常数C²n来量化C²n越大湍流越强。
- **能见度**影响Mie散射能见度越低散射越强。
### 使用场景和案例
激光传输模型广泛应用于激光通信系统的设计和优化,帮助评估不同大气条件下的通信质量。此外,该模型还用于激光测距系统,确保在不同环境条件下的测距精度。
## 1. 模型概述
### 1.1 设计目标
- 实现激光在大气中的传输特性计算
- 考虑湍流效应和天气影响
- 提供激光透过率的精确评估
### 1.2 模型结构图
```mermaid
classDiagram
class LaserTransmittanceModel {
+CalculateTransmittance()
+CalculateTransmittanceWithTurbulence()
-CalculateAttenuationFactor()
-CalculateRainAttenuation()
-CalculateSnowAttenuation()
-CalculateFogAttenuation()
-ApplyTurbulenceEffect()
}
```
### 1.3 处理流程图
```mermaid
flowchart TD
A[输入参数] --> B[计算基础透过率]
B --> C[计算天气条件影响]
C --> D[应用湍流效应]
D --> E[输出最终透过率]
```
## 2. 理论基础与计算模型
### 2.1 湍流效应
- **理论依据**:使用大气湍流模型评估湍流对激光传输的影响
- **计算公式**
- 湍流效应:\[E_{turb} = e^{-\sigma_I^2}(1-e^{-r_0/\theta_{BW}})\]
- **参数说明**
- \(\sigma_I^2\): 闪烁指数,描述湍流引起的光强起伏。
- \(r_0\): 弗里德参数,描述大气相干性尺度。
- \(\theta_{BW}\): 光束漂移,描述光束在湍流中的偏移。
### 2.2 天气影响
- **计算公式**
- 雨、雪、雾、沙尘的影响通过经验公式计算
- **参数说明**
- 雨、雪、雾、沙尘的浓度和分布,影响激光的散射和吸收。
### 2.3 总体计算公式
激光透过率的总体计算公式如下:
\[T_{laser} = (T_{base})^{F_{att} \times d} \times \exp(-(A_{rain} + A_{snow} + A_{fog} + A_{dust}))\]
其中:
- $T_{laser}$激光透过率范围0-1
- $T_{base}$:标准透过率(常数值)
- $F_{att}$:总衰减因子
- $d$:传输距离(米)
- $A_{rain}$:雨的衰减效应
- $A_{snow}$:雪的衰减效应
- $A_{fog}$:雾的衰减效应
- $A_{dust}$:沙尘的衰减效应
总衰减因子的计算公式为:
\[F_{att} = F_{molecular} \times F_{aerosol} \times F_{visibility} \times 1.2\]
其中:
- $F_{molecular}$:分子散射因子
- $F_{aerosol}$:气溶胶散射因子
- $F_{visibility}$:能见度因子
- 1.2:增强因子
当考虑湍流效应时,透过率的计算公式为:
\[T_{turb} = T_{laser} \times (0.7 + 0.3 \times E_{turb})\]
其中:
- $T_{turb}$:考虑湍流效应的透过率
- $T_{laser}$:基础激光透过率
- $E_{turb}$:湍流效应
### 天气条件影响
激光传输模型考虑了不同天气条件对透过率的影响,包括雨、雪、雾和沙尘等。每种天气条件通过特定的经验公式计算其对激光传输的衰减效应。例如,雨和雪会增加大气中的水滴和冰晶,导致更强的散射和吸收;雾和沙尘则通过增加气溶胶浓度来影响透过率。模型通过调整这些参数,能够在不同天气条件下提供准确的激光透过率评估。
## 3. 使用建议
1. **输入参数范围**
- 传输距离:建议 100m - 10km
- 波长1.06μm
2. **注意事项**
- 模型适用于水平传输路径
- 建议在计算前验证输入参数的合理性

View File

@ -0,0 +1,120 @@
# 毫米波传输模型设计文档
## 综述
毫米波传输模型用于模拟和计算毫米波在大气中的传输特性,特别是在不同天气条件下的透过率。该模型的主要作用是评估毫米波在大气中的衰减程度,以便在毫米波雷达和通信中提供可靠的数据支持。
### 相关理论
模型基于修正的瑞利散射公式,结合气溶胶散射和分子吸收理论,计算毫米波在大气中的传输特性。水汽和氧气吸收是影响毫米波传输的关键因素,特别是在高湿度条件下。
### 影响模型的环境参数
- **波长**毫米波的常用波长通常为3mm和 8mm 两个波段,波长越短,散射越强。
- **湿度**:影响水汽吸收,湿度越高,吸收越强。
- **气溶胶密度**:影响气溶胶散射,气溶胶浓度越高,散射越强。
- **氧气浓度**:影响分子吸收,氧气浓度越高,吸收越强。
### 使用场景和案例
毫米波传输模型广泛应用于毫米波雷达系统的设计和优化,帮助评估不同大气条件下的探测能力。此外,该模型还用于毫米波通信系统,确保在不同环境条件下的通信稳定性。
## 1. 模型概述
### 1.1 设计目标
- 实现毫米波在大气中的传输特性计算
- 考虑水汽和氧气吸收的影响
- 提供毫米波透过率的精确评估
### 1.2 模型结构图
```mermaid
classDiagram
class MillimeterWaveTransmittanceModel {
+CalculateTransmittance()
-CalculateMolecularScattering()
-CalculateAerosolScattering()
-CalculateWaterVaporAttenuation()
-CalculateOxygenAttenuation()
-CalculateMillimeterWaveFogAttenuation()
}
```
### 1.3 处理流程图
```mermaid
flowchart TD
A[输入参数] --> B[计算分子和气溶胶散射]
B --> C[计算水汽和氧气吸收]
C --> D[计算天气条件影响]
D --> E[输出最终透过率]
```
## 2. 理论基础与计算模型
### 2.1 分子和气溶胶散射
- **理论依据**:使用修正的瑞利散射公式
- **计算公式**
- 分子散射:\[0.0015 \times \text{wavelength}^{-4}\]
- **参数说明**
- wavelength: 波长(毫米),影响散射强度,波长越短,散射越强。
- 气溶胶散射:\[0.0434 \times \text{AerosolDensity}\]
- **参数说明**
- AerosolDensity: 气溶胶密度(相对单位),影响散射强度,密度越高,散射越强。
### 2.2 吸收效应
- **计算公式**
- 水汽和氧气的吸收通过经验公式计算
- **参数说明**
- 水汽和氧气的浓度,影响毫米波的吸收强度,浓度越高,吸收越强。
### 天气条件影响
毫米波传输模型考虑了不同天气条件对透过率的影响,包括雨、雪、雾和沙尘等。每种天气条件通过特定的经验公式计算其对毫米波传输的衰减效应。例如,雨和雪会增加大气中的水滴和冰晶,导致更强的散射和吸收;雾和沙尘则通过增加气溶胶浓度来影响透过率。模型通过调整这些参数,能够在不同天气条件下提供准确的毫米波透过率评估。
### 2.3 总体计算公式
毫米波透过率的总体计算公式如下:
\[T_{mm} = \exp(-A_{total})\]
其中:
- $T_{mm}$毫米波透过率范围0-1
- $A_{total}$:总衰减系数
总衰减系数的计算公式为:
\[A_{total} = (A_{molecular} + A_{aerosol} + A_{water} + A_{oxygen}) \times d + A_{rain} + A_{snow} + A_{fog}\]
其中:
- $A_{molecular}$:分子散射系数
- $A_{aerosol}$:气溶胶散射系数
- $A_{water}$:水汽吸收系数
- $A_{oxygen}$:氧气吸收系数
- $d$:传输距离(米)
- $A_{rain}$:雨的衰减效应
- $A_{snow}$:雪的衰减效应
- $A_{fog}$:雾的衰减效应
分子散射系数的计算公式为:
\[A_{molecular} = 0.0015 \times \frac{P}{1013.25} \times \frac{288.15}{T} \times (\frac{\lambda}{3.0})^{-4}\]
气溶胶散射系数的计算公式为:
\[A_{aerosol} = 0.0434 \times \frac{\rho_{aerosol}}{\rho_{standard}} \times (\frac{\lambda}{3.0})^{-1.2}\]
其中:
- $P$大气压力hPa
- $T$温度K
- $\lambda$毫米波波长mm
- $\rho_{aerosol}$:气溶胶密度
- $\rho_{standard}$:标准气溶胶密度
## 3. 使用建议
1. **输入参数范围**
- 传输距离:建议 100m - 10km
- 波长3.19mm
2. **注意事项**
- 模型适用于水平传输路径
- 建议在计算前验证输入参数的合理性

View File

@ -0,0 +1,48 @@
# 烟幕衰减系数设计文档
## 1. 概述
本文档描述了烟幕对不同波段电磁波的衰减特性,包括波长范围、典型衰减系数、体积衰减系数和主要影响因素。这些信息将用于实现烟幕透过率的计算。
## 2. 烟幕衰减系数参考表
| 波段 | 波长范围 | 典型衰减系数MEC | 对应体积衰减系数(示例浓度下) | 主要影响因素 |
|------|----------|---------------------|--------------------------------|--------------|
| 紫外光 | 0.20.4 µm | 0.53.0 m²/g | 100500 m⁻¹高浓度烟幕 | 碳颗粒吸收、气溶胶散射 |
| 可见光 | 0.40.7 µm | 1.010 m²/g | 1001000 m⁻¹ | Mie散射主导颗粒粒径接近波长 |
| 近红外 | 0.71.5 µm | 0.55 m²/g | 50500 m⁻¹ | 碳烟吸收、水滴散射 |
| 中波红外 | 35 µm | 0.052 m²/g | 5200 m⁻¹柴油烟幕 | 碳颗粒吸收峰如3.4 μm附近混合散射 |
| 长波红外 | 814 µm | 0.020.5 m²/g | 250 m⁻¹ | 有机气溶胶吸收912 μm |
| 太赫兹波 | 30300 µm | 0.0050.1 m²/g | 0.510 m⁻¹低浓度石墨烟幕 | 金属颗粒吸收、尺度远小于波长 |
| 微波 | 1 mm30 cm | ~0.001 m²/g | <0.1 m¹干燥烟幕 | 水汽吸收24/60 GHz金属散射波动 |
## 3. 实现方案
### 3.1 烟幕衰减系数的确定
根据上述表格,我们可以确定不同波段电磁波的烟幕衰减系数。在实现中,我们可以根据波长范围选择相应的衰减系数。对于不在表格中的波长,可以使用插值或默认值。
### 3.2 烟幕透过率的计算
烟幕透过率的计算可以使用Beer-Lambert定律
\[T = \exp(-\alpha \times \rho \times L)\]
其中:
- \(T\) 是透过率
- \(\alpha\) 是烟幕衰减系数m²/g
- \(\rho\) 是烟幕浓度g/m³
- \(L\) 是烟幕厚度m
在实现中,我们需要考虑以下因素:
1. **波长**:不同波长的电磁波在烟幕中的衰减系数不同,需要根据波长选择相应的衰减系数。
2. **烟幕浓度**:烟幕浓度越高,衰减越强。
3. **烟幕厚度**:烟幕厚度越大,衰减越强。
## 4. 注意事项
1. 上述实现是基于表格中的典型值,实际应用中可能需要根据具体的烟幕类型和条件进行调整。
2. 烟幕的衰减系数可能会因温度、湿度、风速等因素而变化,这些因素可以在实际应用中考虑。
3. 对于特定波长的电磁波,可能需要更精确的衰减系数,可以通过实验测量得到。
4. 在实际应用中,可能需要考虑烟幕的动态变化,如烟幕的扩散、消散等。

View File

@ -0,0 +1,119 @@
# 紫外线传输模型设计文档
## 综述
紫外线传输模型用于模拟和计算紫外线在大气中的传输特性特别是在不同天气条件下的透过率。该模型的主要作用是评估紫外线在大气中的衰减程度以便在环境监测和紫外线通信中提供可靠的数据支持。紫外线的主要透明窗口在0.2μm至0.4μm之间。
### 相关理论
模型基于光谱模型法结合Rayleigh散射、Mie散射和分子吸收理论计算紫外线在大气中的传输特性。Rayleigh散射主要影响短波长紫外线而Mie散射则与气溶胶的大小和浓度有关。分子吸收则考虑了臭氧层对紫外线的吸收。
### 影响模型的环境参数
- **波长**紫外线波长范围为0.2μm至0.4μm波长越短散射越强。
- **能见度**影响Mie散射的强度能见度越低散射越强。
- **气溶胶密度**影响Mie散射气溶胶浓度越高散射越强。
- **臭氧浓度**:影响分子吸收,臭氧浓度越高,吸收越强。
### 使用场景和案例
紫外线传输模型广泛应用于环境监测,帮助评估臭氧层的变化对地表紫外线辐射的影响。此外,该模型还用于紫外线通信系统的设计和优化,确保在不同大气条件下的通信质量。
## 1. 模型概述
### 1.1 设计目标
- 实现紫外线在大气中的传输特性计算
- 考虑不同天气条件下的透过率
- 使用光谱模型法进行计算
### 1.2 模型结构图
```mermaid
classDiagram
class UVTransmittanceModel {
+CalculateTransmittance()
-CalculateBandAttenuation()
-CalculateRayleighScattering()
-CalculateMieScattering()
-CalculateMolecularAbsorption()
-CalculateWeatherEffect()
}
```
### 1.3 处理流程图
```mermaid
flowchart TD
A[输入参数] --> B[光谱分段]
B --> C[计算每个波段的衰减]
C --> D[考虑天气条件影响]
D --> E[输出最终透过率]
```
## 2. 理论基础与计算模型
### 2.1 光谱模型法
- **理论依据**:光谱模型法用于计算不同波长的衰减
- **计算公式**
- Rayleigh散射\[0.008735 \times \text{wavelength}^{-4.08}\]
- **参数说明**
- wavelength: 波长(微米),影响散射强度,波长越短,散射越强。
- Mie散射\[3.91 / \text{Visibility} \times \text{AerosolDensity}\]
- **参数说明**
- Visibility: 能见度(公里),影响散射强度,能见度越低,散射越强。
- AerosolDensity: 气溶胶密度(相对单位),影响散射强度,密度越高,散射越强。
- 分子吸收:\[\text{O}_2\text{和}\text{O}_3\text{吸收系数}\]
- **参数说明**
- O₂和O₃吸收系数描述氧气和臭氧对紫外线的吸收能力浓度越高吸收越强。
### 2.2 天气影响
- **计算公式**
- 雨、雪、雾、沙尘的影响通过经验公式计算
### 天气条件影响
紫外线传输模型考虑了不同天气条件对透过率的影响,包括雨、雪、雾和沙尘等。每种天气条件通过特定的经验公式计算其对紫外线传输的衰减效应。例如,雨和雪会增加大气中的水滴和冰晶,导致更强的散射和吸收;雾和沙尘则通过增加气溶胶浓度来影响透过率。模型通过调整这些参数,能够在不同天气条件下提供准确的紫外线透过率评估。
### 2.3 总体计算公式
紫外线透过率的总体计算公式如下:
\[T_{UV} = \exp(-\alpha_{total} \times d) \times W_{weather}\]
其中:
- $T_{UV}$紫外线透过率范围0-1
- $\alpha_{total}$:总衰减系数,由各波段衰减系数加权和计算得到
- $d$:传输距离(千米)
- $W_{weather}$:天气影响因子
总衰减系数的计算公式为:
\[\alpha_{total} = \sum_{i=1}^{n} \alpha(\lambda_i) \times w(\lambda_i)\]
其中:
- $\alpha(\lambda_i)$第i个波段的衰减系数
- $w(\lambda_i)$第i个波段的权重
- $\lambda_i$第i个波段的波长
- $n$:波段总数
波段衰减系数由三部分组成:
\[\alpha(\lambda) = \alpha_{Rayleigh}(\lambda) + \alpha_{Mie}(\lambda) + \alpha_{absorption}(\lambda)\]
天气影响因子的计算公式为:
\[W_{weather} = \exp(-(R_{rain} + R_{snow} + R_{fog} + R_{dust}))\]
其中:
- $R_{rain}$:雨的衰减效应
- $R_{snow}$:雪的衰减效应
- $R_{fog}$:雾的衰减效应
- $R_{dust}$:沙尘的衰减效应
## 3. 使用建议
1. **输入参数范围**
- 传输距离:建议 100m - 10km
- 波长范围0.2μm - 0.4μm
2. **注意事项**
- 模型适用于水平传输路径
- 建议在计算前验证输入参数的合理性

Binary file not shown.

View File

@ -1,7 +1,7 @@
#!/bin/bash
# 版本号
VERSION="1.0.0"
VERSION="1.2.0"
PACKAGE_NAME="AirTransmissionLibrary-${VERSION}"
# 创建临时目录和发布目录

View File

@ -4,6 +4,16 @@
<name>AirTransmission</name>
</assembly>
<members>
<member name="T:AirTransmission.WeatherParameters">
<summary>
天气参数结构体,用于封装天气相关的参数
</summary>
</member>
<member name="T:AirTransmission.RadiationType">
<summary>
辐射类型枚举,用于指定不同类型的电磁波
</summary>
</member>
<member name="T:AirTransmission.AtmosphericTransmittanceCalculator">
<summary>
大气透过率计算器,提供各种电磁波在大气中传输的透过率计算方法
@ -25,36 +35,48 @@
<param name="distance">传输距离(米)</param>
<returns>大气透过率</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcLaserWithSmoke(AirTransmission.WeatherCondition,System.Double,System.Double,System.Double)">
<summary>
计算激光在有烟雾条件下的大气透过率
</summary>
<param name="weather">天气条件</param>
<param name="distance">传输距离(米)</param>
<param name="smokeConcentration">烟雾浓度</param>
<param name="smokeThickness">烟雾厚度(米)</param>
<returns>大气透过率</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcIR(AirTransmission.WeatherCondition,System.Double,System.Double,System.Double)">
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcIR(AirTransmission.WeatherCondition,System.Double)">
<summary>
计算红外线在给定条件下的大气透过率
</summary>
<param name="weather">天气条件</param>
<param name="distance">传输距离(米)</param>
<param name="smokeConcentration">烟雾浓度</param>
<param name="smokeThickness">烟雾厚度(米)</param>
<returns>大气透过率</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcMillimeterWave(AirTransmission.WeatherCondition,System.Double,System.Double,System.Double)">
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcMillimeterWave(AirTransmission.WeatherCondition,System.Double)">
<summary>
计算毫米波在给定条件下的大气透过率
</summary>
<param name="weather">天气条件</param>
<param name="distance">传输距离(米)</param>
<param name="smokeConcentration">烟雾浓度</param>
<param name="smokeThickness">烟雾厚度(米)</param>
<returns>大气透过率</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcUV(AirTransmission.WeatherCondition,System.Double)">
<summary>
计算紫外线在给定天气条件和距离下的大气透过率
</summary>
<param name="weather">天气条件</param>
<param name="distance">传输距离(米)</param>
<returns>大气透过率</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcTurbulenceEffect(AirTransmission.WeatherCondition,System.Double,System.Double)">
<summary>
计算湍流效应对激光透过率的影响
</summary>
<param name="weather">天气条件</param>
<param name="distance">传输距离(米)</param>
<param name="height">传输高度(米)</param>
<returns>大气透过率</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateSmokeScreenTransmittance(System.Double,System.Double,System.Double)">
<summary>
计算烟幕对电磁波的透过率
</summary>
<param name="wavelength">波长(微米)</param>
<param name="smokeConcentration">烟幕浓度g/m³</param>
<param name="smokeThickness">烟幕厚度(米)</param>
<returns>烟幕透过率0到1之间的值</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateReceivedRadiation(System.Double,System.Double,System.Double,System.Double,System.Double,System.Double)">
<summary>
计算双程传输后接收到的辐射功率
@ -76,39 +98,34 @@
<param name="receiverDistance">接收器距离(米)</param>
<returns>接收到的辐射功率W/Sr</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcUV(AirTransmission.WeatherCondition,System.Double)">
<summary>
计算紫外线在给定天气条件和距离下的大气透过率
</summary>
<param name="weather">天气条件</param>
<param name="distance">传输距离(米)</param>
<returns>大气透过率</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalcTurbulenceEffect(AirTransmission.WeatherCondition,System.Double)">
<summary>
计算湍流效应对激光透过率的影响
</summary>
<param name="weather">天气条件</param>
<param name="distance">传输距离(米)</param>
<returns>大气透过率</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateSmokeScreenTransmittance(System.Double,System.Double)">
<summary>
计算烟幕对电磁波的透过率
</summary>
<param name="smokeConcentration">烟幕浓度g/m³</param>
<param name="smokeThickness">烟幕厚度(米)</param>
<returns>烟幕透过率0到1之间的值</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateTransmittanceExport(System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Int32)">
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateTransmittanceExport(System.Int32,System.Double,System.Double,AirTransmission.WeatherParameters)">
<summary>
导出函数:计算大气透过率
</summary>
<param name="radiationType">辐射类型0:激光, 1:红外, 2:紫外, 3:毫米波)</param>
<param name="wavelength">波长(微米)</param>
<param name="distance">传输距离(米)</param>
<param name="parameters">天气参数</param>
<returns>透过率0到1之间的值</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateAtmosphericTurbulenceExport(System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Int32)">
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateAtmosphericTurbulenceExport(System.Double,System.Double,AirTransmission.WeatherParameters,System.Double)">
<summary>
导出函数:计算大气湍流影响
</summary>
<param name="wavelength">波长(微米)</param>
<param name="distance">传输距离(米)</param>
<param name="parameters">天气参数</param>
<param name="height">传输高度(米)</param>
<returns>湍流效应0到1之间的值1表示无影响0表示完全衰减</returns>
</member>
<member name="M:AirTransmission.AtmosphericTransmittanceCalculator.CalculateSmokeScreenTransmittanceExport(System.Double,System.Double,System.Double)">
<summary>
导出函数:计算烟幕透过率
</summary>
<param name="wavelength">波长(微米)</param>
<param name="smokeConcentration">烟幕浓度g/m³</param>
<param name="smokeThickness">烟幕厚度(米)</param>
<returns>烟幕透过率0到1之间的值</returns>
</member>
<member name="T:AirTransmission.AtmosphericTurbulenceModel">
<summary>
@ -130,14 +147,13 @@
基于1.06微米波长常用的Nd:YAG激光器波长计算k = 2π/λ
</remarks>
</member>
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateTurbulenceEffect(System.Double,System.Double,System.Double,System.Double)">
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateTurbulenceEffect(AirTransmission.WeatherCondition,System.Double,System.Double)">
<summary>
计算大气湍流对光传输的综合影响
</summary>
<param name="distance">传输距离(米)</param>
<param name="height">传输高度(米)</param>
<param name="windSpeed">风速(米/秒)</param>
<param name="C2n">大气折射率结构常数</param>
<param name="weather">天气条件</param>
<returns>湍流效应0到1之间的值1表示无影响0表示完全衰减</returns>
</member>
<member name="M:AirTransmission.AtmosphericTurbulenceModel.CalculateC2n(System.Double,System.Double)">
@ -360,16 +376,6 @@
- 雾和沙尘的影响
</remarks>
</member>
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateTransmittanceWithTurbulence(System.Double)">
<summary>
计算考虑湍流效应的激光透过率
</summary>
<param name="distance">传输距离,单位:米</param>
<returns>考虑湍流效应后的透过率范围0-1</returns>
<remarks>
使用大气湍流模型计算湍流对激光传输的影响
</remarks>
</member>
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateRainKCoefficient(System.Double)">
<summary>
计算雨对激光的衰减系数K
@ -423,23 +429,6 @@
<param name="pathLength">传输路径长度(米)</param>
<returns>雾对激光的衰减</returns>
</member>
<member name="M:AirTransmission.LaserTransmittanceModel.CalculateTransmittanceWithSmoke(System.Double,System.Double,System.Double)">
<summary>
计算考虑烟雾的激光透过率
</summary>
<param name="distance">传输距离(米)</param>
<param name="smokeConcentration">烟雾浓度</param>
<param name="smokeThickness">烟雾厚度(米)</param>
<returns>考虑烟雾的激光透过率</returns>
</member>
<member name="M:AirTransmission.LaserTransmittanceModel.ApplyTurbulenceEffect(System.Double,System.Double)">
<summary>
应用湍流效应到透过率
</summary>
<param name="transmittance">原始透过率</param>
<param name="distance">传输距离(米)</param>
<returns>考虑湍流效应后的透过率</returns>
</member>
<member name="T:AirTransmission.MillimeterWaveTransmittanceModel">
<summary>
毫米波透过率计算模型,用于计算毫米波在大气中的传输特性
@ -450,14 +439,19 @@
- 考虑大气分子散射和吸收
- 处理水汽和氧气的吸收
- 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
波长说明:
虽然毫米波通常用毫米表示波长,但为了与其他电磁波计算保持一致,
本模型中统一使用微米μm作为波长单位。
例如3.19mm = 3190μm
</remarks>
</member>
<member name="F:AirTransmission.MillimeterWaveTransmittanceModel.MILLIMETER_WAVE_WAVELENGTH">
<summary>
毫米波波长常量,单位:毫米
毫米波波长常量,单位:
</summary>
<remarks>
默认使用3.19mm波长对应94GHz频率
3.19mm = 3190μm对应94GHz频率
该频率是毫米波雷达常用工作频率
</remarks>
</member>
@ -516,6 +510,27 @@
<param name="pathLength">传输路径长度(米)</param>
<returns>雾衰减</returns>
</member>
<member name="T:AirTransmission.SmokeScreenTransmittanceModel">
<summary>
烟幕透过率模型,用于计算不同波长电磁波在烟幕中的透过率
</summary>
</member>
<member name="M:AirTransmission.SmokeScreenTransmittanceModel.CalculateTransmittance(System.Double,System.Double,System.Double)">
<summary>
计算烟幕对电磁波的透过率
</summary>
<param name="wavelength">波长(微米)</param>
<param name="smokeConcentration">烟幕浓度g/m³</param>
<param name="smokeThickness">烟幕厚度(米)</param>
<returns>烟幕透过率0到1之间的值</returns>
</member>
<member name="M:AirTransmission.SmokeScreenTransmittanceModel.GetSmokeAttenuationCoefficient(System.Double)">
<summary>
根据波长获取烟幕衰减系数
</summary>
<param name="wavelength">波长(微米)</param>
<returns>烟幕衰减系数m²/g</returns>
</member>
<member name="T:AirTransmission.TransmittanceModel">
<summary>
大气透过率计算的基础模型类,提供了各种大气条件下的透过率计算方法
@ -526,6 +541,12 @@
- 气溶胶散射和吸收
- 降水(雨、雪)衰减
- 沙尘和雾的衰减
所有波长相关计算统一使用微米μm作为单位
- 激光1.06μm
- 红外3-12μm
- 紫外0.2-0.4μm
- 毫米波3190μm3.19mm对应94GHz
</remarks>
</member>
<member name="M:AirTransmission.TransmittanceModel.#ctor(AirTransmission.WeatherCondition)">
@ -538,6 +559,12 @@
- 气溶胶散射和吸收
- 降水(雨、雪)衰减
- 沙尘和雾的衰减
所有波长相关计算统一使用微米μm作为单位
- 激光1.06μm
- 红外3-12μm
- 紫外0.2-0.4μm
- 毫米波3190μm3.19mm对应94GHz
</remarks>
</member>
<member name="F:AirTransmission.TransmittanceModel.STANDARD_TRANSMITTANCE">
@ -644,28 +671,28 @@
<summary>
计算雨对电磁波的衰减系数K
</summary>
<param name="wavelength">波长(微米或毫米</param>
<param name="wavelength">波长(微米)</param>
<returns>雨衰减系数K</returns>
</member>
<member name="M:AirTransmission.TransmittanceModel.CalculateRainAlphaCoefficient(System.Double)">
<summary>
计算雨对电磁波的衰减系数α
</summary>
<param name="wavelength">波长(微米或毫米</param>
<param name="wavelength">波长(微米)</param>
<returns>雨衰减系数α</returns>
</member>
<member name="M:AirTransmission.TransmittanceModel.CalculateSnowKCoefficient(System.Double)">
<summary>
计算雪对电磁波的衰减系数K
</summary>
<param name="wavelength">波长(微米或毫米</param>
<param name="wavelength">波长(微米)</param>
<returns>雪衰减系数K</returns>
</member>
<member name="M:AirTransmission.TransmittanceModel.CalculateSnowAlphaCoefficient(System.Double)">
<summary>
计算雪对电磁波的衰减系数α
</summary>
<param name="wavelength">波长(微米或毫米</param>
<param name="wavelength">波长(微米)</param>
<returns>雪衰减系数α</returns>
</member>
<member name="M:AirTransmission.TransmittanceModel.CalculateRainAttenuation(System.Double,System.Double)">
@ -673,7 +700,7 @@
计算雨对电磁波的衰减
</summary>
<param name="pathLength">传输路径长度(米)</param>
<param name="wavelength">波长(微米或毫米</param>
<param name="wavelength">波长(微米)</param>
<returns>雨衰减dB</returns>
</member>
<member name="M:AirTransmission.TransmittanceModel.CalculateSnowAttenuation(System.Double,System.Double)">
@ -681,7 +708,7 @@
计算雪对电磁波的衰减
</summary>
<param name="pathLength">传输路径长度(米)</param>
<param name="wavelength">波长(微米或毫米</param>
<param name="wavelength">波长(微米)</param>
<returns>雪衰减dB</returns>
</member>
<member name="M:AirTransmission.TransmittanceModel.CalculateDustAttenuation(System.Double)">
@ -765,8 +792,11 @@
<param name="visibility">能见度(公里)</param>
<param name="precipitation">降水量(毫米/小时),可选</param>
<param name="co2Concentration">二氧化碳浓度ppm默认415ppm</param>
<param name="pressure">大气压力kPa默认101.325kPa</param>
<param name="windSpeed">风速m/s默认0m/s</param>
<param name="windDirection">风向0-360度默认0度</param>
</member>
<member name="M:AirTransmission.WeatherCondition.#ctor(AirTransmission.WeatherType,System.Double,System.Double,System.Double,System.Nullable{System.Double},System.Double)">
<member name="M:AirTransmission.WeatherCondition.#ctor(AirTransmission.WeatherType,System.Double,System.Double,System.Double,System.Nullable{System.Double},System.Double,System.Double,System.Double,System.Double)">
<summary>
天气条件类,用于描述大气传输计算所需的天气参数
</summary>
@ -785,6 +815,9 @@
<param name="visibility">能见度(公里)</param>
<param name="precipitation">降水量(毫米/小时),可选</param>
<param name="co2Concentration">二氧化碳浓度ppm默认415ppm</param>
<param name="pressure">大气压力kPa默认101.325kPa</param>
<param name="windSpeed">风速m/s默认0m/s</param>
<param name="windDirection">风向0-360度默认0度</param>
</member>
<member name="P:AirTransmission.WeatherCondition.Type">
<summary>
@ -816,6 +849,21 @@
二氧化碳浓度ppm
</summary>
</member>
<member name="P:AirTransmission.WeatherCondition.Pressure">
<summary>
大气压力kPa
</summary>
</member>
<member name="P:AirTransmission.WeatherCondition.WindSpeed">
<summary>
风速m/s
</summary>
</member>
<member name="P:AirTransmission.WeatherCondition.WindDirection">
<summary>
风向0-360度, 0度为北, 顺时针)
</summary>
</member>
<member name="M:AirTransmission.WeatherCondition.PrintWeatherInfo(AirTransmission.WeatherCondition)">
<summary>
打印天气信息
@ -823,7 +871,7 @@
<param name="weather">天气条件对象</param>
<remarks>
输出格式:
天气类型: [类型], 温度: [温度]°C, 相对湿度: [湿度]%, 能见度: [能见度]km, 降水量: [降水量]mm/h
天气类型: [类型], 温度: [温度]°C, 相对湿度: [湿度]%, 能见度: [能见度]km, 降水量: [降水量]mm/h, 大气压力: [大气压力]kPa, 风速: [风速]m/s, 风向: [风向]度
</remarks>
</member>
<member name="T:AirTransmission.WeatherType">

View File

@ -5,11 +5,40 @@
*/
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using RGiesecke.DllExport;
namespace AirTransmission
{
/// <summary>
/// 天气参数结构体,用于封装天气相关的参数
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct WeatherParameters
{
public double Temperature;
public double RelativeHumidity;
public double Pressure;
public double Visibility;
public double Precipitation;
public double CO2Concentration;
public double WindSpeed;
public double WindDirection;
public int WeatherType;
}
/// <summary>
/// 辐射类型枚举,用于指定不同类型的电磁波
/// </summary>
public enum RadiationType
{
Laser = 0,
Infrared = 1,
Ultraviolet = 2,
MillimeterWave = 3
}
/// <summary>
/// 大气透过率计算器,提供各种电磁波在大气中传输的透过率计算方法
/// </summary>
@ -35,34 +64,16 @@ namespace AirTransmission
return model.CalculateTransmittance(distance);
}
/// <summary>
/// 计算激光在有烟雾条件下的大气透过率
/// </summary>
/// <param name="weather">天气条件</param>
/// <param name="distance">传输距离(米)</param>
/// <param name="smokeConcentration">烟雾浓度</param>
/// <param name="smokeThickness">烟雾厚度(米)</param>
/// <returns>大气透过率</returns>
public static double CalcLaserWithSmoke(WeatherCondition weather, double distance, double smokeConcentration = 0, double smokeThickness = 0)
{
var model = new LaserTransmittanceModel(weather);
return model.CalculateTransmittanceWithSmoke(distance, smokeConcentration, smokeThickness);
}
/// <summary>
/// 计算红外线在给定条件下的大气透过率
/// </summary>
/// <param name="weather">天气条件</param>
/// <param name="distance">传输距离(米)</param>
/// <param name="smokeConcentration">烟雾浓度</param>
/// <param name="smokeThickness">烟雾厚度(米)</param>
/// <returns>大气透过率</returns>
public static double CalcIR(WeatherCondition weather, double distance, double smokeConcentration = 0, double smokeThickness = 0)
public static double CalcIR(WeatherCondition weather, double distance)
{
var model = new IRTransmittanceModel(weather);
double transmittance = model.CalculateTransmittance(distance);
double smokeTransmittance = CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
return transmittance * smokeTransmittance;
return model.CalculateTransmittance(distance);
}
/// <summary>
@ -70,17 +81,49 @@ namespace AirTransmission
/// </summary>
/// <param name="weather">天气条件</param>
/// <param name="distance">传输距离(米)</param>
/// <param name="smokeConcentration">烟雾浓度</param>
/// <param name="smokeThickness">烟雾厚度(米)</param>
/// <returns>大气透过率</returns>
public static double CalcMillimeterWave(WeatherCondition weather, double distance, double smokeConcentration = 0, double smokeThickness = 0)
public static double CalcMillimeterWave(WeatherCondition weather, double distance)
{
var model = new MillimeterWaveTransmittanceModel(weather);
double transmittance = model.CalculateTransmittance(distance);
double smokeTransmittance = CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
return transmittance * smokeTransmittance;
return model.CalculateTransmittance(distance);
}
/// <summary>
/// 计算紫外线在给定天气条件和距离下的大气透过率
/// </summary>
/// <param name="weather">天气条件</param>
/// <param name="distance">传输距离(米)</param>
/// <returns>大气透过率</returns>
public static double CalcUV(WeatherCondition weather, double distance)
{
var model = new UVTransmittanceModel(weather);
return model.CalculateTransmittance(distance);
}
/// <summary>
/// 计算湍流效应对激光透过率的影响
/// </summary>
/// <param name="weather">天气条件</param>
/// <param name="distance">传输距离(米)</param>
/// <param name="height">传输高度(米)</param>
/// <returns>大气透过率</returns>
public static double CalcTurbulenceEffect(WeatherCondition weather, double distance, double height)
{
return AtmosphericTurbulenceModel.CalculateTurbulenceEffect(weather, distance, height);
}
/// <summary>
/// 计算烟幕对电磁波的透过率
/// </summary>
/// <param name="wavelength">波长(微米)</param>
/// <param name="smokeConcentration">烟幕浓度g/m³</param>
/// <param name="smokeThickness">烟幕厚度(米)</param>
/// <returns>烟幕透过率0到1之间的值</returns>
public static double CalculateSmokeScreenTransmittance(double wavelength, double smokeConcentration, double smokeThickness)
{
return SmokeScreenTransmittanceModel.CalculateTransmittance(wavelength, smokeConcentration, smokeThickness);
}
/// <summary>
/// 计算双程传输后接收到的辐射功率
/// </summary>
@ -108,15 +151,15 @@ namespace AirTransmission
double receivedEnergy = reflectedPower * transmittance * solidAngle * (pulseWidth * 1e-9);
// 输出计算过程中的关键参数
Console.WriteLine($"Laser energy: {laserEnergy:F2} J");
Console.WriteLine($"Pulse width: {pulseWidth} ns");
Console.WriteLine($"Peak power: {peakPower:E2} W");
Console.WriteLine($"Target distance: {targetDistance} km");
Console.WriteLine($"Target reflected power: {reflectedPower:E2} W");
Console.WriteLine($"Receiver distance: {receiverDistance} km");
Console.WriteLine($"Double path transmittance: {transmittance:F4}");
Console.WriteLine($"Received energy: {receivedEnergy:E2} J");
Console.WriteLine($"Received power: {receivedEnergy / (pulseWidth * 1e-9):E2} W");
Debug.WriteLine($"Laser energy: {laserEnergy:F2} J");
Debug.WriteLine($"Pulse width: {pulseWidth} ns");
Debug.WriteLine($"Peak power: {peakPower:E2} W");
Debug.WriteLine($"Target distance: {targetDistance} km");
Debug.WriteLine($"Target reflected power: {reflectedPower:E2} W");
Debug.WriteLine($"Receiver distance: {receiverDistance} km");
Debug.WriteLine($"Double path transmittance: {transmittance:F4}");
Debug.WriteLine($"Received energy: {receivedEnergy:E2} J");
Debug.WriteLine($"Received power: {receivedEnergy / (pulseWidth * 1e-9):E2} W");
return receivedEnergy / (pulseWidth * 1e-9); // 返回接收功率W
}
@ -137,107 +180,90 @@ namespace AirTransmission
double receivedPower = targetRadiation * transmittance * solidAngle;
// 输出计算过程中的关键参数
Console.WriteLine($"Target radiation: {targetRadiation} W/Sr");
Console.WriteLine($"Receiver distance: {receiverDistance} m");
Console.WriteLine($"Single path transmittance: {transmittance:F4}");
Console.WriteLine($"Received power: {receivedPower:E2} W/Sr");
Debug.WriteLine($"Target radiation: {targetRadiation} W/Sr");
Debug.WriteLine($"Receiver distance: {receiverDistance} m");
Debug.WriteLine($"Single path transmittance: {transmittance:F4}");
Debug.WriteLine($"Received power: {receivedPower:E2} W/Sr");
return receivedPower;
}
/// <summary>
/// 计算紫外线在给定天气条件和距离下的大气透过率
/// </summary>
/// <param name="weather">天气条件</param>
/// <param name="distance">传输距离(米)</param>
/// <returns>大气透过率</returns>
public static double CalcUV(WeatherCondition weather, double distance)
{
var model = new UVTransmittanceModel(weather);
return model.CalculateTransmittance(distance);
}
/// <summary>
/// 计算湍流效应对激光透过率的影响
/// </summary>
/// <param name="weather">天气条件</param>
/// <param name="distance">传输距离(米)</param>
/// <returns>大气透过率</returns>
public static double CalcTurbulenceEffect(WeatherCondition weather, double distance)
{
var model = new LaserTransmittanceModel(weather);
return model.CalculateTransmittanceWithTurbulence(distance);
}
/// <summary>
/// 计算烟幕对电磁波的透过率
/// </summary>
/// <param name="smokeConcentration">烟幕浓度g/m³</param>
/// <param name="smokeThickness">烟幕厚度(米)</param>
/// <returns>烟幕透过率0到1之间的值</returns>
public static double CalculateSmokeScreenTransmittance(double smokeConcentration, double smokeThickness)
{
if (smokeConcentration <= 0 || smokeThickness <= 0)
return 1; // 如果没有烟幕返回1无衰减
// 烟幕衰减系数(假设值,需要根据实际烟幕特性调整)
double smokeAttenuationCoefficient = 0.5;
// 使用Beer-Lambert定律计算透过率
double transmittance = Math.Exp(-smokeAttenuationCoefficient * smokeConcentration * smokeThickness);
Console.WriteLine($"烟幕透过率计算:");
Console.WriteLine($"烟幕浓度: {smokeConcentration:F2} g/m³");
Console.WriteLine($"烟幕厚度: {smokeThickness:F2} m");
Console.WriteLine($"烟幕透过率: {transmittance:F4}");
return transmittance;
}
/// <summary>
/// 导出函数:计算大气透过率
/// </summary>
/// <param name="radiationType">辐射类型0:激光, 1:红外, 2:紫外, 3:毫米波)</param>
/// <param name="wavelength">波长(微米)</param>
/// <param name="distance">传输距离(米)</param>
/// <param name="parameters">天气参数</param>
/// <returns>透过率0到1之间的值</returns>
[DllExport("CalculateTransmittance", CallingConvention = CallingConvention.Cdecl)]
public static double CalculateTransmittanceExport(
double wavelength,
double distance,
double temperature,
double relativeHumidity,
double pressure,
double visibility,
int weatherType)
public static double CalculateTransmittanceExport(int radiationType, double wavelength, double distance, WeatherParameters parameters)
{
var weather = new WeatherCondition(
type: (WeatherType)weatherType,
temperature: temperature,
relativeHumidity: relativeHumidity,
visibility: visibility
type: (WeatherType)parameters.WeatherType,
temperature: parameters.Temperature,
relativeHumidity: parameters.RelativeHumidity,
visibility: parameters.Visibility,
precipitation: parameters.Precipitation,
co2Concentration: parameters.CO2Concentration,
pressure: parameters.Pressure,
windSpeed: parameters.WindSpeed,
windDirection: parameters.WindDirection
);
return CalcLaser(weather, distance);
// 根据辐射类型选择不同的计算方法
switch (radiationType)
{
case (int)RadiationType.Laser:
return CalcLaser(weather, distance);
case (int)RadiationType.Infrared:
return CalcIR(weather, distance);
case (int)RadiationType.Ultraviolet:
return CalcUV(weather, distance);
case (int)RadiationType.MillimeterWave:
return CalcMillimeterWave(weather, distance);
default:
return CalcLaser(weather, distance); // 默认使用激光
}
}
/// <summary>
/// 导出函数:计算大气湍流影响
/// </summary>
/// <param name="wavelength">波长(微米)</param>
/// <param name="distance">传输距离(米)</param>
/// <param name="parameters">天气参数</param>
/// <param name="height">传输高度(米)</param>
/// <returns>湍流效应0到1之间的值1表示无影响0表示完全衰减</returns>
[DllExport("CalculateAtmosphericTurbulence", CallingConvention = CallingConvention.Cdecl)]
public static double CalculateAtmosphericTurbulenceExport(
double wavelength,
double distance,
double temperature,
double relativeHumidity,
double pressure,
double visibility,
int weatherType)
public static double CalculateAtmosphericTurbulenceExport(double wavelength, double distance, WeatherParameters parameters, double height)
{
var weather = new WeatherCondition(
type: (WeatherType)weatherType,
temperature: temperature,
relativeHumidity: relativeHumidity,
visibility: visibility
type: (WeatherType)parameters.WeatherType,
temperature: parameters.Temperature,
relativeHumidity: parameters.RelativeHumidity,
visibility: parameters.Visibility,
precipitation: parameters.Precipitation,
co2Concentration: parameters.CO2Concentration,
pressure: parameters.Pressure,
windSpeed: parameters.WindSpeed,
windDirection: parameters.WindDirection
);
return CalcTurbulenceEffect(weather, distance);
return CalcTurbulenceEffect(weather, distance, height);
}
/// <summary>
/// 导出函数:计算烟幕透过率
/// </summary>
/// <param name="wavelength">波长(微米)</param>
/// <param name="smokeConcentration">烟幕浓度g/m³</param>
/// <param name="smokeThickness">烟幕厚度(米)</param>
/// <returns>烟幕透过率0到1之间的值</returns>
[DllExport("CalculateSmokeScreenTransmittance", CallingConvention = CallingConvention.Cdecl)]
public static double CalculateSmokeScreenTransmittanceExport(double wavelength, double smokeConcentration, double smokeThickness)
{
return SmokeScreenTransmittanceModel.CalculateTransmittance(wavelength, smokeConcentration, smokeThickness);
}
}
}

View File

@ -31,11 +31,11 @@ namespace AirTransmission
/// </summary>
/// <param name="distance">传输距离(米)</param>
/// <param name="height">传输高度(米)</param>
/// <param name="windSpeed">风速(米/秒)</param>
/// <param name="C2n">大气折射率结构常数</param>
/// <param name="weather">天气条件</param>
/// <returns>湍流效应0到1之间的值1表示无影响0表示完全衰减</returns>
public static double CalculateTurbulenceEffect(double distance, double height, double windSpeed, double C2n)
public static double CalculateTurbulenceEffect(WeatherCondition weather, double distance, double height)
{
double C2n = CalculateC2n(height, weather.WindSpeed);
double r0 = CalculateFriedParameter(C2n, distance);
double sigmaI2 = CalculateScintillationIndex(C2n, k, distance);
double beamWander = CalculateBeamWander(C2n, distance, height);

View File

@ -55,20 +55,6 @@ namespace AirTransmission
return transmittance;
}
/// <summary>
/// 计算考虑湍流效应的激光透过率
/// </summary>
/// <param name="distance">传输距离,单位:米</param>
/// <returns>考虑湍流效应后的透过率范围0-1</returns>
/// <remarks>
/// 使用大气湍流模型计算湍流对激光传输的影响
/// </remarks>
public double CalculateTransmittanceWithTurbulence(double distance)
{
double transmittance = CalculateTransmittance(distance);
return ApplyTurbulenceEffect(transmittance, distance);
}
/// <summary>
/// 计算雨对激光的衰减系数K
/// </summary>
@ -192,37 +178,5 @@ namespace AirTransmission
double beta = 3.91 / Visibility * Math.Pow(LASER_WAVELENGTH / 0.55, -q);
return beta * pathLength * 1.2; // 从0.5改为1.2,增加雾的影响
}
/// <summary>
/// 计算考虑烟雾的激光透过率
/// </summary>
/// <param name="distance">传输距离(米)</param>
/// <param name="smokeConcentration">烟雾浓度</param>
/// <param name="smokeThickness">烟雾厚度(米)</param>
/// <returns>考虑烟雾的激光透过率</returns>
public double CalculateTransmittanceWithSmoke(double distance, double smokeConcentration, double smokeThickness)
{
double transmittance = CalculateTransmittance(distance);
double smokeTransmittance = AtmosphericTransmittanceCalculator.CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
return transmittance * smokeTransmittance;
}
/// <summary>
/// 应用湍流效应到透过率
/// </summary>
/// <param name="transmittance">原始透过率</param>
/// <param name="distance">传输距离(米)</param>
/// <returns>考虑湍流效应后的透过率</returns>
protected static double ApplyTurbulenceEffect(double transmittance, double distance)
{
double height = 10; // 假设光束平均高度为10米
double windSpeed = 5; // 假设风速为5 m/s
double C2n = AtmosphericTurbulenceModel.CalculateC2n(height, windSpeed);
double turbulenceEffect = AtmosphericTurbulenceModel.CalculateTurbulenceEffect(distance * 1000, height, windSpeed, C2n);
// 修改湍流效应的应用方式
return transmittance * (0.7 + 0.3 * turbulenceEffect);
}
}
}

View File

@ -2,6 +2,7 @@
*
* 1.0.0 (2024-10-13):
* 1.1.0 (2024-10-18):
* 1.2.0 (2024-04-07): 使
*/
namespace AirTransmission
@ -15,17 +16,22 @@ namespace AirTransmission
/// - 考虑大气分子散射和吸收
/// - 处理水汽和氧气的吸收
/// - 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应
///
/// 波长说明:
/// 虽然毫米波通常用毫米表示波长,但为了与其他电磁波计算保持一致,
/// 本模型中统一使用微米μm作为波长单位。
/// 例如3.19mm = 3190μm
/// </remarks>
internal class MillimeterWaveTransmittanceModel : TransmittanceModel
{
/// <summary>
/// 毫米波波长常量,单位:毫米
/// 毫米波波长常量,单位:
/// </summary>
/// <remarks>
/// 默认使用3.19mm波长对应94GHz频率
/// 3.19mm = 3190μm对应94GHz频率
/// 该频率是毫米波雷达常用工作频率
/// </remarks>
private const double MILLIMETER_WAVE_WAVELENGTH = 3.19; // 毫对应94 GHz
private const double MILLIMETER_WAVE_WAVELENGTH = 3190.0; // 微对应94 GHz
public MillimeterWaveTransmittanceModel(WeatherCondition weather) : base(weather) { }

View File

@ -0,0 +1,90 @@
using System;
using System.Diagnostics;
namespace AirTransmission
{
/// <summary>
/// 烟幕透过率模型,用于计算不同波长电磁波在烟幕中的透过率
/// </summary>
public class SmokeScreenTransmittanceModel
{
/// <summary>
/// 计算烟幕对电磁波的透过率
/// </summary>
/// <param name="wavelength">波长(微米)</param>
/// <param name="smokeConcentration">烟幕浓度g/m³</param>
/// <param name="smokeThickness">烟幕厚度(米)</param>
/// <returns>烟幕透过率0到1之间的值</returns>
public static double CalculateTransmittance(double wavelength, double smokeConcentration, double smokeThickness)
{
if (smokeConcentration <= 0 || smokeThickness <= 0)
return 1; // 如果没有烟幕返回1无衰减
// 根据波长获取烟幕衰减系数
double smokeAttenuationCoefficient = GetSmokeAttenuationCoefficient(wavelength);
// 使用Beer-Lambert定律计算透过率
double transmittance = Math.Exp(-smokeAttenuationCoefficient * smokeConcentration * smokeThickness);
Debug.WriteLine($"烟幕透过率计算:");
Debug.WriteLine($"波长: {wavelength:F2} μm");
Debug.WriteLine($"烟幕衰减系数: {smokeAttenuationCoefficient:F2} m²/g");
Debug.WriteLine($"烟幕浓度: {smokeConcentration:F2} g/m³");
Debug.WriteLine($"烟幕厚度: {smokeThickness:F2} m");
Debug.WriteLine($"烟幕透过率: {transmittance:F4}");
return transmittance;
}
/// <summary>
/// 根据波长获取烟幕衰减系数
/// </summary>
/// <param name="wavelength">波长(微米)</param>
/// <returns>烟幕衰减系数m²/g</returns>
private static double GetSmokeAttenuationCoefficient(double wavelength)
{
// 根据设计文档中的参考表确定衰减系数
if (wavelength >= 0.2 && wavelength < 0.4)
{
// 紫外光: 0.20.4 µm, 0.53.0 m²/g
return 1.75; // 取范围中间值
}
else if (wavelength >= 0.4 && wavelength < 0.7)
{
// 可见光: 0.40.7 µm, 1.010 m²/g
return 5.5; // 取范围中间值
}
else if (wavelength >= 0.7 && wavelength < 1.5)
{
// 近红外: 0.71.5 µm, 0.55 m²/g
return 2.75; // 取范围中间值
}
else if (wavelength >= 3 && wavelength < 5)
{
// 中波红外: 35 µm, 0.052 m²/g
return 1.025; // 取范围中间值
}
else if (wavelength >= 8 && wavelength < 14)
{
// 长波红外: 814 µm, 0.020.5 m²/g
return 0.26; // 取范围中间值
}
else if (wavelength >= 30 && wavelength < 300)
{
// 太赫兹波: 30300 µm, 0.0050.1 m²/g
return 0.0525; // 取范围中间值
}
else if (wavelength >= 1000)
{
// 微波: 1 mm30 cm, ~0.001 m²/g
return 0.001;
}
else
{
// 对于不在表格中的波长,使用插值或默认值
// 这里简单返回一个默认值,实际应用中可能需要更复杂的插值方法
return 0.1;
}
}
}
}

View File

@ -2,6 +2,7 @@
*
* 1.0.0 (2024-10-13):
* 1.1.0 (2024-10-18):
* 1.2.0 (2024-04-07): 使
*/
namespace AirTransmission
@ -15,6 +16,12 @@ namespace AirTransmission
/// - 气溶胶散射和吸收
/// - 降水(雨、雪)衰减
/// - 沙尘和雾的衰减
///
/// 所有波长相关计算统一使用微米μm作为单位
/// - 激光1.06μm
/// - 红外3-12μm
/// - 紫外0.2-0.4μm
/// - 毫米波3190μm3.19mm对应94GHz
/// </remarks>
internal abstract class TransmittanceModel(WeatherCondition weather)
{
@ -112,34 +119,36 @@ namespace AirTransmission
/// <summary>
/// 计算雨对电磁波的衰减系数K
/// </summary>
/// <param name="wavelength">波长(微米或毫米</param>
/// <param name="wavelength">波长(微米</param>
/// <returns>雨衰减系数K</returns>
protected abstract double CalculateRainKCoefficient(double wavelength);
/// <summary>
/// 计算雨对电磁波的衰减系数α
/// </summary>
/// <param name="wavelength">波长(微米或毫米</param>
/// <param name="wavelength">波长(微米</param>
/// <returns>雨衰减系数α</returns>
protected abstract double CalculateRainAlphaCoefficient(double wavelength);
/// <summary>
/// 计算雪对电磁波的衰减系数K
/// </summary>
/// <param name="wavelength">波长(微米或毫米</param>
/// <param name="wavelength">波长(微米</param>
/// <returns>雪衰减系数K</returns>
protected abstract double CalculateSnowKCoefficient(double wavelength);
/// <summary>
/// 计算雪对电磁波的衰减系数α
/// </summary>
/// <param name="wavelength">波长(微米或毫米</param>
/// <param name="wavelength">波长(微米</param>
/// <returns>雪衰减系数α</returns>
protected abstract double CalculateSnowAlphaCoefficient(double wavelength);
/// <summary>
/// 计算雨对电磁波的衰减
/// </summary>
/// <param name="pathLength">传输路径长度(米)</param>
/// <param name="wavelength">波长(微米或毫米</param>
/// <param name="wavelength">波长(微米</param>
/// <returns>雨衰减dB</returns>
protected double CalculateRainAttenuation(double pathLength, double wavelength)
{
@ -161,7 +170,7 @@ namespace AirTransmission
/// 计算雪对电磁波的衰减
/// </summary>
/// <param name="pathLength">传输路径长度(米)</param>
/// <param name="wavelength">波长(微米或毫米</param>
/// <param name="wavelength">波长(微米</param>
/// <returns>雪衰减dB</returns>
protected double CalculateSnowAttenuation(double pathLength, double wavelength)
{

View File

@ -1,4 +1,4 @@
using System;
using System.Diagnostics;
namespace AirTransmission
{
@ -20,43 +20,60 @@ namespace AirTransmission
/// <param name="visibility">能见度(公里)</param>
/// <param name="precipitation">降水量(毫米/小时),可选</param>
/// <param name="co2Concentration">二氧化碳浓度ppm默认415ppm</param>
public class WeatherCondition(WeatherType type, double temperature, double relativeHumidity, double visibility, double? precipitation = null, double co2Concentration = 415)
/// <param name="pressure">大气压力kPa默认101.325kPa</param>
/// <param name="windSpeed">风速m/s默认0m/s</param>
/// <param name="windDirection">风向0-360度默认0度</param>
public class WeatherCondition(WeatherType type, double temperature, double relativeHumidity, double visibility, double? precipitation = null, double co2Concentration = 415, double pressure = 101.325, double windSpeed = 0, double windDirection = 0)
{
/// <summary>
/// 天气类型
/// </summary>
public WeatherType Type { get; set; } = type; // 天气类型
public WeatherType Type { get; set; } = type;
/// <summary>
/// 温度(摄氏度)
/// </summary>
public double Temperature { get; set; } = temperature; // 温度
public double Temperature { get; set; } = temperature;
/// <summary>
/// 相对湿度(百分比)
/// </summary>
public double RelativeHumidity { get; set; } = relativeHumidity; // 相对湿度
public double RelativeHumidity { get; set; } = relativeHumidity;
/// <summary>
/// 能见度(公里)
/// </summary>
public double Visibility { get; set; } = visibility; // 能见度
public double Visibility { get; set; } = visibility;
/// <summary>
/// 降水量(毫米/小时)
/// </summary>
public double? Precipitation { get; set; } = precipitation; // 降水量
public double? Precipitation { get; set; } = precipitation;
/// <summary>
/// 二氧化碳浓度ppm
/// </summary>
public double CO2Concentration { get; set; } = co2Concentration;
/// <summary>
/// 大气压力kPa
/// </summary>
public double Pressure { get; set; } = pressure;
/// <summary>
/// 风速m/s
/// </summary>
public double WindSpeed { get; set; } = windSpeed;
/// <summary>
/// 风向0-360度, 0度为北, 顺时针)
/// </summary>
public double WindDirection { get; set; } = windDirection;
/// <summary>
/// 打印天气信息
/// </summary>
/// <param name="weather">天气条件对象</param>
/// <remarks>
/// 输出格式:
/// 天气类型: [类型], 温度: [温度]°C, 相对湿度: [湿度]%, 能见度: [能见度]km, 降水量: [降水量]mm/h
/// 天气类型: [类型], 温度: [温度]°C, 相对湿度: [湿度]%, 能见度: [能见度]km, 降水量: [降水量]mm/h, 大气压力: [大气压力]kPa, 风速: [风速]m/s, 风向: [风向]度
/// </remarks>
public static void PrintWeatherInfo(WeatherCondition weather){
Console.WriteLine($"---天气类型: {weather.Type}, 温度: {weather.Temperature}°C, 相对湿度: {weather.RelativeHumidity}%, 能见度: {weather.Visibility}km, 降水量: {weather.Precipitation ?? 0}mm/h");
public static void PrintWeatherInfo(WeatherCondition weather)
{
Debug.WriteLine($"---天气类型: {weather.Type}, 温度: {weather.Temperature}°C, 相对湿度: {weather.RelativeHumidity}%, 能见度: {weather.Visibility}km, 降水量: {weather.Precipitation ?? 0}mm/h, 大气压力: {weather.Pressure}kPa, 风速: {weather.WindSpeed}m/s, 风向: {weather.WindDirection}度");
}
}

View File

@ -80,7 +80,7 @@ class Program
WeatherCondition.PrintWeatherInfo(weatherCondition);
foreach (var d in distances){
double laserTransmittance = AtmosphericTransmittanceCalculator.CalcLaser(weatherCondition, d);
double turbulenceEffect = AtmosphericTransmittanceCalculator.CalcTurbulenceEffect(weatherCondition, d);
double turbulenceEffect = AtmosphericTransmittanceCalculator.CalcTurbulenceEffect(weatherCondition, d, 100); // 添加高度参数假设高度为100米
Console.WriteLine($"距离:{d}公里, 1.06μm激光透过率为: {laserTransmittance:P2}, 湍流效应: {turbulenceEffect:P2}");
}
}
@ -135,20 +135,20 @@ class Program
// 测试烟幕效应
static void TestSmokeScreenEffect()
{
// 创建天气条件
var weatherCondition = new WeatherCondition(
type: WeatherType.,
temperature: 25,
relativeHumidity: 60,
visibility: 10
);
Console.WriteLine("\n测试烟幕对激光的影响:");
Console.WriteLine("------------------------");
double smokeConcentration = 0.5; // 假设烟幕浓度为0.5 g/m³
double smokeThickness = 15; // 假设烟幕墙厚度为5米
// 测试不同烟幕浓度下的透过率
double[] smokeConcentrations = [0.05, 0.1, 0.2, 0.5, 1.0, 2.0]; // g/m³
double smokeThickness = 10; // 米
double wavelength = 1.06; // 微米 (1060nm)
// 计算烟幕透过率
double smokeScreenTransmittance = AtmosphericTransmittanceCalculator.CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness);
Console.WriteLine($"\n仅考虑烟幕的透过率: {smokeScreenTransmittance:P2}");
foreach (double concentration in smokeConcentrations)
{
double transmittance = AtmosphericTransmittanceCalculator.CalculateSmokeScreenTransmittance(
wavelength, concentration, smokeThickness);
Console.WriteLine($"烟幕浓度: {concentration:F2} g/m³, 烟幕厚度: {smokeThickness}米, 透过率: {transmittance:F4}");
}
}
// 测试不同天气条件下的毫米波透过率