【电子战】 第26篇:大气衰减——氧气与水汽吸收【含matlab代码】

第26篇:大气衰减------氧气与水汽吸收

延申阅读:

自由空间损耗与大气衰减详细公式与分析

自由空间与大气衰减详细绘图代码 【含matlab代码】

引用请写:Low Earth Orbit Satellite Networks for 6G: A Review of Ground-Satellite Channel Link Budget. TechRxiv. 08 September 2025.

DOI: https://doi.org/10.36227/techrxiv.175735665.55050224/v1

一、作用:看不见的"能量黑洞"

上一篇我们讲了路径损耗------信号因为几何扩散而变弱。但还有另一种损耗:

信号在穿过大气时,被氧气和水汽分子"吃掉"了一部分能量。

这不是几何效应,而是物理吸收 ------电磁波的能量被分子吸收,转化为分子转动/振动的热能 。这种吸收有极强的频率选择性:

  • 60 GHz 附近 :氧气吸收峰,海平面衰减高达 15 dB/km;
  • 22 GHz :水汽吸收峰,衰减约 0.2 dB/km;
  • 183 GHz :强水汽吸收峰,衰减可达 30 dB/km;
  • 35 GHz、94 GHz、140 GHz :大气窗口------衰减极小,适合通信/雷达。

大气衰减在电子战中的三大影响:

  1. 频率选择:不同频段的雷达/通信作用距离差异巨大;
  2. 高度依赖:高空干燥稀薄,衰减小;海平面湿稠密,衰减大;
  3. 对抗优势 :60 GHz 的强氧吸收让信号"传不远"------天然的保密频段。

本篇核心作用 :从分子吸收的物理机制出发,实现简化版 ITU-R P.676 大气衰减模型 ;用 MATLAB 画出 1~350 GHz 的衰减谱;分析海拔高度 对衰减的影响;用天顶衰减计算不同仰角下的总衰减。

代码出处 :appC_drawFigures(图C.2、C.5)、+atm/ 模块。


二、原理:数学上发生了什么?

2.1 大气吸收的物理机制

氧气(O₂) :

  • 分子有磁偶极矩(因为两个未配对电子);
  • 在 60 GHz 附近有一组密集的转动谱线(约 44 条),形成宽峰;
  • 在 118.75 GHz 有一条孤立谱线;
  • 吸收强度与氧气分压 成正比------随高度近似指数衰减。

水汽(H₂O) :

  • 分子有电偶极矩(因为不对称结构);
  • 在 22.235 GHz 、183.31 GHz 、325 GHz 等处有强吸收线;
  • 吸收强度与水汽密度 成正比------随高度快速衰减(尺度高度约 2 km)。

吸收系数 γ \gamma γ dB/km 与温度、压力、水汽密度都有关:

γ = γ O 2 ( f , P , T ) + γ H 2 O ( f , P , T , ρ w ) \gamma = \gamma_{O_2}(f, P, T) + \gamma_{H_2O}(f, P, T, \rho_w) γ=γO2(f,P,T)+γH2O(f,P,T,ρw)

2.2 简化吸收模型

ITU-R P.676 给出完整的谱线求和公式(44+34 条谱线),但工程上常用简化模型:

氧气吸收(60 GHz 附近):

γ O 2 ( f ) ≈ 7.2 ⋅ r t 2.8 f 2 + 0.34 r p 2 r t 1.6 + 0.62 ⋅ ξ 3 f 2 + 0.41 r p 2 r t 1.6 + ... \gamma_{O_2}(f) \approx \frac{7.2 \cdot r_t^{2.8}}{f^2 + 0.34 r_p^2 r_t^{1.6}} + \frac{0.62 \cdot \xi_3}{f^2 + 0.41 r_p^2 r_t^{1.6}} + \ldots γO2(f)≈f2+0.34rp2rt1.67.2⋅rt2.8+f2+0.41rp2rt1.60.62⋅ξ3+...

其中 r p = P / 1013 r_p = P/1013 rp=P/1013(压力比)、 r t = 288 / T r_t = 288/T rt=288/T(温度比)。

水汽吸收(22 GHz 附近):

γ H 2 O ( f ) ≈ 3.98 ⋅ η 1 ⋅ exp ⁡ ( 2.23 ( 1 − r t ) ) ( f − 22.235 ) 2 + 9.42 η 1 2 + ... \gamma_{H_2O}(f) \approx \frac{3.98 \cdot \eta_1 \cdot \exp(2.23(1-r_t))}{(f - 22.235)^2 + 9.42 \eta_1^2} + \ldots γH2O(f)≈(f−22.235)2+9.42η123.98⋅η1⋅exp(2.23(1−rt))+...

其中 η 1 \eta_1 η1 是压力展宽参数,与水汽分压有关。

本篇采用简化模型 ------用高斯峰 + 基线拟合,保证在主要频段给出数量级正确的结果,同时代码完全自包含。

2.3 标准大气模型

衰减系数依赖于大气参数:

高度 km 温度 K 压力 hPa 水汽密度 g/m³
0 288.15 1013.25 7.5
5 255.65 540 1.9
10 223.15 264 0.5
15 216.65 120 0.1
20 216.65 55 0.03

对流层 (0~11 km):温度以 6.5 K/km 递减;

平流层 (11~20 km):温度近似恒定 216.65 K ;

水汽 :以 2 km 尺度高度 指数衰减------这就是为什么高空衰减小。

2.4 天顶衰减

天顶衰减 (Zenith Attenuation)是信号垂直穿过整个大气层的总衰减:

A z e n i t h ( f ) = ∫ 0 ∞ γ ( f , h )   d h dB A_{zenith}(f) = \int_0^{\infty} \gamma(f, h) \, dh \quad \\text{dB} Azenith(f)=∫0∞γ(f,h)dhdB

其中 γ ( f , h ) \gamma(f, h) γ(f,h) 是高度相关的吸收系数。

斜路径衰减 :如果信号以仰角 θ \theta θ(相对水平面)入射,路径长度放大因子为:

A ( θ ) = A z e n i t h ⋅ 1 sin ⁡ θ = A z e n i t h ⋅ csc ⁡ θ A(\theta) = A_{zenith} \cdot \frac{1}{\sin\theta} = A_{zenith} \cdot \csc\theta A(θ)=Azenith⋅sinθ1=Azenith⋅cscθ

工程含义:

  • 卫星通信:仰角越高,信号穿过的"大气厚度"越小,衰减小;
  • 低仰角(< 10°):大气衰减暴增------这就是为什么卫星地面站有"最低仰角"限制。

2.5 大气窗口与吸收峰

频率 GHz 类型 衰减 dB/km 用途
22 水汽峰 0.2 气象遥感
35 窗口 0.05 毫米波雷达、5G
60 氧气峰 15 保密通信、短距高速
94 窗口 0.3 云雷达、成像
118 氧气峰 2 大气探测
140 窗口 0.5 星间链路
183 水汽峰 30 气象卫星
325 水汽峰 100+ 亚毫米波探测

工程选择:

  • 要传远:选窗口频率(35、94、140 GHz);
  • 要保密 :选吸收峰(60 GHz)------信号"传不出几公里",但近距离通信极其隐蔽;
  • 要探测大气 :选吸收峰(22、183 GHz)------吸收强度反映大气成分。

三、完整代码(可直接运行)

matlab 复制代码
%% ========================================================================
% 第26篇:大气衰减------氧气与水汽吸收
% ========================================================================

clear; close all; clc;
rng(2024);

%% ==================== 图1:三个高度的衰减谱 ====================

fprintf('======= 大气衰减谱 =======\n');

% 频率范围 1~350 GHz
f_ghz = 1:0.5:350;
f = f_ghz * 1e9;

% 三个高度:0 km(海平面)、10 km、20 km
alt_set = [0, 10, 20];

fprintf('计算三个高度的衰减系数...\n');

gamma_O2_all = zeros(numel(alt_set), numel(f_ghz));
gamma_H2O_all = zeros(numel(alt_set), numel(f_ghz));

for idx = 1:numel(alt_set)
    h = alt_set(idx);

    % 标准大气参数
    [P, T, rho_w] = standard_atmosphere(h);

    fprintf('  h = %2d km: P = %7.2f hPa, T = %6.2f K, ρ_w = %.4f g/m³\n', ...
        h, P, T, rho_w);

    % 计算氧气和水汽吸收系数
    [gamma_O2, gamma_H2O] = gas_absorption(f_ghz, P, T, rho_w);

    gamma_O2_all(idx, :) = gamma_O2;
    gamma_H2O_all(idx, :) = gamma_H2O;
end

% 绘图
figure('Name','Fig1 Atmospheric Absorption','Position',[80 80 900 700]);

subplot(3,1,1);
hold on;
colors = lines(numel(alt_set));
for idx = 1:numel(alt_set)
    semilogy(f_ghz, gamma_O2_all(idx,:), 'Color', colors(idx,:), ...
        'LineWidth', 1.5, 'DisplayName', sprintf('%d km', alt_set(idx)));
end
xlabel('频率 [GHz]'); ylabel('氧气吸收 [dB/km]');
title('氧气吸收系数');
grid on; legend('Location', 'northeast');
xlim([1, 350]); ylim([1e-5, 30]);

% 标注主要吸收峰
xline(60, 'r--', 'LineWidth', 1, 'HandleVisibility', 'off');
text(62, 10, '60 GHz 氧峰', 'FontSize', 10, 'Color', 'r');
xline(118.75, 'r--', 'LineWidth', 1, 'HandleVisibility', 'off');
text(121, 2, '118 GHz', 'FontSize', 10, 'Color', 'r');

subplot(3,1,2);
hold on;
for idx = 1:numel(alt_set)
    semilogy(f_ghz, gamma_H2O_all(idx,:), 'Color', colors(idx,:), ...
        'LineWidth', 1.5, 'DisplayName', sprintf('%d km', alt_set(idx)));
end
xlabel('频率 [GHz]'); ylabel('水汽吸收 [dB/km]');
title('水汽吸收系数');
grid on; legend('Location', 'northeast');
xlim([1, 350]); ylim([1e-6, 200]);

% 标注水汽峰
xline(22.235, 'b--', 'LineWidth', 1, 'HandleVisibility', 'off');
text(24, 0.5, '22 GHz', 'FontSize', 10, 'Color', 'b');
xline(183.31, 'b--', 'LineWidth', 1, 'HandleVisibility', 'off');
text(186, 30, '183 GHz', 'FontSize', 10, 'Color', 'b');

subplot(3,1,3);
hold on;
for idx = 1:numel(alt_set)
    gamma_total = gamma_O2_all(idx,:) + gamma_H2O_all(idx,:);
    semilogy(f_ghz, gamma_total, 'Color', colors(idx,:), ...
        'LineWidth', 2, 'DisplayName', sprintf('%d km', alt_set(idx)));
end
xlabel('频率 [GHz]'); ylabel('总吸收 [dB/km]');
title('总大气吸收系数');
grid on; legend('Location', 'northeast');
xlim([1, 350]); ylim([1e-5, 300]);

% 标注窗口
windows = [35, 94, 140];
for w = windows
    xline(w, 'g:', 'LineWidth', 1.5);
    text(w+2, 0.01, sprintf('%d GHz', w), 'FontSize', 9, 'Color', 'g');
end

sgtitle('大气吸收系数:氧气 + 水汽(1~350 GHz)', ...
    'FontSize', 14, 'FontWeight', 'bold');

%% ==================== 图2:60 GHz 氧气吸收峰细节 ====================

fprintf('\n======= 60 GHz 氧气吸收峰 =======\n');

f_zoom = 50:0.1:70;
f_zoom_hz = f_zoom * 1e9;

figure('Name','Fig2 O2 Peak','Position',[100 100 900 600]);
hold on;

for idx = 1:numel(alt_set)
    [P, T, rho_w] = standard_atmosphere(alt_set(idx));
    [gO2, ~] = gas_absorption(f_zoom, P, T, rho_w);
    plot(f_zoom, gO2, 'Color', colors(idx,:), 'LineWidth', 2, ...
        'DisplayName', sprintf('%d km', alt_set(idx)));
end

xlabel('频率 [GHz]'); ylabel('氧气吸收 [dB/km]');
title('60 GHz 氧气吸收峰:海平面衰减高达 15 dB/km');
grid on; legend('Location', 'northwest');
xlim([50, 70]); ylim([0, 20]);

% 标注峰值
[P0, T0, ~] = standard_atmosphere(0);
[g0, ~] = gas_absorption(60, P0, T0, 0);
plot(60, g0, 'ro', 'MarkerSize', 12, 'MarkerFaceColor', 'r');
text(60.5, g0+0.5, sprintf('峰值 %.1f dB/km', g0), 'FontSize', 11);

% 标注"保密频段"
text(52, 17, '保密通信频段', 'FontSize', 11, 'Color', 'r', ...
    'FontWeight', 'bold');

%% ==================== 图3:水汽吸收峰细节 ====================

fprintf('\n======= 水汽吸收峰 =======\n');

figure('Name','Fig3 H2O Peaks','Position',[120 120 900 700]);

% 子图1:22 GHz 峰
subplot(2,1,1);
hold on;
f_22 = 15:0.05:30;
for idx = 1:numel(alt_set)
    [P, T, rho_w] = standard_atmosphere(alt_set(idx));
    [~, gH2O] = gas_absorption(f_22, P, T, rho_w);
    plot(f_22, gH2O, 'Color', colors(idx,:), 'LineWidth', 2, ...
        'DisplayName', sprintf('%d km', alt_set(idx)));
end
xlabel('频率 [GHz]'); ylabel('水汽吸收 [dB/km]');
title('22 GHz 水汽吸收峰');
grid on; legend('Location', 'northwest');
xlim([15, 30]); ylim([0, 0.4]);

% 子图2:183 GHz 峰
subplot(2,1,2);
hold on;
f_183 = 170:0.5:200;
for idx = 1:numel(alt_set)
    [P, T, rho_w] = standard_atmosphere(alt_set(idx));
    [~, gH2O] = gas_absorption(f_183, P, T, rho_w);
    plot(f_183, gH2O, 'Color', colors(idx,:), 'LineWidth', 2, ...
        'DisplayName', sprintf('%d km', alt_set(idx)));
end
xlabel('频率 [GHz]'); ylabel('水汽吸收 [dB/km]');
title('183 GHz 强水汽吸收峰');
grid on; legend('Location', 'northwest');
xlim([170, 200]); ylim([0, 40]);

sgtitle('水汽吸收峰:22 GHz 与 183 GHz', ...
    'FontSize', 14, 'FontWeight', 'bold');

%% ==================== 图4:海拔高度对衰减的影响 ====================

fprintf('\n======= 海拔高度对衰减的影响 =======\n');

% 选择几个关键频率
freq_keys = [22.235, 35, 60, 94, 183.31];
freq_names = {'22 GHz (水汽峰)', '35 GHz (窗口)', ...
              '60 GHz (氧峰)', '94 GHz (窗口)', ...
              '183 GHz (水汽峰)'};

alt_fine = 0:0.5:25;
n_freq = numel(freq_keys);

gamma_vs_alt = zeros(n_freq, numel(alt_fine));

for ia = 1:numel(alt_fine)
    [P, T, rho_w] = standard_atmosphere(alt_fine(ia));
    [gO2, gH2O] = gas_absorption(freq_keys, P, T, rho_w);
    gamma_vs_alt(:, ia) = gO2 + gH2O;
end

figure('Name','Fig4 Altitude Dependence','Position',[140 140 900 600]);
hold on;
colors_f = lines(n_freq);
for i = 1:n_freq
    semilogy(alt_fine, gamma_vs_alt(i,:), 'Color', colors_f(i,:), ...
        'LineWidth', 2, 'DisplayName', freq_names{i});
end
xlabel('海拔高度 [km]'); ylabel('大气吸收 [dB/km]');
title('大气吸收随海拔高度的变化');
grid on; legend('Location', 'northeast');
xlim([0, 25]); ylim([1e-4, 30]);

% 标注:20 km 处衰减几乎为零
xline(20, 'k--', 'LineWidth', 1);
text(20.5, 0.001, '20 km 以上衰减小', 'FontSize', 10);

fprintf('\n关键高度处的吸收系数 [dB/km]:\n');
fprintf('%-25s', '频率');
for ia = [1, 11, 21, 41]
    fprintf('h=%2d km  ', alt_fine(ia));
end
fprintf('\n');
fprintf('%-25s', '');
for ia = [1, 11, 21, 41]
    fprintf('--------  ');
end
fprintf('\n');
for i = 1:n_freq
    fprintf('%-25s', freq_names{i});
    for ia = [1, 11, 21, 41]
        fprintf('%-10.4f', gamma_vs_alt(i, ia));
    end
    fprintf('\n');
end

%% ==================== 图5:天顶衰减与仰角 ====================

fprintf('\n======= 天顶衰减 =======\n');

% 频率扫描
f_ghz2 = 1:1:350;

% 计算天顶衰减(垂直穿过整个大气层)
alt_layer = 0:0.5:30;   % 0~30 km 分层
n_layer = numel(alt_layer);

A_zenith = zeros(size(f_ghz2));

for idx_f = 1:numel(f_ghz2)
    f = f_ghz2(idx_f);
    gamma_sum = 0;

    for idx_h = 1:n_layer
        [P, T, rho_w] = standard_atmosphere(alt_layer(idx_h));
        [gO2, gH2O] = gas_absorption(f, P, T, rho_w);
        gamma_sum = gamma_sum + (gO2 + gH2O) * 0.5;   % 0.5 km 步长
    end
    A_zenith(idx_f) = gamma_sum;
end

fprintf('天顶衰减计算完成\n');

% 不同仰角下的衰减
elev_deg_set = [90, 30, 10, 5];
elev_names = {'天顶 (90°)', '30°', '10°', '5°'};

figure('Name','Fig5 Zenith Attenuation','Position',[160 160 900 700]);

% 子图1:天顶衰减谱
subplot(2,1,1);
semilogy(f_ghz2, A_zenith, 'b-', 'LineWidth', 2);
xlabel('频率 [GHz]'); ylabel('天顶衰减 [dB]');
title('天顶衰减:垂直穿过整个大气层');
grid on; xlim([1, 350]); ylim([0.001, 1000]);

% 标注主要峰
text(60, 200, '60 GHz: ~200 dB', 'FontSize', 10, 'Color', 'r');
text(22, 1, '22 GHz: ~1 dB', 'FontSize', 10, 'Color', 'b');
text(183, 500, '183 GHz: ~500 dB', 'FontSize', 10, 'Color', 'b');

% 子图2:不同仰角的衰减
subplot(2,1,2);
hold on;
colors_e = lines(numel(elev_deg_set));
for idx_e = 1:numel(elev_deg_set)
    elev = deg2rad(elev_deg_set(idx_e));
    A_slant = A_zenith / sin(elev);
    semilogy(f_ghz2, A_slant, 'Color', colors_e(idx_e,:), ...
        'LineWidth', 2, 'DisplayName', elev_names{idx_e});
end
xlabel('频率 [GHz]'); ylabel('斜路径总衰减 [dB]');
title('不同仰角下的斜路径衰减');
grid on; legend('Location', 'northeast');
xlim([1, 350]); ylim([0.01, 1e5]);

% 标注
text(30, 1e3, '5° 仰角衰减是 90° 的 11.5 倍', 'FontSize', 10, ...
    'BackgroundColor', 'w');

sgtitle('天顶衰减与仰角的关系', ...
    'FontSize', 14, 'FontWeight', 'bold');

fprintf('\n典型频率的天顶衰减:\n');
freq_show = [22.235, 35, 60, 94, 183.31];
for f_show = freq_show
    [~, idx_f] = min(abs(f_ghz2 - f_show));
    fprintf('  %.2f GHz: 天顶衰减 = %.4f dB\n', f_show, A_zenith(idx_f));
end

fprintf('\n======= 全部完成 =======\n');

%% ==================== 函数定义 ====================

function [P, T, rho_w] = standard_atmosphere(h_km)
    % 简化标准大气模型
    % 输入:h_km - 高度 [km]
    % 输出:
    %   P     - 压力 [hPa]
    %   T     - 温度 [K]
    %   rho_w - 水汽密度 [g/m^3]

    h = h_km * 1e3;  % 转 m

    % 温度剖面(US Standard Atmosphere 1976)
    if h_km <= 11
        T = 288.15 - 6.5 * h_km;
    elseif h_km <= 20
        T = 216.65;
    elseif h_km <= 32
        T = 216.65 + (h_km - 20) * 1.0;
    else
        T = 228.65;
    end

    % 压力剖面
    if h_km <= 11
        P = 1013.25 * (T / 288.15)^(5.2561);
    elseif h_km <= 20
        P = 226.32 * exp(-(h_km - 11) * 1e3 / 6341.6);
    else
        P = 54.75 * exp(-(h_km - 20) * 1e3 / 6100);
    end

    % 水汽密度:地面 7.5 g/m³,尺度高度 2 km
    rho_w = 7.5 * exp(-h_km / 2);
end

function [gamma_O2, gamma_H2O] = gas_absorption(f_ghz, P, T, rho_w)
    % 简化大气吸收系数模型(基于 ITU-R P.676 的近似)
    % 输入:
    %   f_ghz  - 频率 [GHz](标量或向量)
    %   P      - 压力 [hPa]
    %   T      - 温度 [K]
    %   rho_w  - 水汽密度 [g/m^3]
    % 输出:
    %   gamma_O2  - 氧气吸收系数 [dB/km]
    %   gamma_H2O - 水汽吸收系数 [dB/km]

    % 确保 f_ghz 是行向量
    f_ghz = f_ghz(:).';

    % 归一化参数
    r_p = P / 1013.25;
    r_t = 288.15 / T;

    % ---- 氧气吸收 ----
    % 主峰:60 GHz 附近的 44 条谱线
    % 用两个高斯分量拟合
    f_O2_center1 = 60;
    sigma_O2_1 = 8;    % 峰宽
    A_O2_1 = 15 * r_p^2 * r_t^2.5;

    f_O2_center2 = 118.75;
    sigma_O2_2 = 3;
    A_O2_2 = 2 * r_p^2 * r_t^2.5;

    % 低频基线(非共振吸收)
    baseline_O2 = 0.005 * r_p^2 * r_t^3 ./ (1 + (f_ghz/30).^2);

    gamma_O2 = A_O2_1 * exp(-(f_ghz - f_O2_center1).^2 / (2*sigma_O2_1^2)) + ...
               A_O2_2 * exp(-(f_ghz - f_O2_center2).^2 / (2*sigma_O2_2^2)) + ...
               baseline_O2;

    % ---- 水汽吸收 ----
    % 主峰:22.235 GHz 和 183.31 GHz
    f_H2O_center1 = 22.235;
    sigma_H2O_1 = 2.5;
    A_H2O_1 = 0.2 * rho_w * r_p * r_t^3.5;

    f_H2O_center2 = 183.31;
    sigma_H2O_2 = 5;
    A_H2O_2 = 30 * rho_w * r_p * r_t^3.5;

    f_H2O_center3 = 325;
    sigma_H2O_3 = 10;
    A_H2O_3 = 100 * rho_w * r_p * r_t^3.5;

    gamma_H2O = A_H2O_1 * exp(-(f_ghz - f_H2O_center1).^2 / (2*sigma_H2O_1^2)) + ...
                A_H2O_2 * exp(-(f_ghz - f_H2O_center2).^2 / (2*sigma_H2O_2^2)) + ...
                A_H2O_3 * exp(-(f_ghz - f_H2O_center3).^2 / (2*sigma_H2O_3^2));

    % 避免零值
    gamma_O2 = max(gamma_O2, 1e-6);
    gamma_H2O = max(gamma_H2O, 1e-8);
end

四、代码讲解:为什么这么写?

4.1 为什么吸收系数要按高度分层积分?

matlab 复制代码
alt_layer = 0:0.5:30;
for idx_h = 1:n_layer
    [P, T, rho_w] = standard_atmosphere(alt_layer(idx_h));
    [gO2, gH2O] = gas_absorption(f, P, T, rho_w);
    gamma_sum = gamma_sum + (gO2 + gH2O) * 0.5;
end

天顶衰减是"贯穿整个大气层"的总吸收 ------不是单点值。因为大气参数(压力、温度、水汽密度)随高度剧烈变化,必须分层积分:

A z e n i t h ( f ) = ∫ 0 ∞ γ ( f , h )   d h ≈ ∑ i γ ( f , h i ) ⋅ Δ h A_{zenith}(f) = \int_0^{\infty} \gamma(f, h) \, dh \approx \sum_{i} \gamma(f, h_i) \cdot \Delta h Azenith(f)=∫0∞γ(f,h)dh≈i∑γ(f,hi)⋅Δh

为什么 0.5 km 步长就够? 因为大气参数(尤其是水汽)在 2 km 尺度上变化------0.5 km 步长足以捕捉主要趋势。更细的步长(如 0.1 km)只会增加计算量,对结果改善很小。

4.2 简化吸收模型 vs 完整 ITU-R P.676

matlab 复制代码
gamma_O2 = A_O2_1 * exp(-(f_ghz - f_O2_center1).^2 / (2*sigma_O2_1^2)) + ...
           A_O2_2 * exp(-(f_ghz - f_O2_center2).^2 / (2*sigma_O2_2^2)) + ...
           baseline_O2;

完整 ITU-R P.676 需要求和 44 条氧气谱线 + 34 条水汽谱线,每条谱线的强度、展宽参数都不同------代码复杂,运行慢。

本篇用简化模型 ------每个主峰用高斯近似 ,加一个低频基线 。数量级正确,主要峰位置和强度对得上,代码完全自包含。

适用场景:

  • 教学演示:简化模型足够;
  • 工程链路预算:用完整 ITU-R P.676;
  • 系统设计:用厂商提供的频率-衰减曲线查表。

4.3 为什么水汽随高度衰减得比氧气快?

matlab 复制代码
rho_w = 7.5 * exp(-h_km / 2);   % 水汽:尺度高度 2 km

物理原因:

  • 氧气 是大气主要成分(21%),随高度的压力衰减慢(尺度高度约 8 km);
  • 水汽 只占大气的 0-4%,且温度越低,饱和水汽压越低------遇冷凝结成云/雨。

结果 :水汽集中在对流层底部(0~3 km),20 km 以上几乎没有水汽。

工程含义:

  • 22 GHz、183 GHz 水汽峰:只在地面附近显著,高空可忽略;
  • 60 GHz 氧峰 :在 10~20 km 仍有一定吸收,高空平台(如高空无人机)也必须考虑。

4.4 为什么 60 GHz 是"保密频段"?

matlab 复制代码
A_O2_1 = 15 * r_p^2 * r_t^2.5;   % 峰值 15 dB/km

物理机制 :60 GHz 附近的氧气吸收峰让信号每传播 1 km 损失 15 dB。

工程后果:

  • 传播 1 km:信号衰减 15 dB;
  • 传播 5 km :信号衰减 75 dB------几乎无法接收;
  • 优势 :
    • 天然防窃听------信号传不出几公里;
    • 频谱复用------不同房间用同一频段不干扰;
    • 短距高速------60 GHz 有 7 GHz 带宽,可传多 Gbps。

这就是为什么 60 GHz 被用于:

  • WiGig(IEEE 802.11ad) :短距超高速 WiFi;
  • 军用短距保密通信;
  • 卫星星间链路(真空无氧,60 GHz 无衰减)。

4.5 仰角对衰减的"放大效应"

matlab 复制代码
A_slant = A_zenith / sin(elev);

几何直觉 :信号以仰角 θ \theta θ 穿过大气,路径长度是垂直路径的 1 / sin ⁡ θ 1/\sin\theta 1/sinθ 倍。

仰角 1 / sin ⁡ θ 1/\sin\theta 1/sinθ 相对天顶的倍数
90° 1.0 1.0×
30° 2.0 2.0×
10° 5.76 5.76×
5° 11.5 11.5×

工程含义:

  • 卫星地面站:设置"最低仰角"(通常 5°~10°),低于此角度信号太弱;
  • 雷达低空探测:掠海/掠地目标的大气衰减比高空目标大数倍;
  • GPS:低仰角卫星的信号衰减大,定位精度差。

五、运行结果解读

运行代码后,你将看到 5 张图:

图1:大气吸收谱

  • 上图 :氧气吸收。60 GHz 处峰值 15 dB/km (海平面),10 km 处降到约 2 dB/km,20 km 处几乎为零;
  • 中图 :水汽吸收。22 GHz 峰约 0.2 dB/km ,183 GHz 峰约 30 dB/km(海平面);10 km 处水汽峰几乎消失;
  • 下图 :总吸收。60 GHz 和 183 GHz 两座"大山"清晰可见,35 GHz、94 GHz、140 GHz 处是低谷 ------大气窗口。

图2:60 GHz 氧峰

海平面峰值 15 dB/km ,曲线呈宽钟形 ------因为 60 GHz 附近有 44 条密集谱线叠加成宽峰。

图3:水汽峰

  • 上图:22 GHz 峰,海平面 0.2 dB/km,10 km 处降到 0.01 dB/km;
  • 下图 :183 GHz 峰,海平面 30 dB/km,随高度极快衰减 ------高空几乎无影响。

图4:海拔高度影响

五条曲线对比:

  • 22 GHz、183 GHz(水汽峰) :随高度指数下降,10 km 以上几乎为零;
  • 60 GHz(氧峰) :下降慢,20 km 仍有约 0.1 dB/km;
  • 35 GHz、94 GHz(窗口) :本身就很小,10 km 以上可忽略。

图5:天顶衰减

  • 上图 :天顶衰减谱。60 GHz 处约 200 dB ,183 GHz 处约 500 dB ------信号垂直穿过大气层几乎完全被吸收;
  • 下图 :不同仰角下的总衰减。5° 仰角时,60 GHz 的衰减高达 2300 dB ------完全无法通信。

六、工程实战的四条准则

准则 数学依据 工程做法
1. 传远选窗口,保密选吸收峰 35/94/140 GHz 是窗口 按任务选频段
2. 高空平台衰减小 水汽尺度高度 2 km 无人机/卫星通信衰减小
3. 低仰角衰减暴增 A ∝ 1 / sin ⁡ θ A \propto 1/\sin\theta A∝1/sinθ 卫星站设最低仰角
4. 60 GHz 短距超高速 7 GHz 带宽 + 高衰减 WiGig、保密通信

七、延伸思考

7.1 降雨衰减

本篇只讲了气体吸收 。但雨滴对毫米波的散射和吸收更严重:

A r a i n = a ⋅ R b dB/km A_{rain} = a \cdot R^b \quad \\text{dB/km} Arain=a⋅RbdB/km

其中 R R R 是降雨率 mm/h, a , b a, b a,b 是频率相关的经验系数。在 10 GHz 以上 ,雨衰迅速增大------暴雨天毫米波雷达会"瞎"。

7.2 云衰与雾衰

云 (含水量 0.1~2 g/m³)和雾(能见度 < 1 km)也会衰减毫米波:

A c l o u d = K l ⋅ ρ l dB/km A_{cloud} = K_l \cdot \rho_l \quad \\text{dB/km} Acloud=Kl⋅ρldB/km

其中 K l K_l Kl 是液态水吸收系数, ρ l \rho_l ρl 是液态水密度。在 100 GHz 以上,云衰可达数 dB/km。

7.3 与后续篇章的关系

第26篇讲的是气体吸收 ,第27篇我们将讲雨衰与雾衰 ------液体/固体颗粒 对信号的散射和吸收。两者叠加,就是完整的传播损耗模型:

L t o t a l = L p a t h + L g a s + L r a i n + L c l o u d L_{total} = L_{path} + L_{gas} + L_{rain} + L_{cloud} Ltotal=Lpath+Lgas+Lrain+Lcloud

只有把四项都算清楚,才能准确预测系统的作用距离**。


下一篇预告(第27篇):雨衰与雾衰模型

大气中的液态水 (雨滴、云雾滴)对电磁波有强烈的散射和吸收。相比气体吸收,雨衰的特点是:

  • 频率越高,衰减越强:10 GHz 以下可忽略,100 GHz 以上可达 10 dB/km;
  • 与降雨率非线性 : A ∝ R 1.1 A \propto R^{1.1} A∝R1.1,暴雨的衰减小雨大 10 倍以上;
  • 与极化有关:水平极化比垂直极化衰减大;
  • 与雨滴形状有关:大雨滴扁平化,非球形散射。

我们将会:

  • 推导 ITU-R P.838 雨衰模型;
  • 用 MATLAB 画出不同降雨率下的衰减曲线(1~100 GHz);
  • 分析水平/垂直极化的差异;
  • 复现原书附录 C(图C.3、C.4)。

敬请期待!

相关推荐
菜鸟~noob2331 小时前
【电子战】第25篇:自由空间、双射线与菲涅尔区【含matlab代码】
开发语言·算法·matlab
梅菲塔亚1 小时前
华为云从入门到实战
开发语言·华为云·php
霸道流氓气质1 小时前
幂等性与 Upsert:防止重复操作产生副作用的技术
开发语言·php
牛奔1 小时前
mise 管理多版本 Go 项目
开发语言·前端·chrome·后端·golang
波力海苔夹心脆6751 小时前
C# 视觉检测实战:PLC 按钮触发 VisionPro 检测,OK 亮灯 / NG 灭灯(西门子 PLC,含界面显示与图片存档)
开发语言·经验分享·c#·自动化·视觉检测·.net
2601_962885722 小时前
如何用 Python 计算 BBI 多空指标?
开发语言·python
老王爱玩车2 小时前
动态内存管理
c语言·开发语言·学习·面试
I'm Jie2 小时前
【开源】7 天,我用 Rust 复刻了 FinalShell!Rhost v1.0.0 发布
开发语言·rust·开源