0


基于深度学习的CSI反馈(CsiNet)

前言

论文:《Deep Learning for Massive MIMO CSI Feedback》
文章地址:Deep Learning for Massive MIMO CSI Feedback | IEEE Journals & Magazine | IEEE Xplore
CsiNet仿真代码:GitHub - sydney222/Python_CsiNet: Python code for "Deep Learning for Massive MIMO CSI Feedback"数据集: https://www.dropbox.com/sh/edla5dodnn2ocwi/AADtPCCALXPOsOwYi_rjv3bda?dl=0.

最近在学习有关CSI反馈相关知识,整理了这一篇将深度学习引入CSI反馈的高引用论文,如果有理解不正确的地方,敬请回复。

文章主旨

本文使用深度学习技术来开发一种新的CSI感知和反馈机制CsiNet,它可以从训练样本中学习如何有效地利用信道结构,目的是为了提升性能和减少复杂度/开销。实验表明,相比于一些压缩感知(CS)算法,CsiNet可以极大地提高CSI恢复和重建的质量,甚至在一些压缩感知算法无法工作的极其低的压缩范围内,CsiNet也能够保持有效的波束形成增益。

文章背景

现有CSI反馈方法:

1. 基于码本的CSI反馈方法:

用户:通过码本计算并量化预编码矩阵,向基站反馈预编码矩阵索引

基站:通过码本重建CSI

问题:**计算复杂度高,无环境信息辅助**

2. 基于压缩感知的CSI反馈

用户:将信道矩阵变换至稀疏域,利用CS算法(AMP,LASSO,TVAL3....)进行压缩

基站:通过迭代算法重建CSI

问题:**严重依赖信道稀疏性假设;CS使用随机投影,无法充分利用信道结构;实际应用中,重建算法通常是迭代的,重建速度较慢无法满足实时性要求。**

深度学习具有较强的学习和拟合能力,可处理复杂信道条件来解决上述问题。

研究动机:

大规模MIMO系统中大量天线带来较大的反馈开销;图像压缩中,自编码器能够有效压缩图像信息;

创新点---将CSI视为”图像“!

在CSI反馈机制中引入深度学习自编码器架构,提出基于神经网络的CSI反馈架构CsiNet;

CsiNet具有以下特性:

Encoder: 不使用随机投影,而是通过训练数据学习原始通道矩阵的变换,以压缩表示(码字)。
Decoder: CsiNet学习从码字到原始信道的逆变换。

系统模型和CSI反馈

这篇文章假设完美的CSI已经被获取,只考虑CSI从用户侧到基站端的反馈。一旦用户侧获得了信道矩阵\widetilde{\mathbf{H}},就通过2D-DFT来获取截断的矩阵\mathbf{H},然后使用编码器生成码字\mathbf{s},再将码字\textbf{s}反馈送入基站端,使用解码器获得\mathbf{H},通过逆DFT变换便可得到空间频域的最终信道矩阵。

模型实现:(encoder到decoder的层数按顺序依次实现即可)

信道矩阵\mathbf{H}由实部和虚部构成,encoder端模型搭建具体流程如下:

1)输入数据大小为23232,包括实部和虚部;

2)进行卷积,卷积核大小为3*3,个数为2,BN操作,使用LeakyReLU激活函数;

3)通过reshape将数据拉直;

再将数据通过dense进行压缩,变换为M维向量,数据压缩率\gamma=M/N。decoder端模型就不详细展开了,其中采用了类似ResNet的结构,通过两个RefineNet单元,进一步添加单元不会显著提高重建质量,只会增加计算复杂度。

def residual_network(x, residual_num, encoded_dim):
    def add_common_layers(y):
        y = BatchNormalization()(y)
        y = LeakyReLU()(y)
        return y
    def residual_block_decoded(y):
        shortcut = y
        y = Conv2D(8, kernel_size=(3, 3), padding='same', data_format='channels_first')(y)
        y = add_common_layers(y)
        
        y = Conv2D(16, kernel_size=(3, 3), padding='same', data_format='channels_first')(y)
        y = add_common_layers(y)
        
        y = Conv2D(2, kernel_size=(3, 3), padding='same', data_format='channels_first')(y)
        y = BatchNormalization()(y)

        y = add([shortcut, y])
        y = LeakyReLU()(y)

        return y
    
    x = Conv2D(2, (3, 3), padding='same', data_format="channels_first")(x)
    x = add_common_layers(x)
    
    x = Reshape((img_total,))(x)
    encoded = Dense(encoded_dim, activation='linear')(x)

    x = Dense(img_total, activation='linear')(encoded)
    x = Reshape((img_channels, img_height, img_width,))(x)
    for i in range(residual_num):
        x = residual_block_decoded(x)
    
    x = Conv2D(2, (3, 3), activation='sigmoid', padding='same', data_format="channels_first")(x)

    return x

模型训练:

通过COST 2100数据集,创建两种类型的信道矩阵:

1)5.3 GHz频段的室内场景

2)300 MHz频段的室外场景。

\mathbf{H}的大小是32 × 32 (包含实部和虚部),训练集、验证集和测试集分别包括100000,30000,20000个样本;epoch,learning rate,batch size分别设置为1000,0.001,200。

定义一种归一化MSE(NMSE)来量化恢复后的\hat{\mathbf{H}}和原始\mathbf{H}之间的差异:

定义余弦相似度\rho来描述波束成形向量的值,令\widehat{\widetilde{h}}_{n}为重构信道向量的第n个子载波。

用NMSE和ρ评估CsiNet的输出数据与原始数据的准确度。

训练结果和结论

可以看出CsiNet在低压缩比下表现良好,并且降低了时间复杂度。


本文转载自: https://blog.csdn.net/QFX123456/article/details/129642953
版权归原作者 FX的学习笔记 所有, 如有侵权,请联系我们删除。

“基于深度学习的CSI反馈(CsiNet)”的评论:

还没有评论