Python中如何查找3D辐射图的主瓣与旁瓣峰值点
二维辐射方向图主瓣/旁瓣峰值检测实现方案
针对规则theta-phi网格下的二维幅值数据,不需要把二维数组强行拉成一维,以下两种方案都可以稳定提取所有峰值点:
方案1:基于局部最大值滤波的原生二维检测(优先推荐)
该方案完全适配meshgrid生成的规则网格数据,不需要拆分一维序列,检测效率和准确率更高。核心逻辑是:一个有效二维峰值点,必然是其指定邻域范围内的幅值最大值,再通过幅值阈值过滤噪声毛刺即可。
核心实现代码:
import numpy as np from scipy.ndimage import maximum_filter, generate_binary_structure # 以下三个变量为你已有的数据:theta_mesh、phi_mesh是meshgrid输出的二维坐标数组,Z是对应位置的信号幅值 # 1. 定义峰值判定邻域:2阶二维结构对应8邻域,采样点密集时可替换为更大尺寸邻域,例如np.ones((5,5), dtype=bool) neighborhood = generate_binary_structure(2, 2) # 2. 提取所有邻域局部最大值点 local_max_mask = maximum_filter(Z, footprint=neighborhood) == Z # 3. 设置幅值阈值过滤低电平噪声,示例取主瓣峰值的10%(对应-20dB),可根据实际旁瓣电平调整 amp_threshold = Z.max() * 0.1 valid_peak_mask = local_max_mask & (Z >= amp_threshold) # 4. 提取峰值点对应的角度、幅值信息 peak_theta = theta_mesh[valid_peak_mask] peak_phi = phi_mesh[valid_peak_mask] peak_amp = Z[valid_peak_mask] # 可选:按幅值降序排序,第一个点即为主瓣,其余点为各级旁瓣 sort_index = np.argsort(peak_amp)[::-1] main_lobe = (peak_theta[sort_index[0]], peak_phi[sort_index[0]], peak_amp[sort_index[0]]) side_lobes = list(zip(peak_theta[sort_index[1:]], peak_phi[sort_index[1:]], peak_amp[sort_index[1:]]))
方案2:复用scipy.signal.find_peaks的适配方案
如果你已经熟悉find_peaks的参数调优逻辑,可以通过“双方向一维检测取交集”的方式适配二维场景:一个有效二维峰值,必须同时在theta方向、phi方向的一维切片上满足峰值判定条件。
核心实现代码:
import numpy as np from scipy.signal import find_peaks # 配置find_peaks参数,可根据需求设置高度、最小峰间距、峰值突出度等规则 find_peaks_params = { "height": Z.max() * 0.1, "prominence": 0.05 } # 沿theta轴逐切片检测一维峰值 theta_peak_mask = np.zeros_like(Z, dtype=bool) for phi_idx in range(Z.shape[1]): peak_pos, _ = find_peaks(Z[:, phi_idx], **find_peaks_params) theta_peak_mask[peak_pos, phi_idx] = True # 沿phi轴逐切片检测一维峰值 phi_peak_mask = np.zeros_like(Z, dtype=bool) for theta_idx in range(Z.shape[0]): peak_pos, _ = find_peaks(Z[theta_idx, :], **find_peaks_params) phi_peak_mask[theta_idx, peak_pos] = True # 两个方向均判定为峰值的点,即为二维有效峰值 valid_peak_mask = theta_peak_mask & phi_peak_mask # 后续提取坐标、排序主瓣旁瓣的逻辑与方案1完全一致
检测注意事项:
- 邻域尺寸/最小峰间距需要匹配网格采样密度:如果角度采样步长为1°,33邻域即可满足需求;如果采样步长小于0.2°,建议将邻域尺寸调整到77以上,避免噪声毛刺被误判为旁瓣。
- 幅值阈值需要匹配天线实际旁瓣电平:常规天线旁瓣电平比主瓣低13dB~40dB,阈值设置过低会引入大量噪声假峰,设置过高会漏检弱旁瓣。
- 球坐标下需要处理phi边界:phi=0和phi=2π对应同一个切面,检测完成后需要对边界位置的重复峰值做去重处理。
内容的提问来源于stack exchange,提问作者SAN
相关产品推荐
相关产品推荐

