目录
1 源码和简化版代码
1.1 项目源码【https://github.com/haoyye/OFDM_DNN】
1.2 简化版代码【https://github.com/TianLin0509/DNN_detection_via_keras】
1.3 代码参考博士哥哥的文章【https://zhuanlan.zhihu.com/p/166159478】
2 INTRODUCTION
直接用全连接层构成的神经实现了传统的OFDM通信系统中的接收机。接收机部分包括信道估计和信号检测两个部分。将OFDM接收机视为完全的黑匣子。这个神经网络叫做FC-DNN。这一点是区别于另一片论文ComNet Combination of Deep Learning andExpert Knowledge in OFDM Receivers.pdf中的ComNet设计的。ComNet是把信道估计和信号检测分开用神经网络去计算,算是对FC-DNN的改进。性能的确所有提高。
3 DEEP LEARNING BASED ESTIMATION AND DETECTION
(1) 本文的神经网络就是由5层组成,三层隐藏层,分别用了256,500, 250, 120, 16个神经元。每16位传输的数据被分组,并基于独立训练的单个模型进行预测,然后将其连接到最终的模型中输出,除最后一层用Sigmoid函数将输出映射到区间[0,1]外,大多数层都使用Relu函数作为**函数。
(2)OFDM的通信系统结构
OFDM的通信系统结构,其实就是发送机+信道+接收机。其中模型实现是:传入信号后+串并转换(S/P)+加入导频+傅立叶变换+加入循环前缀+ 并串转换(P/S)–>进入信道–>接收机实现:并串转换(S/P)+去循环前缀+反傅立叶变换+并串转换+信道估计+信号检测。
该DNN系统为了获得用于联合信道估计和符号检测的有效DNN模型,包括两个阶段。第一个是在离线训练阶段,利用方差信息序列生成的OFDM样本,在不同的信道条件下,如典型的城市或丘陵地形延迟剖面,对模型进行训练。第二个是在线部署阶段,DNN模型生成恢复传输数据的输出,而不显式地估计无线信道。‘
其中训练模型中的损失函数是
ˆX(k)是预测,X(k)是监督消息,它是在该消息中传输的符号情况。
4 SIMULATION RESULTS
该系统使用了一个64个子载波,长度为16的OFDM系统。其中载波频率为2.6GHz,路径数为24,使用最大延迟为16的典型城市信道。采用QPSK作为调制方式。
A Impact of Pilot Numbers
比较了LS和mmse两种信道估计和检测方法,其中每帧使用64个导频进行信道估计。
LS方法的性能最差,因为没有使用信道的先验统计信息检测。相反,MMSE方法的性能最好,因为信道的二阶统计量被认为是已知的,并用于符号检测。基于深度学习的方法比lse方法具有更好的性能,可以与MMSE方法相媲美。
B Impact of CP
循环前缀能降低误码率。图4给出了无CP OFDM系统的误码率曲线,从图中可以看出,MMSE和LS都不能有效地估计信道。当信噪比大于15dB时,精度趋于饱和。然而,深度学习方法仍然有效。
C Impact of Clipping and Filtering Distortion
由于OFDM的有一个显著缺点是峰值平均功率比(PAPR),为了降低这个PAPR,需要使用clipping和filtering方法。实验研究了在MMSE检测方法下方,深度学习方法的检测性能比使用以上两种方法好。就是深度学习的效果比clipping和filtering更好。
图6中将DNN与MMSE方法进行了比较,即只使用8个导频,省略CP,且存在削波噪声。从图中可以看出,DNN比MMSE方法要好得多,但是在理想情况下,DNN的检测性能与MMSE方法相比有很大的提高
D Robustness Analysis
因为生成的训练数据是来源于仿真的数据,在实际的应用中,一般是不匹配的。不匹配就是仿真的数据和真实的数据是不一样的,那训练出来的模型必须是要根据仿真的那套规则来解析数据的。换到真实的环境中的话,那就需要重新用真实环境中的数据去重新训练模型。
图7显示了当测试阶段的最大延迟和路径数与本节开头描述的训练阶段中使用的参数不同时的误码率曲线。
5 简化版代码中的疑问
源码下载https://github.com/TianLin0509/DNN_detection_via_keras
由于本人电脑是普通笔记本,没有GPU程序跑起来太慢了,跑了十几个小时,迭代epochs才400/10000。也没有接触过python的程序
没法运行程序,就慢慢的琢磨以下问题,如果解决了,会来补充。
- 输入的数据矩阵大小【height weight channel】
input_bits = Input(shape=(payloadBits_per_OFDM * 2,))
其中的输入shape是多大的?是几*几的矩阵,没有看明白 - 神经网络的结构,最后一层为什么是16,那一帧数据有多大,一个符号有多长。dataset有多大
- 训练的参数都是些什么,学习率,Batch大小,epochs大小。对应的minbatch是什么,Maxepochs是多少
- 31 行的Model是什么意思?31行~34行的代码是什么意思?我没有看明白,哪行开始训练的。