😊Forward
发布日期

WRSP6TK 雷达 TR 测试软件源码精讲(5):暗室发射波瓣图(模式 5)

作者

M先生

WRSP6TK 雷达 TR 测试软件源码精讲(5):暗室发射波瓣图(模式 5)

本篇详解模式 5(暗室发射波瓣图)。与模式 4(接收)的本质区别:发射波瓣图测的是"发射出去的波束长什么样",所以要控制每个 TR 通道的发射相位/幅度,让外部接收设备逐角度测量

一、接收 vs 发射波瓣图的对称性

模式 4 接收波瓣图模式 5 发射波瓣图
被测对象DBF 形成的接收波束TR 通道合成的发射波束
波束形成位置数字域(DSP 求和)模拟域(各通道相位配置)
需要外部设备暗室信号源(照射)暗室接收天线/频谱仪
数据来源globalBuf 多波位 I/Q发射取样回传(耦合取样)
系数生成USER_SetBeamPara 下发 DBFTRBEAMPORT 下发发射波束系数

一句话:接收波瓣图是"看自己怎么收",发射波瓣图是"看自己怎么发"。

二、整体流程图

┌─ DarkRoomSendInit ──────────────────────────────────────┐
1. 选择参数文件(多波束用 LobeSendM*,否则 LobeSend*)    │
2.TR、设直通系数                                      │
3. 读取取样点参数(m_TrTestLLocal/SLocal/TLocal)4. 打开 UART5. 生成波位表:                                           │
│    单波束:m_ScanBeamBit[0] = 角度1×10+450, N=1│    多波束:m_ScanBeamBit[0..2] = 角度1/2/3×10+450, N=36. 下发校准/DIFR 参数、直通系数                           │
7. 生成发射波束系数并下发(逐 DIFR)→ TRBEAMPORT8. 打开所有待测 TR 通道(按 g_HDevMask/g_VDevMask)       │
9. m_StartTrTest = TRUE└──────────────────────────────────────────────────────────┘
        │ 每帧取样数据到达
┌─ DarkRoomSendDataProcess ───────────────────────────────┐
│ 单波束:从全 IQ 缓冲取 1I/Q│ 多波束:从 3 个指定取样点(L/S/T Local)取 3I/Q│ → m_DarkRoomSouTmpHIQ[0..2][gap]│ → SetEvent└──────────────────────────────────────────────────────────┘
┌─ DarkRoomSendDataProc ──────────────────────────────────┐
│ 全部扫完?                                               │
│ ├─ 否 → gap 计数 +1│ └─ 是 → 关设备 → 蛇形重排 → 逐波位写文件 → 完成弹窗        │
└──────────────────────────────────────────────────────────┘

三、发射波束形成系数(核心)

3.1 单波束 vs 多波束

if(g_TrTestMoreBeam == FALSE)  // 单波束
{
    m_ScanBeamBit[0] = (USHORT)((short)(m_TrTestAngel[0]*10.0f) + 450);
    m_BeamBitNum = 1;
}
else  // 多波束(同时发 3 个波束)
{
    m_ScanBeamBit[0] = ...角度1编码;
    m_ScanBeamBit[1] = ...角度2编码;
    m_ScanBeamBit[2] = ...角度3编码;
    m_BeamBitNum = 3;
}

多波束发射:同时对 3 个方向发射 3 个波束。接收侧在 3 个取样点(L/S/T)分别取样,一次扫描得到 3 个方向的波瓣数据——用一次扫描时间测 3 个波瓣图,效率提升 3 倍。

3.2 发射波束系数生成

phase_inc = 6.2831852f * g_BeamArrayInterval * sin(θ_i) * m_RfFreqFloat / 30.0f;
for (j=0; j<g_BeamArrayNum; j++)
{
    PhaCoeff = phase_inc * j;
    TmpCoeff[i][j] = (((int)(32767*cos(PhaCoeff)) & 0xffff) << 16)
                   | (((int)(32767*sin(PhaCoeff)) & 0xffff));
}
// 然后按 DIFR×通道 映射:
Haddr = (g_ArrayMapDIFR[j] << 4) + g_ArrayMapChannel[j];
MapCoeff[i][Haddr] = TmpCoeff[i][j];

公式:第 ii 个波束指向 θi\theta_i 时,第 jj 个单元的相位:

φj=2πλjdsinθi=2πd[cm]sinθif[GHz]30j\varphi_j = \frac{2\pi}{\lambda} j\, d \sin\theta_i = 2\pi \cdot d[\text{cm}] \cdot \sin\theta_i \cdot \frac{f[\text{GHz}]}{30} \cdot j

打包格式(Q15 复系数):

Coeff=32767cosφj高16位 I:32767sinφj低16位 Q\text{Coeff} = \underbrace{\lfloor 32767\cos\varphi_j \rfloor}_{\text{高16位 I}} : \underbrace{\lfloor 32767\sin\varphi_j \rfloor}_{\text{低16位 Q}}

注意与接收(模式 4)的符号差异

  • 接收 DBF 系数:phase_inc = -2π·d·sinθ·f/30(负号)
  • 发射波束系数(模式 5 单极化 SL 版):phase_inc = -6.28...·d·sinθ·f/30(负号)
  • 发射波束系数(模式 5 双极化版):phase_inc = +6.28...·d·sinθ·f/30(正号)

收发符号差异的物理本质:接收时是"各单元信号延迟对齐到波前"(补偿空间相位差),发射时是"各单元提前辐射使波前汇聚"(预置相位差)。两者数学上互为共轭,符号相反。工程上必须与 DSP 端处理约定一致——这也是最容易出 bug 的地方

3.3 映射表:逻辑单元 → 物理 DIFR×通道

Haddr = (g_ArrayMapDIFR[j] << 4) + g_ArrayMapChannel[j];
MapCoeff[i][Haddr] = TmpCoeff[i][j];

为什么需要映射? 阵列的"逻辑单元号 j"(第 j 个单元)与"物理位置"(哪个 DIFR 的哪个通道)往往不一致(布线、分组、收发共用等原因)。g_ArrayMapDIFR[j] 给出 DIFR 号、g_ArrayMapChannel[j] 给出通道号,合成 8 位地址 (DIFR&lt;&lt;4)|Chl。下发前必须把系数按物理地址重排——逻辑到物理的地址映射,是相控阵波控软件的核心基本功

四、逐通道发射控制

4.1 TR 通道开关(UART)

// 构造 SendMask:每个待测 TR 组件对应 2 个 bit(H/V 各一)
for (i=0; i<15; i++)
{
    if (DevMask & (0x01 << i))     // 该组有效
    {
        SendMask |= (0x01 << (2*i));    // H 通道 bit
        SendMask |= (0x01 << (2*i+1));  // V 通道 bit
    }
}
USER_SendMoniDataPack(SendMask, m_Uart0Buf, 6, UART0PORT);

SendMask 的位图语义:每一位对应一个 TR 开关,置 1 打开。g_HDevMask / g_VDevMask 是"哪些 TR 组件参与测试"的掩码(H 或 V 极化),按位展开成串口控制字节。

4.2 发射通道的"全开"

发射波瓣图测试与发射校准不同:发射波瓣图要所有通道一起发(合成波束),而发射校准要逐通道发(分离各通道误差)。所以这里:

m_Uart0Buf[3] = 0xff;  // 打开对应掩码的全部 TR
USER_SendMoniDataPack(SendMask, ...);

五、取样点的选择(多波束)

GetDlgItemText(IDC_EDIT_TRTESTLLOCAL, value);  m_TrTestLLocal = atoi(value);
GetDlgItemText(IDC_EDIT_TRTESTSLOCAL, value);  m_TrTestSLocal = atoi(value);
GetDlgItemText(IDC_EDIT_TRTESTTLOCAL, value);  m_TrTestTLocal = atoi(value);

// 多波束取样
m_DarkRoomSouTmpHIQ[0][gap] = globalBuf[m_TrTestLLocal*2];   // L 波束
m_DarkRoomSouTmpHIQ[1][gap] = globalBuf[m_TrTestSLocal*2];   // S 波束
m_DarkRoomSouTmpHIQ[2][gap] = globalBuf[m_TrTestTLocal*2];   // T 波束

L/S/T 是什么? 这是发射取样点的索引——发射链路里,3 个波束的取样信号被安排到全 I/Q 数据缓冲的不同位置(如不同距离单元或不同通道),界面输入 3 个索引值告诉软件去哪里取。多波束复用一个采样流,通过位置索引分离,是节省采集通道的经典做法。

六、数据重排与文件输出(与模式 4 相同)

  • 蛇形扫描数据重排(m_ArrayScanDir 决定偶数行正/反向)
  • 逐波位写文件:ArrayNear_暗室发射H_9.100GHz_12.3°_时间.txt
  • 每文件内容:[测试方式说明][阵列信息][阵列数据] 三节

七、暗室发射波瓣图与接收的对比总结

接收(模式4):  DBF系数(数字) ──► 多波位I/Q ──► 每个波位一个文件
发射(模式5):  发射系数(TR通道) ─► 取样I/Q ──► 每个波位一个文件

共同点:
  ├─ 波位表生成(角度×10+450 编码)
  ├─ 蛇形重排
  ├─ 文件格式
  └─ 完成判定(gap 计数)
差异点:
  ├─ 波束形成位置(数字 vs 模拟)
  ├─ 系数符号(收发互易)
  ├─ 取样方式(全IQ vs L/S/T 定点)
  └─ 多波束的复用方式(波位数 vs 取样点)

八、一句话总结

暗室发射波瓣图 = 给所有 TR 通道配置发射相位梯度合成波束,转台扫一圈,从取样点取回各波束响应。 核心在发射系数的 Q15 打包与逻辑-物理映射,以及多波束的取样点复用——一次扫描、三个波瓣。

下一篇:WRSP6TK 雷达 TR 测试软件源码精讲(6):远场接收测试(模式 6)与单极化变体

WRSP6TK 雷达 TR 测试软件源码精讲(5):暗室发射波瓣图(模式 5)

评论加载中…