4. 检测算法基础:最大似然(ML)检测、线性检测(ZF/MMSE)、球形译码(SD)

各位同学,今天我们来聊聊MIMO检测算法。说实话,这是整个LTE物理层里最让我头疼、也最让我着迷的部分。我在做DSP实现那几年,光是在检测算法上踩过的坑,就够写一本小册子了。

MIMO检测,说白了就是接收端怎么把多个天线收到的混叠信号,还原成发射端送出的原始比特。你想想看,多个天线同时发,多个天线同时收,信号在空中搅成一锅粥——我们要做的,就是把这锅粥里的米粒一颗颗挑出来。

核心问题:给定接收信号 y = Hx + n,已知信道矩阵 H,如何估计出发送向量 x?

4.1 最大似然(ML)检测——理论上的天花板

ML检测,我愿称之为"暴力美学"。它的思路特别直接:把所有可能的发送向量都试一遍,看哪个组合能让接收信号最接近实际收到的值。

数学上,ML检测要解决的是这个优化问题:

x̂_ML = argmin || y - Hx ||²   (x ∈ 星座点集合)

说白了,就是穷举搜索。对于64QAM、4层空间复用,搜索空间有多大?64⁴ ≈ 1677万个候选点。嗯,这个数字我到现在都记得很清楚——当年第一次做仿真时,看到这个数字直接傻眼了。

ML检测的优点:

  • 理论上最优,误码率最低
  • 可以作为其他算法的性能基准

ML检测的缺点:

  • 计算复杂度随天线数和调制阶数指数增长
  • 实际DSP上基本跑不动(除非天线数极少)

我的经验:ML检测在实际工程中很少直接用。但我建议你把它当作"黄金标准"——你设计的任何检测算法,都要拿ML的结果来对比。如果差距在1dB以内,那就算不错了。

4.2 线性检测——工程界的"快餐"

既然ML太复杂,那我们就想点简单的。线性检测的思路是:设计一个线性滤波器 W,让 ŝ = W·y 直接得到发送信号的估计。

4.2.1 迫零(ZF)检测

ZF检测的想法很朴素:既然 y = Hx + n,那我直接把 H 求逆不就行了?

W_ZF = (H^H · H)^(-1) · H^H

这样做的好处是:完全消除了天线间的干扰。但代价呢?噪声被放大了。我在项目中遇到过这种情况:信道条件差的时候,ZF检测的误码率简直没法看。

注意:当信道矩阵 H 接近奇异时,(H^H·H) 的求逆会非常不稳定。我曾经在定点化实现时,因为这个矩阵的条件数太大,导致结果完全不对——后来加了正则化才解决。

4.2.2 最小均方误差(MMSE)检测

MMSE比ZF聪明一点。它不追求完全消除干扰,而是在"消除干扰"和"抑制噪声"之间找个平衡。

W_MMSE = (H^H · H + σ²·I)^(-1) · H^H

你看,就多了个 σ²·I 项。这个 σ² 是噪声方差。信噪比高的时候,σ² 小,MMSE趋近于ZF;信噪比低的时候,σ² 大,MMSE会主动抑制噪声放大。

线性检测的对比:

算法 复杂度 抗噪声 抗干扰 适用场景
ZF 高信噪比
MMSE 较好 较好 通用
ML 极高 最优 最优 性能基准

我的建议:实际DSP实现时,MMSE是首选。它复杂度低,性能也还行。我当年做的第一个LTE原型机,用的就是MMSE检测——虽然被领导嫌弃"不够高级",但至少能跑起来。

4.3 球形译码(SD)——折中的艺术

ML太慢,线性检测性能不够。那有没有中间路线?有,球形译码就是。

SD的核心思想是:我不搜遍整个星座空间,我只在一个"球"里搜。这个球的半径选得合适,就能在性能和复杂度之间取得很好的平衡。

算法流程:
1. 对信道矩阵做QR分解:H = Q·R
2. 从最后一层开始,逐层搜索
3. 只保留落在球半径内的候选点
4. 找到使 ||y - Hx||² 最小的x

为什么会叫"球形"?因为搜索空间被限制在一个超球体内。球半径越小,搜索越快,但可能漏掉最优解;球半径越大,越接近ML,但复杂度也上去了。

关键参数:球半径的选取直接影响SD的性能和复杂度。我一般会先跑一次MMSE检测,用它的结果来估算一个合理的初始半径。

SD的复杂度不是固定的。信道条件好的时候,它跑得飞快;信道条件差的时候,它可能退化到接近ML的复杂度。嗯,这一点在实时系统中要特别小心——你不能保证每次都能在规定时间内算完。

4.4 三种算法的对比总结

好了,我们来捋一捋这三种算法的关系:

  • ML:性能天花板,复杂度也天花板。适合做仿真对比,不适合实时实现。
  • ZF/MMSE:简单粗暴,DSP上跑得飞快。性能一般,但在高信噪比下够用。
  • SD:折中方案。性能接近ML,复杂度可控。但实现起来比线性检测麻烦不少。

我个人习惯是:先上MMSE保底,如果性能不够再考虑SD。至于ML?嗯,留着写论文用吧。

避坑指南:我曾经在定点化实现MMSE时,忽略了矩阵求逆的数值稳定性问题。结果仿真时性能好好的,一上硬件就崩。后来花了整整一周才定位到问题——是求逆时的动态范围没控制好。所以,做DSP实现时,数值问题一定要提前考虑。

MIMO检测算法知识体系 MIMO检测算法 最大似然(ML)检测 线性检测(ZF/MMSE) 球形译码(SD) 穷举搜索 性能最优 复杂度极高 矩阵求逆 复杂度低 性能一般 球内搜索 性能接近ML 复杂度可控 工程实践:MMSE保底 → 性能不足时升级SD → ML作为性能基准 复杂度:ML > SD > MMSE ≈ ZF

好了,这一章的内容就到这里。三种检测算法各有各的脾气,关键是要根据你的应用场景来选。下一章我们会深入MMSE的DSP实现细节——嗯,那才是真正考验功夫的地方。


公众号:蓝海资料掘金营,微信deep3321