智能无线通信:前沿技术与应用
上QQ阅读APP看书,第一时间看更新

第二篇 人工智能在无线通信传输技术中的应用

第2章 基于深度学习的MIMO信号检测

2.1 MIMO信号检测基本原理与传统算法

MIMO技术是指发送端和接收端同时配备多根发送天线/接收天线,从而获得系统容量的提升。MIMO系统收发端结构如图2.1所示。

图 2.1  MIMO系统收发端结构示意

无论是空间复用、空时编码还是空间调制,对编码信号的检测始终是MIMO无线通信系统接收端最重要的功能之一。相比于衰落信道下的单发单收(SISO)系统和单发多收(SIMO)系统,MIMO系统涉及的天线更多,MIMO系统信号检测会更难,这是因为除了衰落的影响,其接收端还面临着来自多根天线同时传输信号的空间干扰。所以,在这种空间干扰存在的情况下,对信号进行有效的检测是一项非常艰巨的任务,为此需要非常复杂的信号处理算法。因此,高效、高性能、低复杂度的MIMO信号检测算法的设计、分析与应用持续吸引着研究人员与系统开发工程师的注意。为方便叙述,这里首先给出MIMO系统的收发数学模型:

(2.1)

其中xy分别代表发送符号向量和接收符号向量,Hn分别代表信道响应矩阵和加性高斯白噪声向量。此处仅给出名称,2.1.1小节将对此数学模型做详细的解释。

所有MIMO信号检测算法的目标都是在知道接收符号向量y和信道响应矩阵H的情况下,获得对发送符号向量x的估计。发送符号的元素通常来自于一个预先定义好的离散值的调制符号表,比如QPSK的调制符号表就是,当然调制符号表也可以是纯实数的,这取决于数学模型是实数的还是复数的。某些检测算法通常会产生软输出,例如基于置信传播(Belief Propagation,BP)的算法,其输出将会是表示传输符号可能性的软值,这些软值可以被送入编码系统的信道译码器,与送硬值进入信道译码器相比,送软值可以提供更好的性能。此外,一些检测算法只产生硬输出,例如基于搜索的算法,它们通常在一个离散数值候选向量集合里进行搜索测试,并从集合中选择一个离散向量作为输出。虽然这些硬输出也可以被送入信道译码器,但是为了进一步提升信道译码器的性能,必须设计出合适的方法,从检测算法的硬输出中产生软值,以便将其送入信道译码器。

常用的MIMO信号检测算法包括线性检测算法(如MF、ZF、MMSE检测算法等),以及非线性的包含多阶段干扰消除的算法(如ZF-SIC和MMSE-SIC检测算法)。这些次优算法的核心优势就是它们多项式级的复杂度。通过合理优化伪逆求解过程,ZF-SIC算法的复杂度甚至还可以更低。同时,线性检测算法的误符号率(Symbol Error Ratio SER)性能也可以通过格基规约技术来提升。除了上面提到的算法之外,还有一系列基于搜索的算法,典型代表如球译码(Sphere Decoding,SD)算法(参考文献[1]、[2]、[7])。虽然SD算法的SER性能很强,但是其复杂度很高。

通常,MIMO信号检测算法的两大重要目标——高性能和低复杂度——并不能同时达成,因为一方的实现似乎是以牺牲另一方为代价的。比如,线性算法在复杂度方面有很好的表现,但是相比于最优算法,它的SER性能非常有限。另外,虽然SD算法能够达到最大似然检测算法的性能,但是它的复杂度很高。因此,传统的观点认为,为了达到良好的SER性能,需要对复杂度做权衡。但是这种权衡将使得大规模MIMO变得不切实际,因为大规模MIMO下的信号检测会面临更高的复杂度。

2.1.1 系统模型

本小节对MIMO系统的模型进行详细阐述。对于一个包含nt根发送天线、nr根接收天线的MIMO系统,其信号发送与接收可以建模为

(2.2)

其中:表示第i根天线的发送符号;表示第j根天线的接收符号;表示附加在第j根天线上的加性高斯白噪声;表示由第i根天线到第j根天线的信道响应,此处没有考虑多径,所以一条信道只有一个信道响应。由矩阵乘法的计算方法可以得出:

(2.3)

由式(2.3)可见,每一根天线上的接收符号都是由所有发送符号乘对应的信道响应再求和,然后加上高斯白噪声得到的,这就是MIMO的本质,每一个接收符号都包含所有发送符号的信息。将式(2.3)简写为矩阵和向量的形式,即可得到式(2.1)所示的数学模型。在本书中,除了特殊说明以外,一般使用大写粗斜体字母表示矩阵,小写粗斜体字母表示列向量。式(2.1)中,x表示长度为的发送符号列向量,x中的每一个元素都来自一个已知的QAM字母表(例如 4QAM、16QAM等),即,并且本书假设所有星座图均已经过能量归一化,即y表示长度为nr的接收符号列向量,表示任意复数。表示nr×nt大小的信道响应矩阵,其元素均建模为独立同分布的,均值为0、方差为1的复高斯随机变量。n表示复数加性高斯白噪声向量,且满足。在MIMO信号检测问题中通常假设接收端已知完全准确的信道响应矩阵H,而H在发送端则是未知的。

在上述模型中,所有向量和矩阵的元素都为复数,因此式(2.3)对应的系统模型也被称作复数模型。传统算法可以直接用于复数模型中,但对于神经网络则不然。在一些基于深度学习的算法中,通常要先将复数模型转换成等效的实数模型,如式(2.4)所示。

(2.4)

其 中,分别表示取矩阵或向量的实部或虚部。由矩阵乘法运算法则可知,实数模型[式(2.4)]与复数模型[式(2.3)]的计算结果相同,是等效的。值得注意的是,在实数模型中,发送符号向量的元素都来自脉幅调制(Pulse-Amplitude Modulation,PAM)字母表,PAM字母表是由复数模型的QAM字母表转换得到的。例如,若复数模型的QAM字母表为,则其转换后的实数模型的PAM字母表为。又如,若复数模型采用非标准的16QAM字母表,则其转换后的实数模型的PAM字母表为

2.1.2 最优检测算法

本小节介绍SER性能最优的MIMO信号检测算法——最大似然检测算法。顾名思义,最大似然(Maximum Likelihood,ML)检测算法(简称ML算法)就是找到使得似然函数值最大的候选向量。为了方便阐述,这里给出MIMO信号检测问题的似然函数:

(2.5)

由式(2.5)可知,对于指数函数来说,在给定Hx的前提下,越小,其函数值越大。所以求ML函数的问题可转化为使最小的问题,从而得到ML的目标函数,如式(2.6)所示。

(2.6)

因为集合包含发送符号向量的所有可能,所以ML算法直接采用遍历搜索的方法在集合中穷举来寻找使得目标函数最小的候选。ML算法通过最大化似然函数,能够让平均错误概率最小,获得最优的SER性能,但是穷举所有可能的计算复杂度非常高,并且复杂度会随nt的增长而呈指数级增长,这样高的复杂度在大规模MIMO场景下是尤其不能接受的,因此虽然ML算法SER性能最优,却几乎无法在实际生活中得到应用。但是ML算法通常作为衡量其他信号检测算法SER性能的基准,即使这样,在进行性能仿真测试时,随着发送天线数目nt的增加,测试ML算法的性能所需要的时间也会成倍地增加而变得不可实现,所以在一些大规模MIMO场景中也会采用SD算法替代ML算法作为SER性能的评估标准。ML算法虽然因为较高的复杂度而不可实现,但是它的目标函数仍有重要的参考价值,这一点会在后文介绍基于深度学习的信号检测算法中进行详细叙述。

2.1.3 线性检测算法

线性检测算法通过对接收信号进行线性变换,估计出软值的发送符号,再由软值符号映射到硬值符号,即 ,其中为变换矩阵,表示由软值符号到硬值符号的映射函数,映射方法就是把的每一个元素映射为字母表中与该元素距离最近的符号。线性检测算法的最大优势就是复杂度很低。

匹配滤波检测算法

匹配滤波(Matched Filtering,MF)检测算法(简称MF算法)(参考文献[4])在检测某一个发送符号时,把其他所有的发送符号都看作噪声,通过信道之间相互独立的特性去消除其他发送符号的干扰。MF适用于接收天线数目远大于发送天线数目的场景。定义表示信道响应矩阵H的第i列,则式(2.1)中的系统模型可以展开成如下形式:

(2.7)

式(2.7)中最右边的第一项表示第k个发送符号xk对接收信号y做出的贡献,第二项表示除第k个发送符号外其他发送符号对接收符号y做出的贡献,那么在考虑检测发送符号xk时,其他发送符号的部分[式(2.7)最右边的第二项]就是干扰。匹配滤波器在检测时将这些干扰统统看作噪声,并通过以下线性变换的方式去除估计软值符号:

(2.8)

其中,表示列向量的共轭转置。可以消除一部分干扰;当越大时,就会越接近于0,干扰消除就越好。反观的影响,当较小时,随机变量的方差比较小且均值为0,此时可以很好地消除干扰;但是当较大时,随机变量的方差会因为叠加而增大,方差大了,干扰就除“不干净了”,性能自然就下降了。所以当系统很大且很小时,即系统负载因子较小时,MF算法就可以很好地消除干扰。将线性变换写成矩阵的形式,则MF检测方程为

(2.9)

MF变换矩阵,计算式(2.9)的复杂度为。对于轻载系统(),MF算法的SER性能接近最优;然而在中度至满负载的系统中,由于来自其他发送符号的干扰不断增加,MF算法的SER性能会随着的增长而严重下降。

迫零均衡检测算法

迫零(Zero Forcing,ZF)均衡检测算法(简称ZF算法)是一种线性检测算法,它使用信道响应矩阵H的伪逆对接收向量y进行线性转换。令维度为nt×nrQ矩阵代表信道响应矩阵H的伪逆,则有:

(2.10)

因为,所以Qy可以完全消除其他发送符号带来的干扰,这也是“迫零”这一名字的由来。它的缺点是,在完全消除干扰的同时却增强了噪声。令表示Q的第k行,那么是一个长为的行向量,并且它除了第k个元素是1之外其他元素都是0。发送符号的软值估计可以写成:

(2.11)

在获得发送符号的软值估计以后,通过映射函数即可将发送符号的软值估计映射为硬值估计。式(2.11)中的信噪比(Signal-to-Noise Ratio,SNR)可表示为

(2.12)

ZF算法在消除干扰的同时给噪声功率乘上了,增强了噪声。在低SNR条件下(很大),噪声增强使ZF算法的性能降低,此时ZF算法的性能要比MF算法的性能差;在高SNR条件下(很小),完全消除干扰可使得ZF算法的性能优于MF算法的性能。其线性变换公式为

(2.13)

ZF算法的变换矩阵,其计算复杂度是的三次方级别(因为需要求解伪逆),所以每个符号的复杂度就是,这虽然比MF算法的复杂度高了一阶,但是在大规模MIMO场景下仍然具有吸引力。与MF算法相同,在中载到重载情景下,随着的增长,ZF算法的SER性能也会严重下降。

最小均方误差检测算法

最小均方误差(Minimum Mean Squared Error,MMSE)检测算法(简称MMSE算法)是一种线性检测算法,顾名思义,MMSE的目标是使得发送符号向量与发送符号估计向量之间的均方误差(又称标准误差)最小,即其变换矩阵是式(2.14)的解:

(2.14)

通过采用令导数为0求最值的方法,可以求得式(2.14)的解为。除此之外,式(2.14)的解还有另一种形式,即。这两种解的形式是相同的,但是前者在形式上可以方便地与MF、ZF算法的变换矩阵做比较,所以更常用。MMSE算法的线性变换公式如式(2.15)所示,MMSE算法结合了MF和ZF算法的优点。在高SNR条件下(很小),MMSE算法的表现和ZF算法的表现一样,因为此时求逆括号中的第二项变得很小,以至于变得无关紧要了;在低SNR条件下(很大),MMSE算法的表现很像MF算法的表现,因为随着的对角线上的元素会越来越突出,它的逆矩阵就会趋向一个对角矩阵,且对角矩阵的元素数值大小都近似。

(2.15)

MMSE算法的性能在所有的SNR条件下都要优于MF和ZF算法的性能。但是MMSE算法的性能需要知道信道噪声的方差,而MF和ZF算法则不然。另外,MMSE算法也需要求逆,所以每个符号的复杂度为。在中载到重载情景下,MMSE算法的SER性能也会随着的增长而下降。

线性检测中的信号与干扰加噪声比

信号与干扰加噪声比(Signal to Interference plus Noise Ratio,SINR)定义为接收符号中有用信号平均功率与干扰信号和噪声的平均功率之和的比值。经过线性检测后,第k个发送符号的软值估计可以写成:

(2.16)

其中,是变换矩阵Q的第k行,hi是信道矩阵H的第i列,则发送符号的SINR可以写成:

(2.17)

MF、ZF和MMSE算法都满足式(2.17),ZF算法因为完全消除了干扰,所以其SINR在式(2.17)的基础上做了简化, 如式(2.12)所示。

2.1.4 SD检测算法

SD检测算法(简称SD算法)的SER性能与ML算法相当,并且SD算法搜索的速度要比ML算法快。SD算法的思路是首先将格空间映射为Hx,然后在空间Hx里以接收符号为球心,以一个固定数值为半径形成一个超球,接着在这个超球内搜索与接收符号之间欧氏距离最近的格点。这样仅在超球内搜索而不是在整个格空间里搜索,在超球形成的时候就排除了很多超球外的候选格点。超球中最优的候选格点自然也是整个格空间里的最优候选格点。SD算法示意如图2.2所示。

图2.2 SD算法示意

如何确定超球半径d是一个关键问题。过大的超球半径意味着超球中仍有很多格点,搜索的复杂度依然很高;过小的超球半径则会导致超球内不存在格点的情况出现。SD算法的另一个关键问题是如何判断一个格点是否在超球里,或者说怎样找到超球内的格点,如果仍然在整个格空间内穷举,那么就和ML算法一样了,SD就没有意义了。对于第二个问题,SD算法是这样解决的:它通过QR(正交三角)分解把在m维超球内寻找格点的问题分解成在一维超球(一个区间)内寻找格点的问题的叠加。如果把ML算法的穷举搜索看作树的深度遍历问题,那么SD算法就可以看作树的深度遍历加剪枝的过程。针对如何确定合适的超球半径d这一问题,常见的做法是首先利用2.1.3小节介绍的ZF算法获得发送符号估计向量,再由该估计向量通过式(2.18)计算距离,将这个距离设为超球半径。

(2.18)

式(2.18)中的表示由ZF算法获得的发送符号的硬值估计向量,d表示超球半径。如果超球半径采用这种计算方式,那么SD算法就可以拆解成两个过程:首先进行线性检测获取半径,然后进行超球搜索获得估计向量。所以SD算法的复杂度要比线性检测算法的复杂度高得多。这里使用SD算法作为评估其他检测算法性能的标准。为了进一步降低SD算法搜索的复杂度,这里直接利用真实的发送符号向量来计算超球半径,省去了线性检测的步骤,获得了更完美的超球半径,这样可以大大缩减SD算法的仿真时间,但是这在实际的系统中是不可能做到的,这里仅仅是为了缩短SD算法仿真的时间。