论文题目: Power of Deep Learning for Channel Estimation and Signal Detection in OFDM Systems
论文地址: https://ieeexplore.ieee.org/document/8052521/
github源码地址: https://github.com/haoyye/OFDM_DNN
利用keras的简化代码: https://github.com/TianLin0509/DNN_detection_via_keras
这篇文章是无线通信与深度学习的经典之作, 作者找到了一个非常好的切入点, 很合理地将深度学习的成熟技术应用到了通信物理层的处理之中, 目前也应该是同领域的引用之首, 也成为许多同学争相学习的文章。 这里根据我自己的认识写一篇中文的解析, 希望可以帮助大家更好地理解。
因为是18年的文章, 文章用了大量篇幅介绍了基础的深度学习知识。 这一部分笔者就跳过了,和中心思想无关 (并非说文章不好,相反,我觉得作者的介绍极为精炼)。本文的实质核心是Secion II 的 B部分:
大家首先注意到本文的题目: Power of Deep Learning for Channel Estimation and Signal Detectionin OFDM Systems。 顾名思义, 本文作者的中心思想就是: 用神经网络来代替传统通信中的信道估计和信号检测部分。 需要注意的是, 作者不是使用两个独立的神经网络,分别完成信道估计和信号检测, 而是直接用一个神经网络来同时完成这两部分的工作。 这一点非常有意义, 传统的通信受限于设计的复杂度, 在过去几十年的积淀中, 整个通信接收的处理过程被有条不紊地分隔成 同步, 校正频偏, 信道估计, 信号检测等多个各司其职的独立模块,每个模块都有学者进行了独立的研究。 然而, 神经网络在计算机视觉和自然语言处理等领域的杰出表现, 证明了其可以拟合各种复杂函数的强大能力。 那这样就很自然的让人想到, 既然神经网络这么强大, 我们还需要把信号接收拆分成那么多模块吗? 直接一个网络搞定所有 (事实上无线通信已经有许多end-to-end的神经网络相关工作)!我举个例子: 传统的验证码识别中, 算法往往包括了 去噪, 分隔, 识别等多个步骤, 非常繁琐。 而基于深度学习的验证码识别算法则一步到位——把验证码图片输入神经网络, 直接输出识别出的验证码数字。 言归正传, 这篇文章也证明了, 一个神经网络,就可以完美地替代 传统通信中的 信号估计和信号检测 部分。
说了作者的核心思想, 那么具体是怎么实现的呢? 在讲这个之前, 我们首先要知道, 传统通信是怎么做的, 并从中得到启发。
用最简单的例子来讲解一下:
假设基站发送的信号为x, 信道为 h, 不考虑噪声的话, 那么接收信号 y = hx。 而接收端要做的就是从y恢复出原始信号x。 显然,这非常容易, x = y / h, 小学数学题。 这里的问题在于,接收端并不知道h是什么~因此, 就需要信道估计, 来估计出h。 思路也非常简单, 基站会先发送一个pilot信号x1 (实际中为了估计的更准确, 往往是发送一串),这个pilot信号,中文被称为导频信号。 这个是基站和接收端约定好的,也就是说,接收端是已知x1的。 这时候, 接收端接收到的经过信道的信号就是 y = hx1, 那么就可以再用小学数学解出 h = y / x1。这就是信道估计的思路。 当然在实际中由于噪声等问题, 不会这么简单地处理, 比如会用MSE准则来估计等。 但万变不离其宗, 传统通信的基本思想就是这样。
这就可以启发 神经网络 的设计和实现。 我们现在知道,作者的目标是用神经网络替代信道估计和信号检测。 而神经网络的设计, 其实本质上就是设计三个东西:
我们先讲后两个——损失函数, 其实浑然天成。 既然神经网络要做的是信号检测, 那么我们期望的是神经网络的输出结果就是原始发送信号x, 也就是说, 标签就是原始发送信号x。 在物理层通信中, x就是0或1。 那么这就是深度学习中基础的二分类问题——可以用交叉熵或mse作为损失函数。 本文中, 作者选用了mse作为损失函数, 即:
网络的具体架构, 这个在CV或NLP领域也许比较重要,但这在无线通信中,其实并不关键。 因为无线通信中往往不需要很复杂的神经网络架构, 那么,DNN全连接网络(Dense网络)往往是最好的网络选择——CNN或RNN都可以看做DNN的特例。在没有面临训练难度的时候, 全连接网络是最好的万金油。 本文的神经网络就是由5层全连接层组成,分别用了256, 500, 250, 120, 16个神经元。 这个数量级是无论如何也算不上大网络的,因此网络的架构其实并不是本文的重点。 更合理地应该说, 作者找到了一个很好的神经网络的应用场景,然后随便找了一个基本的网络,就得到了很好的效果。
最重要的就是, 输入和输出分别是什么? 输出,很容易理解, 既然我们的目的是要恢复出原始信号, 那我们的输出值就是我们恢复的信号呗。 (但这里需要一些处理, 后面再详细说) 那么输入是什么呢? 显然,我们应该把可用的信息都给到神经网络, 那在这个例子中, 可用的信息就是接收到的数据y, 这就是网络的输入。 但是刚刚不是说到嘛,传统中是需要通过信道估计来获取h的信息, 才能从y回复出x。那对于我们这个神经网络,难道也要先用传统的信道估计估计出h,再把h和y一起输入神经网络嘛? 不!这样太傻啦!
正确的打开方式是:
基站发送导频信号后用户得到的接收信号记为y1, 基站发送的数据信号,用户得到的接收信号记为y2, 我们直接把[y1, y2]一起输入神经网络, 那么神经网络就一定有能力恢复出原始信号!
原因? 很简单, 我们把传统方法中所用到的所有信息都给了网络, 传统算法都能做到的东西, 难道神经网络做不好吗? 这可是能战胜李世石的东西!
因此, 神经网络的输入就是导频的接收信号和数据接收信号。
上一节中, 用最简单的语言讲述了本文的核心架构。 这一节讲实现的细节:
再说一下整体的流程。 还是这张图,在线下训练过程中, 先使用仿真, 得到了一堆训练数据。 什么是训练数据呢? 其实就是仿真产生了不同的信道 和 发送数据(包括不变的导频和变化的数据x), 然后把发送数据通过信道再加上噪声, 得到了接收信号y。 这个接收信号y就是输入信号, 数据x就是标签。 {x,y}就可以看成一个样本。 在线下训练时,我们生成100万个样本(这个100万只是我随口说的,相信堵读者们不会这么死板哈)对网络进行训练。 随着训练的迭代, 损失函数越来越小, 也就是说,网络恢复出的数据和原始数据越来越接近。 训练完毕时,我们将网络中的参数权重都固定, 不再改变。 在线上使用时,只需将接收信号通过网络, 就可以获得恢复信号了。 注意: 这时网络的权重已经固定, 因此复杂度仅仅只是做了几个矩阵相乘运算而已, 非常低(真正耗时的网络训练部分在线下可以提前完成, 比如你可以在使用前先花个一天训练好模型,而真正使用的时候是不需要对网络进行训练的)。
最后,来看一下网络的性能。
作者再做仿真的时候,可以认为分为了两种情况——理想情况与非理想情况。 比如下图:
64Pilots就是比较理想的情况——充足的导频信号,可以做好信道估计。 可以看到, 神经网络的性能在这时候是和传统方法差不多的。 其实应该说是略逊——这其实可以认为传统方法差不多做到了这种通信框架下的极限性能, 神经网络也难以更进一步。 笔者尝试过调整用更复杂的网络, 但性能也难以突破。 那是否说明神经网络就没什么意义了呢? 其实不然, 作者从鲁棒性角度, 阐释了网络相比于传统算法更好的适应能力。
图中同时展示了8个Pilots的场景, 这代表了匮乏的导频信号——传统方法的信道估计几乎无法实施,因此可以看到, 无论是LS还是MSE方法, 性能都巨差无比,可以说是不能工作了。 而神经网络的方法虽然相比于64Pilots有所下滑, 但相比于传统算法有巨大的增益。
这个仿真结果不仅体现了神经网络的鲁棒性, 也有很重要的实际意义——我们其实可以减少导频信号的数量。 这其实是变向提升了传输的速率, 节约的导频信号就可以用来传输数据了。
作者后续又做了其他非理想情况的仿真,比如没有CP的场景等等,也算是一种探索。仿真结果也大同小异,在非理想场景下, 神经网络展现了远胜于传统算法的性能。
这篇文章作为深度学习和无线通信结合的经典之作, 我认为有标杆的意义: