天线增益方向图是怎么绘制的?
从软件角度绘制天线增益图,本质是将天线在不同方向上的增益值通过可视化方式呈现,核心流程包括数据获取、预处理、坐标系映射、图形渲染四个关键步骤。以下从技术细节展开说明:
一、数据获取:增益值的来源
天线增益的计算或测量数据是绘图的基础,主要通过两种方式获取:
1. 仿真数据(数值方法)
通过电磁仿真软件(如HFSS、CST、FEKO)求解麦克斯韦方程,得到天线的远场辐射方向图。仿真软件会输出球坐标系下的离散点数据,包含:
- 方位角(θ,极角,与天线主瓣轴线的夹角,范围0°~180°);
- 俯仰角(φ,方位角,绕轴线的旋转角度,范围0°~360°);
- 对应方向的增益值(单位dBi,相对于理想无方向性天线的比值)。
例如,HFSS中可通过“Radiation Pattern”工具导出特定频率下的远场数据(.csv或.txt格式),包含θ、φ、Gain三列。
2. 实测数据(实验测量)
通过微波暗室中的天线测量系统(如矢量网络分析仪+转台)实测得到。测量时,天线绕水平和垂直轴旋转,记录不同角度下的接收功率,结合参考天线(如标准增益喇叭)的校准数据,最终计算得到实测增益值。
实测数据同样以离散点形式存储,需注意校准修正(如探头方向性、暗室反射干扰等)。
二、数据预处理:从离散点到连续曲面
原始数据通常是稀疏的离散点(例如仿真软件默认输出θ=0°, 10°, 20°,…, 180°,φ=0°, 30°, 60°,…, 360°),需通过预处理生成平滑的连续曲线或曲面,常用方法包括:
1. 数据插值
- 目的:填补稀疏点之间的空白,使增益图更平滑。
- 方法:
- 球谐函数展开:利用球谐函数对远场方向图进行拟合(适用于各向同性或对称天线),可生成连续的数学表达式。
- 二维插值:对φ和θ分别插值。例如,固定θ时,对φ方向使用线性插值或样条插值(如Python的
scipy.interpolate.griddata
);或使用径向基函数(RBF)处理非均匀分布的数据点。 - 降采样:若数据过密(如实测点过多),可按角度间隔(如1°步长)重新采样,降低计算量。
2. 归一化处理
增益图的纵轴通常以最大增益为参考(即归一化增益),例如将所有增益值减去最大增益值,使主瓣峰值对应0dB,便于观察旁瓣抑制和方向性。公式:
Gnorm(θ,ϕ)=G(θ,ϕ)−Gmax
三、坐标系映射:选择合适的可视化方式
天线增益图通常采用极坐标系(二维)或球坐标系(三维),具体取决于需求:
1. 二维极坐标图(最常用)
- 适用场景:展示天线在某一平面内的方向性(如E面:θ=90°,φ=0°~360°;或H面:θ=0°/180°,φ=0°~360°)。
- 坐标映射:
- 极径(r):表示归一化增益(或原始增益);
- 极角(θ):表示方位角(φ)。
- 软件实现:
- MATLAB:使用
polarplot(phi, gain_norm)
函数,其中phi
为方位角数组,gain_norm
为归一化增益数组。 - Python(Matplotlib):通过
plt.subplot(projection='polar')
创建极坐标子图,调用ax.plot(phi, gain_norm)
绘制。
- MATLAB:使用
2. 三维球坐标图
- 适用场景:展示天线全空间的方向性(如卫星通信天线的全球覆盖分析)。
- 坐标映射:
- 半径(r):增益值;
- θ(极角)和φ(方位角):共同确定球面上的点。
- 软件实现:
- MATLAB:使用
surf(theta, phi, gain_matrix)
绘制三维曲面,配合view(az, el)
调整视角。 - Python(Plotly):利用
plotly.graph_objects.Surface
生成交互式三维图。
- MATLAB:使用
3. 切面图(二维直角坐标)
- 适用场景:对比不同平面的方向性(如同时展示E面和H面)。
- 坐标映射:
- 横轴(x):角度(θ或φ);
- 纵轴(y):增益值。
- 软件实现:直接使用
plot(x, y)
绘制折线图或平滑曲线。
四、图形渲染:细节优化与标注
绘制完成后,需通过后处理提升可读性,关键步骤包括:
1. 网格与刻度
- 极坐标图添加径向网格线(如每5dB一条),角度刻度标注0°、90°、180°、270°;
- 三维图添加等高线(contour)或半透明填充,突出主瓣和旁瓣结构。
2. 旁瓣标注
- 标记主要旁瓣的峰值增益(如“-10dB旁瓣”),通常通过检测增益曲线的局部极大值点实现(如使用
scipy.signal.find_peaks
算法)。
3. 标题与注释
- 添加频率(如“2.4GHz”)、天线类型(如“抛物面天线”)、增益单位(dBi)等信息;
- 若为归一化图,标注“归一化至最大增益”。
4. 颜色与透明度(三维图)
- 三维图中,增益值用颜色映射(如Jet、Viridis),高增益区域用暖色调(红/黄),低增益用冷色调(蓝/绿);
- 调整透明度(alpha=0.5~0.8),避免遮挡内部结构。
典型软件工具链示例
以Python为例,绘制二维极坐标增益图的简化代码如下:
import numpy as np
import matplotlib.pyplot as plt# 模拟仿真数据(θ=90°平面,φ=0°~360°,增益随角度变化)
phi = np.linspace(0, 360, 361) # 方位角(度)
gain_raw = 10 * np.log10(1 + 0.5 * np.sin(np.deg2rad(phi-90)**2)) # 模拟主瓣+旁瓣的增益曲线
gain_max = np.max(gain_raw)
gain_norm = gain_raw - gain_max # 归一化至最大增益# 极坐标绘图
plt.figure(figsize=(8, 8))
ax = plt.subplot(projection='polar')
ax.plot(np.deg2rad(phi), gain_norm, 'b-', linewidth=2) # 转换为弧度
ax.set_theta_zero_location('N') # 0°指向顶部(北)
ax.set_theta_direction(-1) # 顺时针角度增加
ax.grid(True, linestyle='--', alpha=0.7)
ax.set_title('天线增益图(E面,2.4GHz)', va='bottom')
ax.set_rlabel_position(22.5) # 调整半径标签位置
plt.ylim(-30, 5) # 设置半径范围(-30dB到+5dB)
plt.show()
MATLAB代码:天线增益图绘制
% 天线增益图绘制示例(MATLAB)
% 功能:模拟天线远场数据,绘制二维极坐标图、三维球坐标图及切面图
% 作者:XXX
% 日期:2025-07-24%% ==================== 1. 模拟天线远场数据 ====================
% 假设天线工作频率:2.4GHz(波长λ=0.125m)
fc = 2.4e9; % 中心频率(Hz)
lambda = 3e8 / fc; % 波长(m)% 生成角度网格(球坐标系)
theta = linspace(0, pi, 181); % 极角(0°~180°,弧度)
phi = linspace(0, 2*pi, 361); % 方位角(0°~360°,弧度)
[Theta, Phi] = meshgrid(theta, phi);% 生成二维网格(Theta: 181x361,Phi: 181x361)% ==================== 2. 模拟增益函数(方向图模型) ====================
% 采用典型的"主瓣+旁瓣"模型(可替换为实际仿真/实测数据)
% 主瓣方向:θ=π/2(垂直极化天线的水平方向),φ=0°(方位角0°)
% 主瓣宽度:30°(半功率波束宽度HPBW=30°)
% 旁瓣电平:-15dB(第一旁瓣)% 计算相对于主瓣中心的角度偏差(弧度)
theta0 = pi/2; % 主瓣中心极角(垂直方向)
phi0 = 0; % 主瓣中心方位角
delta_theta = Theta - theta0; % 极角偏差
delta_phi = Phi - phi0; % 方位角偏差% 主瓣方向图(高斯近似,半功率波束宽度HPBW=30°→σ=HPBW/(2*sqrt(2*ln2))≈8.6°)
HPBW = deg2rad(30); % 半功率波束宽度(弧度)
sigma_theta = HPBW / (2*sqrt(2*log(2))); % 高斯分布标准差(θ方向)
sigma_phi = sigma_theta; % 方位角方向标准差(假设各向同性)% 主瓣增益(高斯函数)
G_main = 30 - 12*( (delta_theta/sigma_theta).^2 + (delta_phi/sigma_phi).^2 ); % 30dBi为主瓣峰值% 旁瓣抑制(加入余弦项模拟旁瓣衰减)
G_side = 20*log10(1 + 0.5*cos(Theta)); % 简单旁瓣模型(可根据实际调整)% 总增益(主瓣+旁瓣,限制最小增益为-50dBi)
Gain = G_main + G_side;
Gain(Gain < -50) = -50; % 截断过低增益(避免绘图失真)%% ==================== 3. 数据预处理 ====================
% 归一化增益(以最大增益为参考,突出方向性)
Gain_max = max(Gain(:)); % 找到全局最大增益(应接近30dBi)
Gain_norm = Gain - Gain_max; % 归一化至0dB(主瓣峰值)% 降采样(可选:若数据过密,按1°步长采样,降低计算量)
theta_resample = linspace(0, pi, 181); % 保持原分辨率(1°步长)
phi_resample = linspace(0, 2*pi, 361); % 保持原分辨率(1°步长)
[Theta_rs, Phi_rs] = meshgrid(theta_resample, phi_resample);%% ==================== 4. 绘制二维极坐标图(E面/H面) ====================
figure('Position', [100 100 1000 600], 'Color', 'w');% ------------------- E面(θ=90°,φ=0°~360°) -------------------
subplot(2, 2, 1);
phi_E = linspace(0, 2*pi, 361); % E面方位角(0°~360°)
% 提取E面增益(θ=π/2,即90°)
Gain_E = Gain(Theta == pi/2, :); % 注意:Theta是弧度,pi/2对应90°
Gain_E_norm = Gain_E - Gain_max;% 转换为极坐标绘图所需格式(角度转弧度,增益排序)
phi_rad = deg2rad(phi_E); % 方位角转弧度(MATLAB polarplot要求弧度)
[~, idx] = sort(phi_rad); % 确保角度按0°~360°顺序排列
phi_sorted = phi_rad(idx);
gain_sorted = Gain_E_norm(:, idx); % 按方位角顺序排列增益% 绘制极坐标图
polarplot(phi_sorted, gain_sorted, 'LineWidth', 1.5, 'Color', [0 0.4 0.8]);
rlim([-30 5]); % 设置半径范围(-30dB到+5dB)
theta_zero = 0; % 0°指向(默认顶部)
set(gca, 'ThetaZeroLocation', 'top', 'ThetaDir', 'clockwise'); % 0°向上,顺时针增加
title('E面增益图(θ=90°)', 'FontSize', 12, 'Color', 'k');
grid on;% ------------------- H面(φ=0°,θ=0°~180°) -------------------
subplot(2, 2, 2);
theta_H = linspace(0, pi, 181); % H面极角(0°~180°)
% 提取H面增益(φ=0°)
Gain_H = Gain(:, 1); % Phi=0°对应第一列
Gain_H_norm = Gain_H - Gain_max;% 绘制极坐标图(H面通常用线性角度表示)
polarplot(deg2rad(theta_H), Gain_H_norm, 'LineWidth', 1.5, 'Color', [0.8 0.4 0]);
rlim([-30 5]);
set(gca, 'ThetaZeroLocation', 'top', 'ThetaDir', 'clockwise');
title('H面增益图(φ=0°)', 'FontSize', 12, 'Color', 'k');
grid on;%% ==================== 5. 绘制三维球坐标图 ====================
subplot(2, 2, [3 4]);
% 生成三维网格数据(Theta: 181x361,Phi: 181x361)
[X, Y, Z] = sph2cart(Phi_rs, pi/2 - Theta_rs, ones(size(Theta_rs))); % 转换为笛卡尔坐标(用于三维投影)
% 注意:sph2cart的输入是(方位角φ,极角θ,半径r),这里半径r=1(仅用于方向)% 绘制三维曲面(使用surf,颜色映射表示增益)
surf(X, Y, Z, Gain_norm', 'EdgeColor', 'none', 'FaceAlpha', 0.8); % 转置矩阵匹配坐标维度
colormap jet; % 颜色映射(Jet:蓝→红)
colorbar('Location', 'eastoutside'); % 添加颜色条
caxis([-30 5]); % 颜色范围与增益一致% 设置三维视图
view(az, el) = view(30, 30); % 调整视角(方位角30°,仰角30°)
axis equal; % 保持坐标轴比例一致
title('三维增益方向图(2.4GHz)', 'FontSize', 12, 'Color', 'k');
xlabel('X (m)'); ylabel('Y (m)'); zlabel('Z (m)');
grid on;%% ==================== 6. 辅助:绘制切面图(二维直角坐标) ====================
figure('Position', [100 100 800 400], 'Color', 'w');
% 切面1:θ=90°平面(E面),绘制φ方向增益
plot(deg2rad(phi_E), Gain_E_norm, 'b-', 'LineWidth', 1.5);
xlabel('方位角 φ (rad)'); ylabel('归一化增益 (dBi)');
title('E面切面增益图(θ=90°)');
rlim([-30 5]);
grid on;% 切面2:φ=0°平面(H面),绘制θ方向增益
plot(deg2rad(theta_H), Gain_H_norm, 'r-', 'LineWidth', 1.5);
xlabel('极角 θ (rad)'); ylabel('归一化增益 (dBi)');
title('H面切面增益图(φ=0°)');
rlim([-30 5]);
grid on;
legend('E面(θ=90°)', 'H面(φ=0°)', 'Location', 'best');
总结
天线增益图的软件绘制核心是将离散的仿真/实测数据通过插值、归一化处理,映射到极坐标或三维坐标系中,并通过图形渲染突出方向性特征。关键步骤包括数据获取、预处理、坐标系选择和细节优化,最终目标是直观展示天线的辐射方向性。