Skip to content

Transmit Diversity

Wiseung Jang edited this page Jul 7, 2026 · 1 revision

MMSE_CPP 引擎中,数据信道(PDSCH)为了追求极高的吞吐量,通常使用空间复用(Spatial Multiplexing)。然而,对于控制信道(PDCCH 和 PCFICH),其首要任务是极端的可靠性——如果控制指令丢失,整个子帧的数据都将作废。

因此,3GPP 协议规定 PDCCH 强制使用 QPSK 调制,并在多天线场景下使用**空频块码(SFBC, Space-Frequency Block Coding)**进行发射分集。

本页面详细记录了 MMSE_CPP 是如何在底层代码中优雅且高效地实现 SFBC 解码的。


1. 核心数学模型:Alamouti 编码

SFBC 本质上是经典的 Alamouti 空时分组码在“频率域”上的变体。基站在发送时,将相邻的两个子载波($k$ 和 $k+1$)绑定为一对,进行交叉取共轭发送。

假设我们要发送两个 QPSK 符号 $X_1$$X_2$

  • 在子载波 $k$:天线 0 发送 $X_1$,天线 1 发送 $X_2$
  • 在子载波 $k+1$:天线 0 发送 $-X_2^$,天线 1 发送 $X_1^$。

接收端的挑战

在接收端,天线收到的信号 $Y(k)$$Y(k+1)$$X_1$$X_2$ 经过信道矩阵 $\mathbf{H}$ 衰落并叠加了噪声 $\mathbf{N}$ 后的混合体。如果使用传统的 MMSE 算法,我们需要对这个系统求解逆矩阵。但这在算力上是极大的浪费。


2. 算法实现:化矩阵求逆为标量合并

利用 Alamouti 矩阵天然的正交性,我们可以在数学上彻底消灭交叉干扰,完全避免矩阵求逆

src/mmse_equalizer_cpu.cpp 中的 demap_pdcch_transmit_diversity_scalar 函数里,我们实现了极速的最大比合并 (MRC, Maximum Ratio Combining)

对于接收天线 0,提取 $X_1$$X_2$ 对应的合并信号 $Z_{X1}$$Z_{X2}$ 过程如下:

$$Z_{X1, Rx0} = H_{00}^* \cdot Y_0(k) + H_{01} \cdot Y_0^*(k+1)$$

$$Z_{X2, Rx0} = H_{01}^* \cdot Y_0(k) - H_{00} \cdot Y_0^*(k+1)$$

由于正交性,包含干扰符号的项在展开后会完美抵消(一正一负化为零)。

代码映射: 在 C++ 源码中,这段优美的数学化简被直接翻译为无除法、无分支的纯复数乘加指令:

// 提取 X1 (对应源码中的 z_rx0 和 z_rx1 合并)
const Complex32 z_rx0 = csub(cmul(cconj(h00), y0), cmul(h01_next, cconj(y0_next)));
// 提取 X2 
const Complex32 z1_rx0 = cadd(cmul(cconj(h01), y0), cmul(h00_next, cconj(y0_next)));
  1. 注入 MMSE 底色:等效信噪比计算 虽然上述的 MRC 完美解耦了信号,但在低信噪比环境下,如果不考虑背景噪声,会导致后续译码器(Viterbi)的软比特(LLR)权重失真。 为了达到 MMSE 级别的性能,代码中计算了等效信道能量 E 并在分母中强行注入了信道估计模块传来的噪声方差 (\sigma^2 ): 最终,我们不仅能计算出归一化后的纯净软符号 \hat{X} :

还能顺便输出该符号的后验信噪比 (Post-SINR \gamma ):

  1. 架构优势总结 在 MMSE_CPP 项目中,将 PDCCH 的发射分集(Transmit Diversity)与 PDSCH 的普通 MMSE 拆分为两个独立的执行路径(run_pdcch_td vs run_channel)带来了巨大的工程红利:
  • 计算复杂度断崖式下降:省去了所有克莱姆法则展开、行列式计算和牛顿迭代除法。对于动辄占用上千个 RE 的控制区,节省了海量的 CPU/GPU 寄存器与时钟周期。
  • 极佳的数值稳定性:正交合并避免了病态矩阵求逆时出现的浮点数溢出问题。
  • 完美对接控制面:该模块输出的带有 SINR 权重的 PdcchTdEqualizePair,使得后级的 LLR 生成极度线性化,为 Viterbi 盲检提供了最纯净的输入源。

Clone this wiki locally