diff --git a/README.md b/README.md index be21346..bd924d6 100644 --- a/README.md +++ b/README.md @@ -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): 添加烟幕模型 ## 作者 diff --git a/docs/design/AtmosphericTurbulenceModelDesign.md b/docs/design/AtmosphericTurbulenceModelDesign.md new file mode 100644 index 0000000..cf8bb3d --- /dev/null +++ b/docs/design/AtmosphericTurbulenceModelDesign.md @@ -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次方相关 + diff --git a/docs/design/IRTransmittanceModelDesign.md b/docs/design/IRTransmittanceModelDesign.md new file mode 100644 index 0000000..a665184 --- /dev/null +++ b/docs/design/IRTransmittanceModelDesign.md @@ -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. **注意事项**: + - 模型适用于水平传输路径 + - 建议在计算前验证输入参数的合理性 \ No newline at end of file diff --git a/docs/design/LaserTransmittanceModelDesign.md b/docs/design/LaserTransmittanceModelDesign.md new file mode 100644 index 0000000..baecb6e --- /dev/null +++ b/docs/design/LaserTransmittanceModelDesign.md @@ -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. **注意事项**: + - 模型适用于水平传输路径 + - 建议在计算前验证输入参数的合理性 \ No newline at end of file diff --git a/docs/design/MillimeterWaveTransmittanceModelDesign.md b/docs/design/MillimeterWaveTransmittanceModelDesign.md new file mode 100644 index 0000000..7dcb0a8 --- /dev/null +++ b/docs/design/MillimeterWaveTransmittanceModelDesign.md @@ -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. **注意事项**: + - 模型适用于水平传输路径 + - 建议在计算前验证输入参数的合理性 \ No newline at end of file diff --git a/docs/design/SmokeScreenAttenuationDesign.md b/docs/design/SmokeScreenAttenuationDesign.md new file mode 100644 index 0000000..79c8b73 --- /dev/null +++ b/docs/design/SmokeScreenAttenuationDesign.md @@ -0,0 +1,48 @@ +# 烟幕衰减系数设计文档 + +## 1. 概述 + +本文档描述了烟幕对不同波段电磁波的衰减特性,包括波长范围、典型衰减系数、体积衰减系数和主要影响因素。这些信息将用于实现烟幕透过率的计算。 + +## 2. 烟幕衰减系数参考表 + +| 波段 | 波长范围 | 典型衰减系数(MEC) | 对应体积衰减系数(示例浓度下) | 主要影响因素 | +|------|----------|---------------------|--------------------------------|--------------| +| 紫外光 | 0.2–0.4 µm | 0.5–3.0 m²/g | 100–500 m⁻¹(高浓度烟幕) | 碳颗粒吸收、气溶胶散射 | +| 可见光 | 0.4–0.7 µm | 1.0–10 m²/g | 100–1000 m⁻¹ | Mie散射主导,颗粒粒径接近波长 | +| 近红外 | 0.7–1.5 µm | 0.5–5 m²/g | 50–500 m⁻¹ | 碳烟吸收、水滴散射 | +| 中波红外 | 3–5 µm | 0.05–2 m²/g | 5–200 m⁻¹(柴油烟幕) | 碳颗粒吸收峰(如3.4 μm附近)混合散射 | +| 长波红外 | 8–14 µm | 0.02–0.5 m²/g | 2–50 m⁻¹ | 有机气溶胶吸收(9–12 μm) | +| 太赫兹波 | 30–300 µm | 0.005–0.1 m²/g | 0.5–10 m⁻¹(低浓度石墨烟幕) | 金属颗粒吸收、尺度远小于波长 | +| 微波 | 1 mm–30 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. 在实际应用中,可能需要考虑烟幕的动态变化,如烟幕的扩散、消散等。 \ No newline at end of file diff --git a/docs/design/UVTransmittanceModelDesign.md b/docs/design/UVTransmittanceModelDesign.md new file mode 100644 index 0000000..c82aee9 --- /dev/null +++ b/docs/design/UVTransmittanceModelDesign.md @@ -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. **注意事项**: + - 模型适用于水平传输路径 + - 建议在计算前验证输入参数的合理性 \ No newline at end of file diff --git a/publish/AirTransmissionLibrary-1.0.0.zip b/publish/AirTransmissionLibrary-1.0.0.zip deleted file mode 100644 index 46df64f..0000000 Binary files a/publish/AirTransmissionLibrary-1.0.0.zip and /dev/null differ diff --git a/publish/AirTransmissionLibrary-1.2.0.zip b/publish/AirTransmissionLibrary-1.2.0.zip new file mode 100644 index 0000000..66fceb2 Binary files /dev/null and b/publish/AirTransmissionLibrary-1.2.0.zip differ diff --git a/scripts/pack_release.sh b/scripts/pack_release.sh index 371e367..14a0322 100755 --- a/scripts/pack_release.sh +++ b/scripts/pack_release.sh @@ -1,7 +1,7 @@ #!/bin/bash # 版本号 -VERSION="1.0.0" +VERSION="1.2.0" PACKAGE_NAME="AirTransmissionLibrary-${VERSION}" # 创建临时目录和发布目录 diff --git a/src/AirTransmission/AirTransmission.xml b/src/AirTransmission/AirTransmission.xml index 04dc784..d45c17f 100644 --- a/src/AirTransmission/AirTransmission.xml +++ b/src/AirTransmission/AirTransmission.xml @@ -4,6 +4,16 @@ AirTransmission + + + 天气参数结构体,用于封装天气相关的参数 + + + + + 辐射类型枚举,用于指定不同类型的电磁波 + + 大气透过率计算器,提供各种电磁波在大气中传输的透过率计算方法 @@ -25,36 +35,48 @@ 传输距离(米) 大气透过率 - - - 计算激光在有烟雾条件下的大气透过率 - - 天气条件 - 传输距离(米) - 烟雾浓度 - 烟雾厚度(米) - 大气透过率 - - + 计算红外线在给定条件下的大气透过率 天气条件 传输距离(米) - 烟雾浓度 - 烟雾厚度(米) 大气透过率 - + 计算毫米波在给定条件下的大气透过率 天气条件 传输距离(米) - 烟雾浓度 - 烟雾厚度(米) 大气透过率 + + + 计算紫外线在给定天气条件和距离下的大气透过率 + + 天气条件 + 传输距离(米) + 大气透过率 + + + + 计算湍流效应对激光透过率的影响 + + 天气条件 + 传输距离(米) + 传输高度(米) + 大气透过率 + + + + 计算烟幕对电磁波的透过率 + + 波长(微米) + 烟幕浓度(g/m³) + 烟幕厚度(米) + 烟幕透过率(0到1之间的值) + 计算双程传输后接收到的辐射功率 @@ -76,39 +98,34 @@ 接收器距离(米) 接收到的辐射功率(W/Sr) - - - 计算紫外线在给定天气条件和距离下的大气透过率 - - 天气条件 - 传输距离(米) - 大气透过率 - - - - 计算湍流效应对激光透过率的影响 - - 天气条件 - 传输距离(米) - 大气透过率 - - - - 计算烟幕对电磁波的透过率 - - 烟幕浓度(g/m³) - 烟幕厚度(米) - 烟幕透过率(0到1之间的值) - - + 导出函数:计算大气透过率 + 辐射类型(0:激光, 1:红外, 2:紫外, 3:毫米波) + 波长(微米) + 传输距离(米) + 天气参数 + 透过率(0到1之间的值) - + 导出函数:计算大气湍流影响 + 波长(微米) + 传输距离(米) + 天气参数 + 传输高度(米) + 湍流效应(0到1之间的值,1表示无影响,0表示完全衰减) + + + + 导出函数:计算烟幕透过率 + + 波长(微米) + 烟幕浓度(g/m³) + 烟幕厚度(米) + 烟幕透过率(0到1之间的值) @@ -130,14 +147,13 @@ 基于1.06微米波长(常用的Nd:YAG激光器波长)计算:k = 2π/λ - + 计算大气湍流对光传输的综合影响 传输距离(米) 传输高度(米) - 风速(米/秒) - 大气折射率结构常数 + 天气条件 湍流效应(0到1之间的值,1表示无影响,0表示完全衰减) @@ -360,16 +376,6 @@ - 雾和沙尘的影响 - - - 计算考虑湍流效应的激光透过率 - - 传输距离,单位:米 - 考虑湍流效应后的透过率,范围:0-1 - - 使用大气湍流模型计算湍流对激光传输的影响 - - 计算雨对激光的衰减系数K @@ -423,23 +429,6 @@ 传输路径长度(米) 雾对激光的衰减 - - - 计算考虑烟雾的激光透过率 - - 传输距离(米) - 烟雾浓度 - 烟雾厚度(米) - 考虑烟雾的激光透过率 - - - - 应用湍流效应到透过率 - - 原始透过率 - 传输距离(米) - 考虑湍流效应后的透过率 - 毫米波透过率计算模型,用于计算毫米波在大气中的传输特性 @@ -450,14 +439,19 @@ - 考虑大气分子散射和吸收 - 处理水汽和氧气的吸收 - 计算各种天气条件(雨、雪、雾、沙尘)的衰减效应 + + 波长说明: + 虽然毫米波通常用毫米表示波长,但为了与其他电磁波计算保持一致, + 本模型中统一使用微米(μm)作为波长单位。 + 例如:3.19mm = 3190μm - 毫米波波长常量,单位:毫米 + 毫米波波长常量,单位:微米 - 默认使用3.19mm波长,对应94GHz频率 + 3.19mm = 3190μm,对应94GHz频率 该频率是毫米波雷达常用工作频率 @@ -516,6 +510,27 @@ 传输路径长度(米) 雾衰减 + + + 烟幕透过率模型,用于计算不同波长电磁波在烟幕中的透过率 + + + + + 计算烟幕对电磁波的透过率 + + 波长(微米) + 烟幕浓度(g/m³) + 烟幕厚度(米) + 烟幕透过率(0到1之间的值) + + + + 根据波长获取烟幕衰减系数 + + 波长(微米) + 烟幕衰减系数(m²/g) + 大气透过率计算的基础模型类,提供了各种大气条件下的透过率计算方法 @@ -526,6 +541,12 @@ - 气溶胶散射和吸收 - 降水(雨、雪)衰减 - 沙尘和雾的衰减 + + 所有波长相关计算统一使用微米(μm)作为单位: + - 激光:1.06μm + - 红外:3-12μm + - 紫外:0.2-0.4μm + - 毫米波:3190μm(3.19mm,对应94GHz) @@ -538,6 +559,12 @@ - 气溶胶散射和吸收 - 降水(雨、雪)衰减 - 沙尘和雾的衰减 + + 所有波长相关计算统一使用微米(μm)作为单位: + - 激光:1.06μm + - 红外:3-12μm + - 紫外:0.2-0.4μm + - 毫米波:3190μm(3.19mm,对应94GHz) @@ -644,28 +671,28 @@ 计算雨对电磁波的衰减系数K - 波长(微米或毫米) + 波长(微米) 雨衰减系数K 计算雨对电磁波的衰减系数α - 波长(微米或毫米) + 波长(微米) 雨衰减系数α 计算雪对电磁波的衰减系数K - 波长(微米或毫米) + 波长(微米) 雪衰减系数K 计算雪对电磁波的衰减系数α - 波长(微米或毫米) + 波长(微米) 雪衰减系数α @@ -673,7 +700,7 @@ 计算雨对电磁波的衰减 传输路径长度(米) - 波长(微米或毫米) + 波长(微米) 雨衰减(dB) @@ -681,7 +708,7 @@ 计算雪对电磁波的衰减 传输路径长度(米) - 波长(微米或毫米) + 波长(微米) 雪衰减(dB) @@ -765,8 +792,11 @@ 能见度(公里) 降水量(毫米/小时),可选 二氧化碳浓度(ppm),默认415ppm + 大气压力(kPa),默认101.325kPa + 风速(m/s),默认0m/s + 风向(0-360度),默认0度 - + 天气条件类,用于描述大气传输计算所需的天气参数 @@ -785,6 +815,9 @@ 能见度(公里) 降水量(毫米/小时),可选 二氧化碳浓度(ppm),默认415ppm + 大气压力(kPa),默认101.325kPa + 风速(m/s),默认0m/s + 风向(0-360度),默认0度 @@ -816,6 +849,21 @@ 二氧化碳浓度(ppm) + + + 大气压力(kPa) + + + + + 风速(m/s) + + + + + 风向(0-360度, 0度为北, 顺时针) + + 打印天气信息 @@ -823,7 +871,7 @@ 天气条件对象 输出格式: - 天气类型: [类型], 温度: [温度]°C, 相对湿度: [湿度]%, 能见度: [能见度]km, 降水量: [降水量]mm/h + 天气类型: [类型], 温度: [温度]°C, 相对湿度: [湿度]%, 能见度: [能见度]km, 降水量: [降水量]mm/h, 大气压力: [大气压力]kPa, 风速: [风速]m/s, 风向: [风向]度 diff --git a/src/AirTransmission/AtmosphericTransmittanceCalculator.cs b/src/AirTransmission/AtmosphericTransmittanceCalculator.cs index bebd4b7..bcd9ad0 100644 --- a/src/AirTransmission/AtmosphericTransmittanceCalculator.cs +++ b/src/AirTransmission/AtmosphericTransmittanceCalculator.cs @@ -5,11 +5,40 @@ */ using System; +using System.Diagnostics; using System.Runtime.InteropServices; using RGiesecke.DllExport; namespace AirTransmission { + /// + /// 天气参数结构体,用于封装天气相关的参数 + /// + [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; + } + + /// + /// 辐射类型枚举,用于指定不同类型的电磁波 + /// + public enum RadiationType + { + Laser = 0, + Infrared = 1, + Ultraviolet = 2, + MillimeterWave = 3 + } + /// /// 大气透过率计算器,提供各种电磁波在大气中传输的透过率计算方法 /// @@ -35,34 +64,16 @@ namespace AirTransmission return model.CalculateTransmittance(distance); } - /// - /// 计算激光在有烟雾条件下的大气透过率 - /// - /// 天气条件 - /// 传输距离(米) - /// 烟雾浓度 - /// 烟雾厚度(米) - /// 大气透过率 - 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); - } - /// /// 计算红外线在给定条件下的大气透过率 /// /// 天气条件 /// 传输距离(米) - /// 烟雾浓度 - /// 烟雾厚度(米) /// 大气透过率 - 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); } /// @@ -70,17 +81,49 @@ namespace AirTransmission /// /// 天气条件 /// 传输距离(米) - /// 烟雾浓度 - /// 烟雾厚度(米) /// 大气透过率 - 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); } + /// + /// 计算紫外线在给定天气条件和距离下的大气透过率 + /// + /// 天气条件 + /// 传输距离(米) + /// 大气透过率 + public static double CalcUV(WeatherCondition weather, double distance) + { + var model = new UVTransmittanceModel(weather); + return model.CalculateTransmittance(distance); + } + + /// + /// 计算湍流效应对激光透过率的影响 + /// + /// 天气条件 + /// 传输距离(米) + /// 传输高度(米) + /// 大气透过率 + public static double CalcTurbulenceEffect(WeatherCondition weather, double distance, double height) + { + return AtmosphericTurbulenceModel.CalculateTurbulenceEffect(weather, distance, height); + } + + /// + /// 计算烟幕对电磁波的透过率 + /// + /// 波长(微米) + /// 烟幕浓度(g/m³) + /// 烟幕厚度(米) + /// 烟幕透过率(0到1之间的值) + public static double CalculateSmokeScreenTransmittance(double wavelength, double smokeConcentration, double smokeThickness) + { + return SmokeScreenTransmittanceModel.CalculateTransmittance(wavelength, smokeConcentration, smokeThickness); + } + /// /// 计算双程传输后接收到的辐射功率 /// @@ -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; } - /// - /// 计算紫外线在给定天气条件和距离下的大气透过率 - /// - /// 天气条件 - /// 传输距离(米) - /// 大气透过率 - public static double CalcUV(WeatherCondition weather, double distance) - { - var model = new UVTransmittanceModel(weather); - return model.CalculateTransmittance(distance); - } - - /// - /// 计算湍流效应对激光透过率的影响 - /// - /// 天气条件 - /// 传输距离(米) - /// 大气透过率 - public static double CalcTurbulenceEffect(WeatherCondition weather, double distance) - { - var model = new LaserTransmittanceModel(weather); - return model.CalculateTransmittanceWithTurbulence(distance); - } - - /// - /// 计算烟幕对电磁波的透过率 - /// - /// 烟幕浓度(g/m³) - /// 烟幕厚度(米) - /// 烟幕透过率(0到1之间的值) - 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; - } - /// /// 导出函数:计算大气透过率 /// + /// 辐射类型(0:激光, 1:红外, 2:紫外, 3:毫米波) + /// 波长(微米) + /// 传输距离(米) + /// 天气参数 + /// 透过率(0到1之间的值) [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); // 默认使用激光 + } } /// /// 导出函数:计算大气湍流影响 /// + /// 波长(微米) + /// 传输距离(米) + /// 天气参数 + /// 传输高度(米) + /// 湍流效应(0到1之间的值,1表示无影响,0表示完全衰减) [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); + } + + /// + /// 导出函数:计算烟幕透过率 + /// + /// 波长(微米) + /// 烟幕浓度(g/m³) + /// 烟幕厚度(米) + /// 烟幕透过率(0到1之间的值) + [DllExport("CalculateSmokeScreenTransmittance", CallingConvention = CallingConvention.Cdecl)] + public static double CalculateSmokeScreenTransmittanceExport(double wavelength, double smokeConcentration, double smokeThickness) + { + return SmokeScreenTransmittanceModel.CalculateTransmittance(wavelength, smokeConcentration, smokeThickness); } } } diff --git a/src/AirTransmission/AtmosphericTurbulenceModel.cs b/src/AirTransmission/AtmosphericTurbulenceModel.cs index 05ec0a0..bd9e1d6 100644 --- a/src/AirTransmission/AtmosphericTurbulenceModel.cs +++ b/src/AirTransmission/AtmosphericTurbulenceModel.cs @@ -31,11 +31,11 @@ namespace AirTransmission /// /// 传输距离(米) /// 传输高度(米) - /// 风速(米/秒) - /// 大气折射率结构常数 + /// 天气条件 /// 湍流效应(0到1之间的值,1表示无影响,0表示完全衰减) - 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); diff --git a/src/AirTransmission/LaserTransmittanceModel.cs b/src/AirTransmission/LaserTransmittanceModel.cs index 0614af2..bb1f3ce 100644 --- a/src/AirTransmission/LaserTransmittanceModel.cs +++ b/src/AirTransmission/LaserTransmittanceModel.cs @@ -55,20 +55,6 @@ namespace AirTransmission return transmittance; } - /// - /// 计算考虑湍流效应的激光透过率 - /// - /// 传输距离,单位:米 - /// 考虑湍流效应后的透过率,范围:0-1 - /// - /// 使用大气湍流模型计算湍流对激光传输的影响 - /// - public double CalculateTransmittanceWithTurbulence(double distance) - { - double transmittance = CalculateTransmittance(distance); - return ApplyTurbulenceEffect(transmittance, distance); - } - /// /// 计算雨对激光的衰减系数K /// @@ -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,增加雾的影响 } - - /// - /// 计算考虑烟雾的激光透过率 - /// - /// 传输距离(米) - /// 烟雾浓度 - /// 烟雾厚度(米) - /// 考虑烟雾的激光透过率 - public double CalculateTransmittanceWithSmoke(double distance, double smokeConcentration, double smokeThickness) - { - double transmittance = CalculateTransmittance(distance); - double smokeTransmittance = AtmosphericTransmittanceCalculator.CalculateSmokeScreenTransmittance(smokeConcentration, smokeThickness); - return transmittance * smokeTransmittance; - } - - /// - /// 应用湍流效应到透过率 - /// - /// 原始透过率 - /// 传输距离(米) - /// 考虑湍流效应后的透过率 - 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); - } } } diff --git a/src/AirTransmission/MillimeterWaveTransmittanceModel.cs b/src/AirTransmission/MillimeterWaveTransmittanceModel.cs index 506c26b..dade1a8 100644 --- a/src/AirTransmission/MillimeterWaveTransmittanceModel.cs +++ b/src/AirTransmission/MillimeterWaveTransmittanceModel.cs @@ -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 /// internal class MillimeterWaveTransmittanceModel : TransmittanceModel { /// - /// 毫米波波长常量,单位:毫米 + /// 毫米波波长常量,单位:微米 /// /// - /// 默认使用3.19mm波长,对应94GHz频率 + /// 3.19mm = 3190μm,对应94GHz频率 /// 该频率是毫米波雷达常用工作频率 /// - 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) { } diff --git a/src/AirTransmission/SmokeScreenTransmittanceModel.cs b/src/AirTransmission/SmokeScreenTransmittanceModel.cs new file mode 100644 index 0000000..b5ff5b8 --- /dev/null +++ b/src/AirTransmission/SmokeScreenTransmittanceModel.cs @@ -0,0 +1,90 @@ +using System; +using System.Diagnostics; + +namespace AirTransmission +{ + /// + /// 烟幕透过率模型,用于计算不同波长电磁波在烟幕中的透过率 + /// + public class SmokeScreenTransmittanceModel + { + /// + /// 计算烟幕对电磁波的透过率 + /// + /// 波长(微米) + /// 烟幕浓度(g/m³) + /// 烟幕厚度(米) + /// 烟幕透过率(0到1之间的值) + 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; + } + + /// + /// 根据波长获取烟幕衰减系数 + /// + /// 波长(微米) + /// 烟幕衰减系数(m²/g) + private static double GetSmokeAttenuationCoefficient(double wavelength) + { + // 根据设计文档中的参考表确定衰减系数 + if (wavelength >= 0.2 && wavelength < 0.4) + { + // 紫外光: 0.2–0.4 µm, 0.5–3.0 m²/g + return 1.75; // 取范围中间值 + } + else if (wavelength >= 0.4 && wavelength < 0.7) + { + // 可见光: 0.4–0.7 µm, 1.0–10 m²/g + return 5.5; // 取范围中间值 + } + else if (wavelength >= 0.7 && wavelength < 1.5) + { + // 近红外: 0.7–1.5 µm, 0.5–5 m²/g + return 2.75; // 取范围中间值 + } + else if (wavelength >= 3 && wavelength < 5) + { + // 中波红外: 3–5 µm, 0.05–2 m²/g + return 1.025; // 取范围中间值 + } + else if (wavelength >= 8 && wavelength < 14) + { + // 长波红外: 8–14 µm, 0.02–0.5 m²/g + return 0.26; // 取范围中间值 + } + else if (wavelength >= 30 && wavelength < 300) + { + // 太赫兹波: 30–300 µm, 0.005–0.1 m²/g + return 0.0525; // 取范围中间值 + } + else if (wavelength >= 1000) + { + // 微波: 1 mm–30 cm, ~0.001 m²/g + return 0.001; + } + else + { + // 对于不在表格中的波长,使用插值或默认值 + // 这里简单返回一个默认值,实际应用中可能需要更复杂的插值方法 + return 0.1; + } + } + } +} \ No newline at end of file diff --git a/src/AirTransmission/TransmittanceModel.cs b/src/AirTransmission/TransmittanceModel.cs index e85c836..2e59c6d 100644 --- a/src/AirTransmission/TransmittanceModel.cs +++ b/src/AirTransmission/TransmittanceModel.cs @@ -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μm(3.19mm,对应94GHz) /// internal abstract class TransmittanceModel(WeatherCondition weather) { @@ -112,34 +119,36 @@ namespace AirTransmission /// /// 计算雨对电磁波的衰减系数K /// - /// 波长(微米或毫米) + /// 波长(微米) /// 雨衰减系数K protected abstract double CalculateRainKCoefficient(double wavelength); /// /// 计算雨对电磁波的衰减系数α /// - /// 波长(微米或毫米) + /// 波长(微米) /// 雨衰减系数α protected abstract double CalculateRainAlphaCoefficient(double wavelength); /// /// 计算雪对电磁波的衰减系数K /// - /// 波长(微米或毫米) + /// 波长(微米) /// 雪衰减系数K protected abstract double CalculateSnowKCoefficient(double wavelength); + /// /// 计算雪对电磁波的衰减系数α /// - /// 波长(微米或毫米) + /// 波长(微米) /// 雪衰减系数α protected abstract double CalculateSnowAlphaCoefficient(double wavelength); + /// /// 计算雨对电磁波的衰减 /// /// 传输路径长度(米) - /// 波长(微米或毫米) + /// 波长(微米) /// 雨衰减(dB) protected double CalculateRainAttenuation(double pathLength, double wavelength) { @@ -161,7 +170,7 @@ namespace AirTransmission /// 计算雪对电磁波的衰减 /// /// 传输路径长度(米) - /// 波长(微米或毫米) + /// 波长(微米) /// 雪衰减(dB) protected double CalculateSnowAttenuation(double pathLength, double wavelength) { diff --git a/src/AirTransmission/WeatherCondition.cs b/src/AirTransmission/WeatherCondition.cs index d64ac1b..f7e15a0 100644 --- a/src/AirTransmission/WeatherCondition.cs +++ b/src/AirTransmission/WeatherCondition.cs @@ -1,4 +1,4 @@ -using System; +using System.Diagnostics; namespace AirTransmission { @@ -20,43 +20,60 @@ namespace AirTransmission /// 能见度(公里) /// 降水量(毫米/小时),可选 /// 二氧化碳浓度(ppm),默认415ppm - public class WeatherCondition(WeatherType type, double temperature, double relativeHumidity, double visibility, double? precipitation = null, double co2Concentration = 415) + /// 大气压力(kPa),默认101.325kPa + /// 风速(m/s),默认0m/s + /// 风向(0-360度),默认0度 + 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) { /// /// 天气类型 /// - public WeatherType Type { get; set; } = type; // 天气类型 + public WeatherType Type { get; set; } = type; /// /// 温度(摄氏度) /// - public double Temperature { get; set; } = temperature; // 温度 + public double Temperature { get; set; } = temperature; /// /// 相对湿度(百分比) /// - public double RelativeHumidity { get; set; } = relativeHumidity; // 相对湿度 + public double RelativeHumidity { get; set; } = relativeHumidity; /// /// 能见度(公里) /// - public double Visibility { get; set; } = visibility; // 能见度 + public double Visibility { get; set; } = visibility; /// /// 降水量(毫米/小时) /// - public double? Precipitation { get; set; } = precipitation; // 降水量 + public double? Precipitation { get; set; } = precipitation; /// /// 二氧化碳浓度(ppm) /// public double CO2Concentration { get; set; } = co2Concentration; + /// + /// 大气压力(kPa) + /// + public double Pressure { get; set; } = pressure; + /// + /// 风速(m/s) + /// + public double WindSpeed { get; set; } = windSpeed; + /// + /// 风向(0-360度, 0度为北, 顺时针) + /// + public double WindDirection { get; set; } = windDirection; + /// /// 打印天气信息 /// /// 天气条件对象 /// /// 输出格式: - /// 天气类型: [类型], 温度: [温度]°C, 相对湿度: [湿度]%, 能见度: [能见度]km, 降水量: [降水量]mm/h + /// 天气类型: [类型], 温度: [温度]°C, 相对湿度: [湿度]%, 能见度: [能见度]km, 降水量: [降水量]mm/h, 大气压力: [大气压力]kPa, 风速: [风速]m/s, 风向: [风向]度 /// - 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}度"); } } diff --git a/src/AirTransmissionConsole/Program.cs b/src/AirTransmissionConsole/Program.cs index d96df44..0ec1fef 100644 --- a/src/AirTransmissionConsole/Program.cs +++ b/src/AirTransmissionConsole/Program.cs @@ -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}"); + } } // 测试不同天气条件下的毫米波透过率