😊Forward
发布日期

WRSP6TK 雷达 TR 测试软件源码精讲(7):数据后处理原理

作者

M先生

WRSP6TK 雷达 TR 测试软件源码精讲(7):数据后处理原理

本篇讲解测试数据离线处理:暗室采集的"单元幅相矩阵"如何变成方向图?波束宽度和副瓣怎么自动提取?校准系数文件怎么生成和打包?这是把"原始数据"变成"测试结论"的关键一环。

一、方向图合成:从单元幅相到波瓣图

1.1 数据读取(ReadTrData)

// 文件格式:[测试方式说明][阵列信息][阵列数据]
// 阵列数据:每行 "幅度(dB)  相位(度)"
Amp = pow(10, Amp * 0.05);            // dB → 线性
Phase = Phase * pi/180.0f;            // 度 → 弧度
DataIQ[i][j][0] = Amp*cos(Phase);     // I = A cosφ
DataIQ[i][j][1] = Amp*sin(Phase);     // Q = A sinφ

还原复数:文件里存的是"幅度(dB)+ 相位(度)",读回来先转线性幅度、弧度相位,再合成复数 s=Aejφs = A e^{j\varphi}

1.2 方向图合成(OnBnClickedButtonTrdatacalculate 核心)

WaveLRecip = Freq / 300.0f;                    // 1/λ(频率 GHz → 波长 cm)
MulFactU = 2*pi*WaveLRecip*HInterval;          // 2π/λ × 水平间距
MulFactV = 2*pi*WaveLRecip*VInterval;          // 2π/λ × 垂直间距

// 方位扫描(固定俯仰角 HViewAngle)
sinTheta = sin(HViewAngle);  cosTheta = cos(HViewAngle);
for (j=0; j<TRSitaPointNum; j++)   // 方位角遍历
{
    sinFai = sin(startAngle + j*datAngle);
    u = MulFactU * cosTheta * sinFai;    // 波数域 u 分量
    v = MulFactV * sinTheta;             // 波数域 v 分量

    sumI = 0; sumQ = 0;
    for (k=0; k<HSampleNum; k++)         // 行
      for (l=0; l<VSampleNum; l++)       // 列
      {
        kulv = k*u + l*v;                // 相位差 = k·u + l·v
        sumI += DataIQ[l][k][0]*cos(kulv) - DataIQ[l][k][1]*sin(kulv);
        sumQ += DataIQ[l][k][0]*sin(kulv) + DataIQ[l][k][1]*cos(kulv);
      }
    AMP = 10*log10(sumI*sumI + sumQ*sumQ);   // 功率 → dB
    HLobeData[j] = AMP;                       // 方位方向图
}
// 俯仰扫描同理(固定方位角 EViewAngle)

1.3 数学本质:阵列方向图公式

标准阵列方向图M×NM\times N 平面阵):

E(θ,φ)=k=0M1l=0N1wklej2πλ(kdxu+ldyv)E(\theta,\varphi) = \sum_{k=0}^{M-1}\sum_{l=0}^{N-1} w_{kl} e^{j\frac{2\pi}{\lambda}(k\,d_x u + l\,d_y v)}

其中波数域变量:

u=cosθsinφ,v=sinθu = \cos\theta\sin\varphi, \qquad v = \sin\theta

代码对照

  • kulv = k*u + l*v 对应指数里的 kdxu+ldyvk\,d_x u + l\,d_y vMulFactU/V 已含 2π/λd2\pi/\lambda \cdot d
  • sumI/sumQ 的递推式 = 复数乘法 wklejkulvw_{kl} \cdot e^{j\,kulv} 的实部/虚部展开:
(a+jb)(cosϕ+jsinϕ)=(acosϕbsinϕ)+j(asinϕ+bcosϕ)(a+jb)(\cos\phi + j\sin\phi) = (a\cos\phi - b\sin\phi) + j(a\sin\phi + b\cos\phi)
  • AMP = 10lg(|Σ|²) 把合成场强转成功率(dB)

这就是相控阵天线方向图的"定义式"——每个单元贡献一个带空间相位差的复矢量,矢量求和再取模。软件在 θ\theta(或 φ\varphi)方向逐点扫描,把方向图"扫"出来。

1.4 例子

一个 8×8 阵、单元间距 dx=dy=2.5d_x = d_y = 2.5cm、f=9.1f = 9.1GHz:

  • λ=30/9.13.30\lambda = 30/9.1 \approx 3.30cm,2π/λ1.9052\pi/\lambda \approx 1.905 rad/cm
  • uu 方向相邻单元相位差 Δϕu=1.905×2.5×u\Delta\phi_u = 1.905 \times 2.5 \times u
  • 波束指向 θ0\theta_0(如 10°)时,主瓣出现在 u=sinθ0u = \sin\theta_0

验证θ=θ0\theta = \theta_0 时所有单元同相(=MN\sum = MN),主瓣峰值;偏离后相位散开、求和变小,形成方向图的波束形状。

二、波束宽度提取(GetBeamWidth)

2.1 算法流程

1. 从主瓣最大值位置向两侧扫描:
   - 若下降超过 10dB → 停(认为出了主瓣区)
   - 若遇局部上升 → 更新最大值、继续(越过小的起伏)
2. 记录主瓣左/右边界(HLeftStart/HRightStart)
3. 在边界内找 3dB 点:
   - 从边界向最大值方向移动,找"幅度降到 Max-3dB"的位置
   - 用线性插值精确定位(x0/x1 比较取邻近点)
4. BeamWidth = (右3dB点 - 左3dB点) × 步进 × 0.01°

2.2 关键代码

for(i=HLeftStart; i>=0; i--)  // 从左边界向主瓣中心找左3dB点
{
    if(MaxValue - HLobeData[i] < 3.0f)
    {
        LAmpValue = HLobeData[i];
        LBeamWidthID = i;
    }
    else
    {
        // 线性插值:3dB 点在 i 和 i+1 之间
        x0 = 3.0f - (MaxValue - LAmpValue);   // 距 i 侧的距离
        x1 = MaxValue - HLobeData[i] - 3.0f;  // 距 i+1 侧的距离
        LBeamWidthID = (x0 < x1) ? i+1 : i;   // 取更近的
        break;
    }
}

插值思想:方向图是离散采样的(步进 0.01°~1°),3dB 点多半落在两个采样点之间。用"到两侧的垂直距离"比较,选更接近 3dB 的采样点——简单的一阶近似插值。

10dB 边界扫描的巧妙:先找 10dB 边界(主瓣范围),再在范围内找 3dB 点。这样副瓣区的高点不会干扰 3dB 定位。"先粗定位再精定位"是工程算法常用的分层策略

三、副瓣提取(GetLobe)

// 从主瓣边界向两侧找"第一个局部极小后再上升的峰值"
for(i=HLeftStart-3; i>=0; i--)  // 向左
{
    if (OldValue - HLobeData[i] >= 0) OldValue = HLobeData[i];  // 持续下降
    else { Flag0 = TRUE; LMaxID = i; break; }                    // 开始上升 → 极小点
}
for(i=0; i<LMaxID; i++)  // 极小点外侧找最大副瓣
    if (MaxLobeH < HLobeData[i]) { MaxLobeH = HLobeData[i]; ... }
// 右侧同理

算法

  1. 从主瓣边界外侧出发,沿方向图走,只要幅度持续下降就继续OldValue >= 当前值
  2. 一旦开始上升,说明越过了第一个副瓣的"谷底"——记录极小点位置
  3. 在极小点外侧继续找最大值 = 第一副瓣电平

物理意义:主瓣→副瓣之间的"谷"(极小点)是天然分界。找到谷底,副瓣区就在它外侧。

副瓣电平 = 主瓣峰值 - 最大副瓣峰值:

value.Format("%.2fdB", maxAmpH - MaxLobeH);   // 显示在界面

四、校准系数文件生成(CreateData)

4.1 H+V 合成(OnBnClickedButtonTrtestcreatdata)

if (DualPolarProcEna)  // 双极化
{
    // H 半区 + V 半区拼接
    for (i=0; i<length; i++)
    {
        amp = pow(10, HDataAmp[i]*0.05);  phase = HDataPhase[i]*π/180;
        SrcIQ[i][0] = amp*cos(phase);  SrcIQ[i][1] = amp*sin(phase);   // H

        amp = pow(10, VDataAmp[i]*0.05);  phase = VDataPhase[i]*π/180;
        SrcIQ[i+length][0] = amp*cos(phase); SrcIQ[i+length][1] = amp*sin(phase); // V
    }
    // 再统一走 GetCalibrationFactor 计算
}

为什么 H/V 分开存、合成后统一算? 双极化雷达的 H、V 通道独立校准(各自有源器件),但系数表要按"物理地址"合并成一张——前半段 H、后半段 V,与 DSP 的通道布局一致。

4.2 忽略幅度(IgnoreAmpFlag)

if (m_IgnoreAmpFlag)  // 只校相位
{
    m_CalibDataPhase[i] = m_HDataPhase[i];  // 相位用测量的
    m_CalibDataAmp[i] = 0.0f;               // 幅度置 0(=0dB,不改幅度)
}

应用场景:当通道幅度一致性已经很好(或只想验证相位)时,跳过幅度校正。幅度 0dB、相位保留——配置化的"校哪些"开关

4.3 展开相位(CreateAdjustExpend)

m_CalibDataPhase[i] += m_ExpendPhase[i];   // 相位 + 展开项
// 归一到 [-180°, 180°]
if (m_CalibDataPhase[i] > 180.0f)  m_CalibDataPhase[i] -= 360.0f;
else if (m_CalibDataPhase[i] < -180.0f) m_CalibDataPhase[i] += 360.0f;

展开相位(ExpendPhase)是什么? 相控阵波束扫描需要随波束指向变化的相位梯度φi=2πλidsinθ\varphi_i = \frac{2\pi}{\lambda}i\,d\sin\theta)。如果把"波束指向相位"直接加进校准系数,换波束指向就要重算。工程上常把固定校准量可变波束指向量分开:

总系数=校准系数固定+展开相位随指向变化\text{总系数} = \underbrace{\text{校准系数}}_{\text{固定}} + \underbrace{\text{展开相位}}_{\text{随指向变化}}

软件提供"校准系数 + 展开相位 = 合成系数"的工具(OnBnClickedButtonTrtestcreatadjustexpend),并做 ±180° 归一化(相位模糊处理:φ\varphiφ±360°\varphi\pm360° 等价,统一表示避免计算歧义)。

五、窗函数速查(方向图加权)

公式副瓣电平主瓣展宽用途
矩形wi=1w_i = 1-13.2 dB1.00×最大增益、最窄波束
汉宁wi=0.50.5cos(2πiN1)w_i = 0.5-0.5\cos(\frac{2\pi i}{N-1})-31.5 dB1.62×通用低副瓣
汉明wi=0.540.46cos(2πiN1)w_i = 0.54-0.46\cos(\frac{2\pi i}{N-1})-43 dB1.48×最小化峰值副瓣
布莱克曼wi=0.420.5cos+0.08cos(2)w_i = 0.42-0.5\cos+0.08\cos(2\cdot)-58 dB1.89×极低副瓣
泰勒可指定电平可设(如-30dB)~1.2×雷达阵列首选

副瓣与波束宽度不可兼得:压低副瓣必然展宽主瓣、损失增益。测试不同指标时选不同窗——这是天线设计的基本折中。

六、一句话总结

后处理 = 把"单元幅相矩阵"用阵列方向图公式合成波瓣图,用"10dB 边界 + 3dB 插值"提取波束宽度,用"谷底分界"找副瓣,再把校准/展开相位按 Q15 打包成硬件系数。 全部是"数组 + 循环 + 三角函数"的经典数字信号处理,没有任何黑魔法——理解了阵列公式和定点打包,整个软件就通了。


系列回顾

  1. 系统总览与架构
  2. 内校准——接收与发射
  3. 外校准——接收与发射
  4. 暗室接收波瓣图
  5. 暗室发射波瓣图
  6. 远场接收测试与单极化变体
  7. 数据后处理原理

WRSP6TK 雷达 TR 测试软件源码精讲(7):数据后处理原理

评论加载中…