MIMO OFDM 系统检测算法

1. 前言

MIMO的空分复用技术可以使得系统在系统带宽和发射带宽不变的情况下容易地获得空间分集增益和信道的容量增益。OFDM技术采用多个正交的子载波并行传输数据,使得每一路上的数据速率大大降低,并且加入了时间保护间隔,因此具有较强的抗多径干扰和频率选择性衰落的能力。MIMO和OFDM技术将是未来无线通信中极具竞争力的技术。信号检测是MIMO-OFDM系统的关键任务之一。目前针对MIMO-OFDM系统中信号检测技术的研究主要集中在线性检测、非线性检测和最优检测三个方面。

MIMO-OFDM系统的检测可以简单的看成是已知信道矩阵 \(\bf{\hat{H}}\)(根据信道估计得到的)和加性高斯白噪声 \(\bf{v}\) 的统计信息,根据接收端接收到的数据 \(\bf{y}\),对接收信号进行处理,得到发送符号 \(\bf{\hat{x}}\) 的估值。

2. 线性检测算法

2.1 破零(ZF)检测算法

ZF检测算法就是根据信道矩阵的逆来检测数据,信道矩阵的逆可以表示为:

\[{{\bf{H}}^ + } = \left\{ {\begin{array}{*{20}{c}}
{{{({{\bf{H}}^H}{\bf{H}})}^{ - 1}}{{\bf{H}}^H},{\rm{ }}{N_t} < {N_r}} \\
{{{\bf{H}}^H}{{({{\bf{H}}^H}{\bf{H}})}^{ - 1}},{\rm{ }}{N_t} > {N_r}} \\
{{{\bf{H}}^{ - 1}},{\rm{ }}{N_t} = {N_r}} \\
\end{array}} \right.\]

这里 \(N_t\) 和 \(N_r\) 分别表示发送天线数和接收天线数。那么,ZF检测可以描述成:

\[{{\bf{d}}_{ZF}} = {{\bf{H}}^ + }{\bf{y}} = {\bf{x}} + {{\bf{H}}^ + }{\bf{v}}
\]

在发送符号的星座图中寻找与 \({{\bf{d}}_{ZF}}\) 最接近的点(量化处理),就可以得到发送符号的估值 \(\bf{\hat{x}}\)。

2.2 线性最小均方误差(LMMSE)检测算法

发射符号 \(\bf{x}\) 与其估计值 \(\bf{\hat{x}}\) 的均方误差可以表示为: \(MSE = E[{({\bf{x}} - {\bf{\hat x}})^H}({\bf{x}} - {\bf{\hat x}})]\),LMMSE检测的目标就是最小化MSE。根据线性MMSE准则,令 \({{\bf{G}}_{LMSE}} = {({{\bf{H}}^H}{\bf{H}} + \rho {{\bf{I}}_{{N_t}}})^{ - 1}}{{\bf{H}}^H}{\bf{H}}\),这里 $\rho $ 表示信噪比的倒数,可得LMMSE检测可以描述为:

\[{{\bf{d}}_{LMSE}} = {{\bf{G}}_{LMSE}}{\bf{x}} + {{\bf{G}}_{LMSE}}{\bf{v}}
\]

经过量化处理之后即可得到 \(\bf{\hat{x}}\)。

3 非线性检测算法

干扰消除是非线性检测中的关键技术,它的作用是去除天线间的干扰,从而提高系统检测的性能。其基本原理是:将先前步骤中已经检测出的 \({{{\bf{\hat x}}}_i}(i = 1,2, \cdots ,K)\) 所产生的接收信号当成干扰,从接收向量中去除,即计算 ${\bf{y}} - \sum\limits_{i = 1}^K {{{{\bf{\hat x}}}_{\bf{i}}}{{\bf{h}}_i}} $。该计算去除了信道矩阵中的相应列,使系统变成了具有 \(N_t-K\) 副发射天线、\(N_r\) 副接收天线的系统。这种技术类似于判决反馈均衡器(DFE),使余下的检测减少了干扰源,增加了天线的分集增益。

3.1 串行干扰消除

串行干扰消除采用串行的方式来消除干扰,即一次一个地将干扰从接收信号中去除.计算步骤:

  • 1)选择某种线性检测算法检测出第一副天线发送符号估值 \({{{{\bf{\hat x}}}_1}}\),将该估值信号产生的干扰从接收信号 \(\bf{y}\) 减去,得到部分清理的信号 \({\bf{y}}(1) = {\bf{y}} - {{{\bf{\hat x}}}_1}{{\bf{h}}_1}\),此时系统变成 \({N_{t - 1}}\) 个发射天线和 \(N_r\) 个接收天线。
  • 2)用线性检测得到第二副天线发送符号的估值 \({{{{\bf{\hat x}}}_2}}\),再将该估值信号产生的干扰从 \({\bf{y}}(1)\)中减去,得到部分清理的信号 \({\bf{y}}(2) = {\bf{y}}(1) - {{{\bf{\hat x}}}_2}{{\bf{h}}_2}\),此时系统就变成 \({N_{t - 2}}\) 个发射天线和 \(N_r\) 个接收天线。
  • 3)依此类推,直至检测出所有的符号。

3.2 并行干扰消除

并行干扰消除采用并行的方式来消除天线间的干扰,其实现方法:首先选用一种线性检测方法初步检测出所有的发送符号估值 \({{{\bf{\hat x}}}_i}(i = 1,2, \cdots ,{N_t})\),然后针对每个发送符号消除其他符号产生的干扰,即做计算:\({{\bf{y}}_k} = {\bf{y}} - \sum\limits_{i = 1,i \ne k}^{{N_t}} {{{{\bf{\hat x}}}_i}{{\bf{h}}_i}}\),此时对每个发送天线而言,系统都变成了1根发射天线和 \(N_r\) 根接收天线,可以方便地进行检测处理。

3.3 QR分解

QR分解的主要思想是变换信道矩阵 \(\bf{H}\),避免矩阵的求逆,获得较低的计算复杂度。实现步骤:

  • 1)对信道矩阵实行QR分解
\[{\bf{H}} = \left[ {\begin{array}{*{20}{c}}
{{{\bf{Q}}_1}} & {{{\bf{Q}}_2}} \\
\end{array}} \right]\left[ {\begin{array}{*{20}{c}}
{\bf{R}} \\
{{{\bf{O}}_{{N_r} - {N_t},1}}} \\
\end{array}} \right]\]

其中 \(\left[ {\begin{array}{*{20}{c}}
{{{\bf{Q}}_1}} & {{{\bf{Q}}_2}} \\
\end{array}} \right]\) 是正交归一化的酉矩阵,满足 \({{\bf{Q}}^H}{\bf{Q}} = {\bf{I}}\),\({\bf{R}}\) 是 \({N_t} \times {N_t}\) 的上三角矩阵。

  • 2)对接收信号 \(\bf{y}\) 计算
\[{{\bf{d}}_{QR}} = {{\bf{Q}}^H}{\bf{y}} = {\bf{Rx}} + {\bf{z}}
\]

上式表示成矩阵形式为:

\[\left[ {\begin{array}{*{20}{c}}
{{d_{QR1}}} \\
{{d_{QR2}}} \\
\vdots \\
{{d_{QR{N_t}}}} \\
\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}
{{r_{1,1}}} & {{r_{1,1}}} & \cdots & {{r_{1,{N_t}}}} \\
0 & {{r_{2,1}}} & \cdots & {{r_{2,{N_t}}}} \\
\vdots & \vdots & \ddots & \vdots \\
0 & \cdots & 0 & {{r_{{N_t},{N_t}}}} \\
\end{array}} \right]\left[ {\begin{array}{*{20}{c}}
{{x_1}} \\
{{x_2}} \\
\vdots \\
{{x_{{N_t}}}} \\
\end{array}} \right] + \left[ {\begin{array}{*{20}{c}}
{{z_1}} \\
{{z_2}} \\
\vdots \\
{{z_{{N_t}}}} \\
\end{array}} \right]\]
  • 3)可以从 \({x_{{N_t}}}\) 开始逐层计算检测,由 \({d_{QR{N_t}}} = {r_{{N_t},{N_t}}}{x_{{N_t}}} + {z_{{N_t}}}\) 求出 \({{{\bf{\hat x}}}_{{N_t}}}\),再将 \({{{\bf{\hat x}}}_{{N_t}}}\)代入下一层检测,即由\({d_{QR{N_t} - 1}} = {r_{{N_t} - 1,{N_t} - 1}}{x_{{N_t} - 1}} + {r_{{N_t} - 1,{N_t}}}{{{\bf{\hat x}}}_{{N_t}}} + {z_{{N_t}}}\) 求出 \({{{\bf{\hat x}}}_{{N_t} - 1}}\)。

-4)以此类推,直至检测出所有的符号。

注意,QR分解只适用于 \({N_t} \le {N_r}\) 的场合。

4 最优检测算法

最优检测是指检测出的信号具有最高的分集增益和最接近于原始信号(例如,具有最低的比特差错率)。但是,要达到最优这一目的,要付出极高的计算代价。

4.1 最大似然检测(ML)算法

最大似然检测算法是公认的最优检测算法,它将接收信号对所有可能的发送符号域进行全局搜索,找到与接收信号距离最小(即最大似然ML)的发送符号作为原始的发送符号。其估值公式为:

\[{{{\bf{\hat x}}}_{ML}} = \mathop {\arg \min }\limits_{{\bf{x}} \in {\bf{\Omega }}} {\left\| {{\bf{y}} - {\bf{Hx}}} \right\|^2}(1)
\]

其中,\({\bf{\Omega }}\) 表示所有发送符号的星座集合。

由于ML算法的计算量非常大,难以应用在实际的通信系统中,所以只能牺牲部分性能,采用次优的检测算法,以简化计算。

4.2 球面解码算法

球面解码算法的设计目的是在略微降低 ML 检测性能的前提下,大幅度减少搜索所需的计算量。因此,球面解码算法(SPA)也是采用式(1)进行搜索,但搜索的范围限制在一个以接收矢量 \(\bf{y}\) 为圆心、\(r\) 为半径的超球面内。显然,超球面内最靠近接收矢量的点也是整个星座中最靠近接收矢量的点,所以SPA 能够达到类似于ML检测的最佳性能。而且,由于SPA的搜索空间减小,所以其计算量也相应地减少。由此,SPA归结为解决如何选择 \(r\) 的大小以及如何确定位于超球面内的点。SPA的具体步骤这里不详细描述。

参考文献

[1] 周健, 张冬. MIMO-OFDM系统中的信号检测算法(I)[J]. 南京工程学院学报(自然科学版), 2010.

更多精彩内容请关注订阅号优化与算法和加入QQ讨论群1032493483获取更多资料

往期精选:

MIMO OFDM 常用信号检测算法的更多相关文章

  1. DotNet常用排序算法总结

    数据结构和算法对一个程序来说是至关重要的,现在介绍一下几种算法,在项目中较为常用的算法有:冒泡排序,简单选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等7中算法. 现在介绍选择排序算法, ...

  2. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  3. 转载部长一篇大作:常用排序算法之JavaScript实现

    转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...

  4. 【学】常用hash算法的介绍

    基本知识 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映 ...

  5. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  6. ACM 中常用的算法有哪些? 2014-08-21 21:15 40人阅读 评论(0) 收藏

    ACM 中常用的算法有哪些?作者: 张俊Michael 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以水题为主(就是没有任何算法, ...

  7. ACM 中常用的算法有哪些?

    在网上看到别人ACM学习的心得,转载过来,源地址不记得了,当时是百度的.内容如下: 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以 ...

  8. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  9. 面试中常用排序算法实现(Java)

    当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...

随机推荐

  1. 力扣567.字符串的排列—C语言实现

    题目 来源:力扣(LeetCode)

  2. 在kubernetes集群里集成Apollo配置中心(3)之交付Apollo-portal至Kubernetes集群

    1.执行apollo-portal数据库脚本 apollo-portal数据库脚本链接:https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1 ...

  3. Nginx基础 - 通用优化配置文件

    [root@localhost ~]# vim /etc/nginx/nginx.conf user nginx; worker_processes auto; worker_cpu_affinity ...

  4. hash table

    Hash Table,叫做哈希表,也叫做散列表.概念:通过某种对应关系h,使得每一个元素和储存位置一一对应.这种对应关系称为哈希函数.它最大的优点就是插入.搜索和删除得很快(O(1)).碰撞(Coll ...

  5. Python import本地模块

    无法识别本地模块 在pycharm中选择文件夹Mark Directory as -> Source root. 或者使用sys.path.append()添加文件夹路径 还是报错ImportE ...

  6. 基础命令使用[win篇]

        基础命令使用 [ win篇 ] 2017-11-05 WIN CMD 0x01 基础命令使用: 演示环境: 1 2 win2008R2cn ip: 192.168.3.23 假设为入侵者机器 ...

  7. VirtualBox All in One

    VirtualBox All in One 虚拟机 / VM / Virtual Machine x86 and AMD64/Intel64 VirtualBox is a powerful x86 ...

  8. Azure 计费 & 成本管理 & 取消 Azure 订阅

    Azure 计费 & 成本管理 & 取消 Azure 订阅 https://docs.microsoft.com/zh-cn/azure/cost-management-billing ...

  9. vuex & redux

    vuex & redux https://vuex.vuejs.org/ https://github.com/xgqfrms/VAIO/ https://scrimba.com/playli ...

  10. HTML5 Server-Sent Events

    HTML5 Server-Sent Events SSE demo https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_sse htt ...