【电子战】第25篇:自由空间、双射线与菲涅尔区【含matlab代码】

第25篇:自由空间、双射线与菲涅尔区

延申阅读:

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

自由空间与大气衰减详细绘图代码 【含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

一、作用:信号"走"了多远,损失了多少?

前24篇,我们讨论了大量的检测、测向、定位算法。所有这些算法都有一个隐含前提:

接收机收到了足够强的信号。

但信号从辐射源传到接收机,中间经历了什么?能量损失了多少?这就是传播模型(Propagation Model) 要回答的问题。

传播模型在电子战中的三大用途:

  1. 作用距离预测:给定发射功率和接收灵敏度,能侦测多远?
  2. 链路预算:系统设计时如何分配功率、增益、损耗?
  3. 定位精度预测:SNR 决定测向/定位精度,而 SNR 由传播损耗决定。

三种最基础的传播模型:

模型 适用场景 核心特征
自由空间 卫星链路、视距通信 功率按 1 / R 2 1/R^2 1/R2 衰减
双射线 地面雷达、低空目标 直射 + 地面反射干涉
菲涅尔区 判断路径是否被阻挡 几何无障碍判据

本篇核心作用:从自由空间路径损耗公式出发,推导双射线模型的干涉图案;引入菲涅尔区的几何定义;用 MATLAB 画出三种模型的损耗曲线;复现原书附录 B(图B.4)。

代码出处 :appB_drawFigures(图B.4)、+prop/ 模块。


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

2.1 自由空间路径损耗(FSPL)

Friis 传输公式 :距离 R R R 处的接收功率为:

P r = P t ⋅ G t ⋅ G r ⋅ ( λ 4 π R ) 2 P_r = P_t \cdot G_t \cdot G_r \cdot \left(\frac{\lambda}{4\pi R}\right)^2 Pr=Pt⋅Gt⋅Gr⋅(4πRλ)2

自由空间路径损耗定义为发射功率与接收功率之比:

L F S P L = P t P r = ( 4 π R ) 2 G t G r λ 2 \boxed{L_{FSPL} = \frac{P_t}{P_r} = \frac{(4\pi R)^2}{G_t G_r \lambda^2}} LFSPL=PrPt=GtGrλ2(4πR)2

对于各向同性天线 ( G t = G r = 1 G_t = G_r = 1 Gt=Gr=1):

L F S P L = ( 4 π R λ ) 2 L_{FSPL} = \left(\frac{4\pi R}{\lambda}\right)^2 LFSPL=(λ4πR)2

以 dB 表示:

L F S P L , d B = 20 log ⁡ 10 ( 4 π R λ ) = 32.45 + 20 log ⁡ 10 ( f M H z ) + 20 log ⁡ 10 ( R k m ) L_{FSPL,dB} = 20\log_{10}\left(\frac{4\pi R}{\lambda}\right) = 32.45 + 20\log_{10}(f_{MHz}) + 20\log_{10}(R_{km}) LFSPL,dB=20log10(λ4πR)=32.45+20log10(fMHz)+20log10(Rkm)

关键特征:

  • 距离每翻一倍 ,损耗增加 6 dB;
  • 频率每翻一倍 ,损耗增加 6 dB;
  • 与距离成 R 2 R^2 R2 关系------双程雷达 则成 R 4 R^4 R4。

2.2 双射线模型(Two-Ray Model)

当目标低空、天线不高时,接收信号包含:

  • 直射路径 :长度 R d i r e c t = R 2 + ( h t − h r ) 2 R_{direct} = \sqrt{R^2 + (h_t - h_r)^2} Rdirect=R2+(ht−hr)2 ;
  • 地面反射路径 :长度 R r e f l e c t e d = R 2 + ( h t + h r ) 2 R_{reflected} = \sqrt{R^2 + (h_t + h_r)^2} Rreflected=R2+(ht+hr)2 。

其中 h t h_t ht 是发射天线高度, h r h_r hr 是接收天线高度。

反射系数 :对于水平极化或垂直极化,掠射角下的反射系数约为 − 1 -1 −1(半波损失)。因此两路信号反相。

总接收功率:

P r = P t G t G r ∣ λ 4 π ( e − j k R d i r e c t R d i r e c t + Γ e − j k R r e f l e c t e d R r e f l e c t e d ) ∣ 2 P_r = P_t G_t G_r \left| \frac{\lambda}{4\pi} \left( \frac{e^{-jkR_{direct}}}{R_{direct}} + \Gamma \frac{e^{-jkR_{reflected}}}{R_{reflected}} \right) \right|^2 Pr=PtGtGr 4πλ(Rdirecte−jkRdirect+ΓRreflectede−jkRreflected) 2

其中 Γ ≈ − 1 \Gamma \approx -1 Γ≈−1, k = 2 π / λ k = 2\pi/\lambda k=2π/λ。

简化结果 (当 R ≫ h t , h r R \gg h_t, h_r R≫ht,hr 时):

L t w o − r a y ≈ ( R 2 h t h r ) 2 L_{two-ray} \approx \left( \frac{R^2}{h_t h_r} \right)^2 Ltwo−ray≈(hthrR2)2

关键特征:

  • 距离每翻一倍 ,损耗增加 12 dB(比自由空间多一倍);
  • 与天线高度的平方成反比 ------天线越高,损耗越小;
  • 存在干涉零点 ------当 R r e f l e c t e d − R d i r e c t = n λ R_{reflected} - R_{direct} = n\lambda Rreflected−Rdirect=nλ 时,两路反相,信号完全抵消。

干涉零点的距离:

R n u l l ≈ 2 h t h r λ ⋅ 1 n , n = 1 , 3 , 5 , ... R_{null} \approx \frac{2 h_t h_r}{\lambda} \cdot \frac{1}{n}, \quad n = 1, 3, 5, \ldots Rnull≈λ2hthr⋅n1,n=1,3,5,...

2.3 菲涅尔区(Fresnel Zone)

问题:直射路径上有一个障碍物(山、建筑),会不会阻挡信号?

菲涅尔区 给出答案。定义第一菲涅尔区半径为:

R F Z = λ ⋅ d 1 ⋅ d 2 d 1 + d 2 \boxed{R_{FZ} = \sqrt{\frac{\lambda \cdot d_1 \cdot d_2}{d_1 + d_2}}} RFZ=d1+d2λ⋅d1⋅d2

其中 d 1 d_1 d1、 d 2 d_2 d2 是障碍物到发射端和接收端的距离。

工程判据:

  • 障碍物完全在菲涅尔区外:信号近似自由空间传播,无额外损耗;
  • 障碍物占据菲涅尔区 20% 以内:损耗 < 1 dB,可忽略;
  • 障碍物占据菲涅尔区 40% 以上:损耗显著增大;
  • 障碍物占据超过 60%:损耗急剧上升,接近阴影区。

最低天线高度 :如果 d 1 = d 2 = R / 2 d_1 = d_2 = R/2 d1=d2=R/2(障碍物在中点),第一菲涅尔区半径为:

R F Z = 1 2 λ R R_{FZ} = \frac{1}{2}\sqrt{\lambda R} RFZ=21λR

要保证"畅通",天线需高出障碍物至少 0.6 倍 这个值:

h m i n ≈ 0.6 ⋅ 1 2 λ R = 0.3 λ R h_{min} \approx 0.6 \cdot \frac{1}{2}\sqrt{\lambda R} = 0.3\sqrt{\lambda R} hmin≈0.6⋅21λR =0.3λR

这就是为什么微波链路的天线要建得很高------不仅仅是"看得远",而是要"让菲涅尔区空旷"。

2.4 三种模型的对比

距离范围 主导模型 损耗斜率
R < R b r e a k R < R_{break} R<Rbreak 自由空间 20 dB/decade
R > R b r e a k R > R_{break} R>Rbreak 双射线 40 dB/decade

转折距离 R b r e a k R_{break} Rbreak 由下式确定:

R b r e a k = 4 h t h r λ R_{break} = \frac{4 h_t h_r}{\lambda} Rbreak=λ4hthr

这个距离标志着从"直射主导"过渡到"反射主导"。


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

matlab 复制代码
%% ========================================================================
% 第25篇:自由空间、双射线与菲涅尔区
% 参考出处:O'Donoughue, "Emitter Detection and Geolocation for EW",
%           appB_drawFigures.m, Figure B.4
%           https://github.com/nodonoughue/emitter-detection-book
% ========================================================================

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

c = 3e8;

%% ==================== 图1:自由空间路径损耗 ====================

fprintf('======= 自由空间路径损耗 =======\n');

% 距离扫描
R_m = logspace(1, 6, 500);   % 10 m 到 1000 km
R_km = R_m / 1e3;

% 频率扫描
freq_set = [1e9, 3e9, 10e9];   % 1 GHz, 3 GHz, 10 GHz
freq_names = {'L 波段 (1 GHz)', 'S 波段 (3 GHz)', 'X 波段 (10 GHz)'};

figure('Name','Fig1 FSPL','Position',[80 80 900 600]);
hold on;
colors = lines(numel(freq_set));

for idx = 1:numel(freq_set)
    f = freq_set(idx);
    lambda = c / f;
    L_dB = 20*log10(4*pi*R_m / lambda);

    semilogx(R_km, L_dB, 'Color', colors(idx,:), 'LineWidth', 2, ...
        'DisplayName', freq_names{idx});

    % 标注关键点
    if idx == 1
        % 1 km 处的损耗
        L_1km = 20*log10(4*pi*1e3 / lambda);
        plot(1, L_1km, 'o', 'Color', colors(idx,:), ...
            'MarkerSize', 12, 'MarkerFaceColor', colors(idx,:), ...
            'HandleVisibility', 'off');
        text(1.2, L_1km, sprintf('%.1f dB', L_1km), 'FontSize', 10);
    end
end

xlabel('距离 R [km]'); ylabel('路径损耗 [dB]');
title('自由空间路径损耗 vs 距离');
grid on; legend('Location', 'northwest');
xlim([0.01, 1000]); ylim([60, 180]);

% 标注 6 dB/倍频关系
text(100, 140, '距离翻倍 → +6 dB', 'FontSize', 11, ...
    'BackgroundColor', 'w', 'EdgeColor', 'k');

%% ==================== 图2:双射线模型 ====================

fprintf('\n======= 双射线模型 =======\n');

% 参数
ht_set = [10, 30, 100];    % 发射天线高度 [m]
hr = 2;                     % 接收天线高度 [m]
f = 1e9;                    % 1 GHz
lambda = c / f;

R_m = logspace(1, 5, 500);
R_km = R_m / 1e3;

figure('Name','Fig2 Two-Ray','Position',[100 100 900 600]);
hold on;
colors = lines(numel(ht_set));

for idx = 1:numel(ht_set)
    ht = ht_set(idx);

    % 自由空间
    L_fspl = 20*log10(4*pi*R_m / lambda);

    % 双射线(简化公式,R >> ht, hr)
    L_two_ray = 20*log10(R_m.^2 / (ht * hr));

    % 转折距离
    R_break = 4 * ht * hr / lambda;
    fprintf('ht = %d m 的转折距离: %.1f m\n', ht, R_break);

    % 组合模型:R < R_break 用自由空间,R > R_break 用双射线
    L_combined = zeros(size(R_m));
    L_combined(R_m < R_break) = L_fspl(R_m < R_break);
    L_combined(R_m >= R_break) = L_two_ray(R_m >= R_break);

    semilogx(R_km, L_combined, 'Color', colors(idx,:), 'LineWidth', 2, ...
        'DisplayName', sprintf('h_t = %d m', ht));

    % 标注转折点
    plot(R_break/1e3, interp1(R_km, L_combined, R_break/1e3), 'o', ...
        'Color', colors(idx,:), 'MarkerSize', 12, ...
        'MarkerFaceColor', colors(idx,:), 'HandleVisibility', 'off');
end

% 参考:纯自由空间
L_fspl_ref = 20*log10(4*pi*R_m / lambda);
semilogx(R_km, L_fspl_ref, 'k--', 'LineWidth', 1.5, ...
    'DisplayName', '自由空间(参考)');

xlabel('距离 R [km]'); ylabel('路径损耗 [dB]');
title('双射线模型:直射 + 地面反射');
grid on; legend('Location', 'northwest');
xlim([0.01, 100]); ylim([40, 200]);

% 标注斜率变化
text(0.05, 150, '自由空间: 20 dB/decade', 'FontSize', 10, ...
    'BackgroundColor', 'w');
text(5, 180, '双射线: 40 dB/decade', 'FontSize', 10, ...
    'BackgroundColor', 'w');

%% ==================== 图3:双射线干涉图案 ====================

fprintf('\n======= 双射线干涉图案 =======\n');

% 固定天线高度
ht = 30;
hr = 2;
f = 1e9;
lambda = c / f;

R_fine = linspace(100, 5000, 5000);   % 100 m 到 5 km

% 精确的双射线模型
R_direct = sqrt(R_fine.^2 + (ht - hr)^2);
R_reflected = sqrt(R_fine.^2 + (ht + hr)^2);

% 反射系数 = -1(掠射)
k = 2*pi/lambda;

% 复振幅
E_total = exp(-1j*k*R_direct)./R_direct - ...
          exp(-1j*k*R_reflected)./R_reflected;

% 路径损耗
L_two_ray = -20*log10(abs(E_total) * lambda/(4*pi));

% 自由空间参考
L_fspl = 20*log10(4*pi*R_fine / lambda);

figure('Name','Fig3 Interference','Position',[120 120 900 600]);
plot(R_fine/1e3, L_two_ray, 'b-', 'LineWidth', 1.5, ...
    'DisplayName', '双射线(精确)');
hold on;
plot(R_fine/1e3, L_fspl, 'r--', 'LineWidth', 1.5, ...
    'DisplayName', '自由空间');
xlabel('距离 R [km]'); ylabel('路径损耗 [dB]');
title('双射线干涉图案:零点与峰值交替');
grid on; legend('Location', 'northwest');
xlim([0.1, 5]); ylim([60, 120]);

% 标注几个零点
R_null_est = 2*ht*hr/lambda ./ (1:2:9);
for idx = 1:length(R_null_est)
    if R_null_est(idx) < 5000 && R_null_est(idx) > 100
        xline(R_null_est(idx)/1e3, 'g:', 'LineWidth', 1);
    end
end
text(0.5, 110, '零点(干涉抵消)', 'FontSize', 10, 'Color', 'g');

%% ==================== 图4:菲涅尔区几何 ====================

fprintf('\n======= 菲涅尔区几何 =======\n');

% 场景:发射端和接收端相距 d
d_total = 10000;   % 10 km
f = 1e9;
lambda = c / f;

% 障碍物位置扫描
d1_set = [1000, 3000, 5000, 7000, 9000];

% 第一菲涅尔区半径
R_FZ = sqrt(lambda * d1_set .* (d_total - d1_set) / d_total);

fprintf('第一菲涅尔区半径:\n');
fprintf('%-10s %-15s\n', 'd1 [m]', 'R_FZ [m]');
fprintf('------------------------\n');
for idx = 1:length(d1_set)
    fprintf('%-10d %-15.2f\n', d1_set(idx), R_FZ(idx));
end

% 绘图
figure('Name','Fig4 Fresnel Zone','Position',[140 140 900 600]);

% 画地形
x_terrain = linspace(0, d_total, 1000);
h_terrain = 20 + 10*sin(2*pi*x_terrain/d_total) + ...
            5*cos(4*pi*x_terrain/d_total);

fill([x_terrain, fliplr(x_terrain)]/1e3, ...
     [h_terrain, zeros(size(h_terrain))], ...
     [0.7, 0.5, 0.3], 'FaceAlpha', 0.5, 'EdgeColor', 'k');
hold on;

% 天线高度
ht = 50;
hr = 50;

% 天线位置
plot([0, d_total]/1e3, [ht, hr], 'ks', 'MarkerSize', 14, ...
    'MarkerFaceColor', 'k');

% 视距线
plot([0, d_total]/1e3, [ht, hr], 'b-', 'LineWidth', 1.5);

% 菲涅尔区包络
x_FZ = linspace(0, d_total, 200);
R_FZ_env = sqrt(lambda * x_FZ .* (d_total - x_FZ) / d_total);

% 上边界
h_upper = ht + (hr - ht) * x_FZ/d_total + R_FZ_env;
h_lower = ht + (hr - ht) * x_FZ/d_total - R_FZ_env;

plot(x_FZ/1e3, h_upper, 'r--', 'LineWidth', 2);
plot(x_FZ/1e3, h_lower, 'r--', 'LineWidth', 2);
fill([x_FZ, fliplr(x_FZ)]/1e3, [h_upper, fliplr(h_lower)], ...
    'r', 'FaceAlpha', 0.1, 'EdgeColor', 'none');

% 标注
xlabel('距离 [km]'); ylabel('高度 [m]');
title('菲涅尔区几何:天线高度与视距传播');
grid on; legend({'地形', '天线', '视距', '第一菲涅尔区'}, ...
    'Location', 'northwest');
xlim([0, 10]); ylim([0, 100]);

% 标注最高点
[max_R_FZ, idx_max] = max(R_FZ_env);
plot(x_FZ(idx_max)/1e3, ht + (hr-ht)*x_FZ(idx_max)/d_total, 'ro', ...
    'MarkerSize', 12, 'MarkerFaceColor', 'r');
text(x_FZ(idx_max)/1e3 + 0.2, ht + (hr-ht)*x_FZ(idx_max)/d_total + 10, ...
    sprintf('R_{FZ,max} = %.1f m', max_R_FZ), 'FontSize', 11);

%% ==================== 图5:天线高度对损耗的影响 ====================

fprintf('\n======= 天线高度对损耗的影响 =======\n');

% 参数
ht_set = [5, 10, 20, 50, 100];
hr = 2;
f = 1e9;
lambda = c / f;
R = 5000;   % 5 km

L_two_ray_set = zeros(size(ht_set));
for idx = 1:numel(ht_set)
    ht = ht_set(idx);
    L_two_ray_set(idx) = 20*log10(R^2 / (ht * hr));
end

figure('Name','Fig5 Antenna Height','Position',[160 160 900 600]);

subplot(1,2,1);
bar(1:numel(ht_set), L_two_ray_set);
set(gca, 'XTickLabel', arrayfun(@(x) sprintf('h_t=%d m', x), ht_set, ...
    'UniformOutput', false));
ylabel('双射线路径损耗 [dB]');
title(sprintf('天线高度对损耗的影响 (R=%d km)', R/1e3));
grid on;
for i = 1:numel(ht_set)
    text(i, L_two_ray_set(i)+1, sprintf('%.1f', L_two_ray_set(i)), ...
        'HorizontalAlignment', 'center', 'FontSize', 11);
end

subplot(1,2,2);
semilogy(ht_set, 10.^(L_two_ray_set/10), 'bo-', 'LineWidth', 2, ...
    'MarkerSize', 10);
xlabel('天线高度 h_t [m]'); ylabel('路径损耗(线性)');
title('损耗与天线高度的平方反比关系');
grid on;

sgtitle('双射线模型:天线越高,损耗越小', ...
    'FontSize', 14, 'FontWeight', 'bold');

%% ==================== 图6:三种模型综合对比 ====================

fprintf('\n======= 三种模型综合对比 =======\n');

R_m = logspace(1, 5, 500);
R_km = R_m / 1e3;

% 参数
f = 1e9;
lambda = c / f;
ht = 30;
hr = 2;

% 自由空间
L_fspl = 20*log10(4*pi*R_m / lambda);

% 双射线(简化)
L_two_ray = 20*log10(R_m.^2 / (ht * hr));

% 组合模型
R_break = 4 * ht * hr / lambda;
L_combined = L_fspl;
L_combined(R_m > R_break) = L_two_ray(R_m > R_break);

% 菲涅尔区半径(中点处)
R_FZ = 0.5 * sqrt(lambda * R_m);

figure('Name','Fig6 Model Comparison','Position',[180 180 900 700]);

subplot(2,1,1);
semilogx(R_km, L_fspl, 'b--', 'LineWidth', 2, 'DisplayName', '自由空间');
hold on;
semilogx(R_km, L_two_ray, 'r-.', 'LineWidth', 2, 'DisplayName', '双射线');
semilogx(R_km, L_combined, 'k-', 'LineWidth', 2.5, 'DisplayName', '组合模型');
xline(R_break/1e3, 'g:', 'LineWidth', 2, 'DisplayName', ...
    sprintf('转折距离 %.0f m', R_break));
xlabel('距离 R [km]'); ylabel('路径损耗 [dB]');
title('路径损耗模型对比');
grid on; legend('Location', 'northwest');
xlim([0.01, 100]); ylim([40, 200]);

subplot(2,1,2);
semilogx(R_km, R_FZ, 'm-', 'LineWidth', 2);
xlabel('距离 R [km]'); ylabel('第一菲涅尔区半径 [m]');
title('菲涅尔区半径 vs 距离(中点处)');
grid on;
xlim([0.01, 100]);

sgtitle('三种传播模型综合对比', ...
    'FontSize', 14, 'FontWeight', 'bold');

fprintf('\n转折距离: %.1f m = %.3f km\n', R_break, R_break/1e3);
fprintf('在 1 km 处,菲涅尔区半径 = %.2f m\n', 0.5*sqrt(lambda*1000));
fprintf('在 10 km 处,菲涅尔区半径 = %.2f m\n', 0.5*sqrt(lambda*10000));

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

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

4.1 为什么双射线模型在远距离"损耗更大"?

matlab 复制代码
L_two_ray = 20*log10(R_m.^2 / (ht * hr));

物理直觉 :当目标很远时,直射路径和反射路径几乎平行 ,两条路径的长度差很小。但由于反射系数为 − 1 -1 −1(半波损失),两路信号反相,几乎完全抵消。

数学推导 :当 R ≫ h t , h r R \gg h_t, h_r R≫ht,hr 时:

R d i r e c t ≈ R , R r e f l e c t e d ≈ R + 2 h t h r R R_{direct} \approx R, \quad R_{reflected} \approx R + \frac{2 h_t h_r}{R} Rdirect≈R,Rreflected≈R+R2hthr

路径差 Δ R ≈ 2 h t h r / R \Delta R \approx 2h_t h_r / R ΔR≈2hthr/R。当 Δ R ≪ λ \Delta R \ll \lambda ΔR≪λ 时,相位差 Δ ϕ ≈ 0 \Delta\phi \approx 0 Δϕ≈0,但反射系数引入 π \pi π 相位差------所以两路反相。

接收场强:

∣ E ∣ ≈ 1 R ⋅ k Δ R = 2 π λ ⋅ 2 h t h r R 2 |E| \approx \frac{1}{R} \cdot k \Delta R = \frac{2\pi}{\lambda} \cdot \frac{2 h_t h_r}{R^2} ∣E∣≈R1⋅kΔR=λ2π⋅R22hthr

路径损耗:

L = ( 4 π R λ ∣ E ∣ ) 2 ∝ R 4 ( h t h r ) 2 L = \left(\frac{4\pi R}{\lambda |E|}\right)^2 \propto \frac{R^4}{(h_t h_r)^2} L=(λ∣E∣4πR)2∝(hthr)2R4

距离四次方关系 → dB 表示下 40 dB/decade。

4.2 转折距离的物理意义

matlab 复制代码
R_break = 4 * ht * hr / lambda;

推导 :当路径差 Δ R = λ / 2 \Delta R = \lambda/2 ΔR=λ/2 时,相位差恰好为 π \pi π,直射和反射从"增强"变为"抵消"。

R b r e a k ≈ 4 h t h r λ R_{break} \approx \frac{4 h_t h_r}{\lambda} Rbreak≈λ4hthr

工程含义:

  • R < R b r e a k R < R_{break} R<Rbreak:直射主导,近似自由空间;
  • R > R b r e a k R > R_{break} R>Rbreak:反射主导,双射线模型。

对于 h t = 30 h_t = 30 ht=30 m、 h r = 2 h_r = 2 hr=2 m、 f = 1 f = 1 f=1 GHz, R b r e a k = 800 R_{break} = 800 Rbreak=800 m。这就是为什么蜂窝基站的天线通常只有几十米高------覆盖范围(1-10 km)远超转折距离,双射线模型是主战场。

4.3 菲涅尔区半径的"最大在中点"

matlab 复制代码
R_FZ = sqrt(lambda * d1 .* (d2) / d_total);

关键 : d 1 d 2 d_1 d_2 d1d2 在 d 1 = d 2 = d t o t a l / 2 d_1 = d_2 = d_{total}/2 d1=d2=dtotal/2 处取得最大值:

R F Z , m a x = λ ⋅ d t o t a l 2 ⋅ d t o t a l 2 / d t o t a l = 1 2 λ d t o t a l R_{FZ,max} = \sqrt{\lambda \cdot \frac{d_{total}}{2} \cdot \frac{d_{total}}{2} / d_{total}} = \frac{1}{2}\sqrt{\lambda d_{total}} RFZ,max=λ⋅2dtotal⋅2dtotal/dtotal =21λdtotal

物理直觉 :菲涅尔区是"椭圆",障碍物越靠近路径中间,它需要"让出"的空间越大------因为椭圆的腰在中间最粗。

工程用法 :检查链路是否被阻挡时,只需检查障碍物最高点,看看它是否侵入菲涅尔区。通常要求"第一菲涅尔区 60% 空闲"。

4.4 为什么图3要画"干涉图案"?

matlab 复制代码
E_total = exp(-1j*k*R_direct)./R_direct - exp(-1j*k*R_reflected)./R_reflected;

精确的双射线模型 不需要简化------它直接计算直射和反射的复振幅,然后叠加。干涉图案自然显现:

  • 零点 :两路反相,完全抵消------路径损耗无穷大;
  • 峰值 :两路同相,增强------路径损耗比自由空间还小。

工程含义 :在某些距离上,信号会突然"消失"------这不是设备故障,而是物理上的干涉。雷达探测时需要在多个距离上扫描,避免这种"盲区"。

4.5 组合模型的"三区域"

matlab 复制代码
L_combined = L_fspl;
L_combined(R_m > R_break) = L_two_ray(R_m > R_break);

分段模型是工程上最常用的近似:

区域 距离 主导机制 斜率
近场 R < R b r e a k R < R_{break} R<Rbreak 直射 20 dB/dec
远场 R > R b r e a k R > R_{break} R>Rbreak 反射 40 dB/dec

为什么分段? 因为精确的双射线模型有无数个零点,工程上不方便使用。分段近似平滑掉了这些零点,让链路预算更简单。

代价 :在某些特定距离上,近似模型会高估或低估损耗。但对于系统设计,分段模型足够。


五、运行结果解读

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

图1:自由空间路径损耗

三条平行的直线(对数坐标下)------斜率相同(6 dB/倍频) ,但垂直偏移不同(频率越高,损耗越大)。

图2:双射线模型

三条曲线( h t = 10 , 30 , 100 h_t = 10, 30, 100 ht=10,30,100 m):

  • 近处:所有曲线与自由空间重合;
  • 远处:曲线变陡(40 dB/dec),且天线越高,损耗越小;
  • 转折点 :由 plot(R_break/1e3, ...) 标注, h t h_t ht 越大,转折越远。

图3:双射线干涉图案

蓝色曲线(精确双射线)在自由空间参考线(红色)上下剧烈振荡:

  • 谷点(信号增强)比自由空间还好;
  • 峰点(信号抵消)比自由空间差很多。

绿色虚线标注了几个零点位置------它们正好在 R n u l l = 2 h t h r / ( n λ ) R_{null} = 2h_t h_r/(n\lambda) Rnull=2hthr/(nλ) 处。

图4:菲涅尔区几何

  • 棕色:地面地形(起伏);
  • 黑色:天线;
  • 蓝色:视距线;
  • 红色虚线 + 淡红填充:第一菲涅尔区。

可以看到,菲涅尔区在中间最"胖"------如果地形的高点侵入这个区域,信号会被阻挡。

图5:天线高度对损耗的影响

  • 左图:天线高度从 5 m 增到 100 m,损耗从约 130 dB 降到约 110 dB;
  • 右图 :对数坐标下,损耗与 h t h_t ht 成线性关系 ------验证了 L ∝ 1 / ( h t h r ) L \propto 1/(h_t h_r) L∝1/(hthr)。

图6:三种模型综合对比

  • 上图:自由空间(蓝虚线)、双射线(红点线)、组合模型(黑实线);
  • 下图 :菲涅尔区半径随距离增长------距离越远,需要的净空越大。

六、工程实战的四条准则

准则 数学依据 工程做法
1. 远距离用双射线模型 L ∝ R 4 / ( h t h r ) 2 L \propto R^4/(h_t h_r)^2 L∝R4/(hthr)2 地面雷达/通信链路必用
2. 天线越高越好 损耗 ∝ 1 / ( h t h r ) \propto 1/(h_t h_r) ∝1/(hthr) 尽可能增高,但受场地限制
3. 菲涅尔区必须净空 60% 60% 以内损耗 < 1 dB 微波链路规划必查
4. 干涉零点要避开 R n u l l = 2 h t h r / ( n λ ) R_{null} = 2h_t h_r/(n\lambda) Rnull=2hthr/(nλ) 多频/多站冗余

七、延伸思考

7.1 双射线模型的"精确 vs 近似"

本代码同时用了精确模型 (复振幅叠加)和简化模型 ( L = R 4 / ( h t h r ) 2 L = R^4/(h_t h_r)^2 L=R4/(hthr)2)。

简化模型的适用条件 : R ≫ h t , h r R \gg h_t, h_r R≫ht,hr,且 Δ R ≪ λ \Delta R \ll \lambda ΔR≪λ。

不适用场景:

  • 近距离( R < R b r e a k R < R_{break} R<Rbreak):简化为负损耗(物理上不可能);
  • 毫米波( λ \lambda λ 很小):干涉图案极其密集,简化模型误差大。

7.2 多径效应在电子战中的影响

双射线模型是两径 ,真实环境可能有多径(建筑反射、山体反射)。这会导致:

  • 测向误差:AOA测向接收到的方向不再是"直射方向";
  • TDOA模糊:多径延迟可能被误判为"另一个目标";
  • 衰落:信号强度随位置剧烈波动。

工程对策:

  • 空间分集:多个天线间距 > λ/2,独立衰落;
  • 频率分集:多个频点,独立衰落;
  • RAKE接收:主动利用多径能量(CDMA系统)。

7.3 与后续篇章的关系

本篇讲的是路径损耗 ------信号"弱"了多少。第26篇我们将讲大气衰减 ------信号在传播途中被吸收了多少。两者的区别:

  • 路径损耗:几何效应,与距离、天线高度有关;
  • 大气衰减:物理效应,与频率、大气成分有关。

两者叠加才是总传播损耗。敬请期待!


下一篇预告(第26篇):大气衰减------氧气与水汽吸收

信号穿过大气层时,会被氧气和水汽分子吸收 ------能量转化为分子振动/转动,信号变弱。

这种吸收有强烈的频率选择性:

  • 60 GHz :氧气吸收峰,衰减高达 15 dB/km------保密通信的天然屏障;
  • 22 GHz:水汽吸收峰,衰减约 0.2 dB/km;
  • 毫米波:雨衰 + 氧衰,总衰减可达几十 dB/km。

我们将会:

  • 推导氧气/水汽吸收系数的物理模型;
  • 用 MATLAB 画出1~350 GHz 的衰减谱------看清吸收峰的位置;
  • 分析海拔高度对衰减的影响------高空干燥,衰减小;
  • 复现原书附录 C(图C.2、C.5)。

敬请期待!

相关推荐
梅菲塔亚1 小时前
华为云从入门到实战
开发语言·华为云·php
霸道流氓气质1 小时前
幂等性与 Upsert:防止重复操作产生副作用的技术
开发语言·php
地平线开发者1 小时前
地平线征程6M YOLOv8s 部署
算法·自动驾驶
Run_Teenage1 小时前
算法:Manacher(马拉车)算法、中心扩展算法
算法
牛奔1 小时前
mise 管理多版本 Go 项目
开发语言·前端·chrome·后端·golang
波力海苔夹心脆6751 小时前
C# 视觉检测实战:PLC 按钮触发 VisionPro 检测,OK 亮灯 / NG 灭灯(西门子 PLC,含界面显示与图片存档)
开发语言·经验分享·c#·自动化·视觉检测·.net
2601_962885722 小时前
如何用 Python 计算 BBI 多空指标?
开发语言·python
Tisfy2 小时前
LeetCode 0301.删除无效的括号:二进制枚举 / 回溯
算法·leetcode·字符串·题解·回溯·括号匹配·二进制枚举