草庐IT

阅读文献《DCRNet:Dilated Convolution based CSI Feedback Compression for Massive MIMO Systems》

tanyuyang 2024-02-14 原文

这篇文章的作者是广州大学的范立生老师和他的学生汤舜璞,于2022年10月发表在 IEEE TRANSACTIONS ON VEHICULAR TECHNOLOGY。

文献提出了一种基于空洞卷积(Dilated Convolution)的CSI反馈网络,即空洞信道重建网络(Dilated Channel Reconstruction Network, DCRNet)。还设计了编码器和解码器块,提高了重建性能并降低计算复杂度。

1 研究背景

在下行MIMO系统中,利用信道状态信息(CSI)是BS完成预编码设计的前提。在时分双工(TDD)模式下,由于信道的互易性,BS可以直接获得下行链路的CSI。然而在频分双工(FDD)模式下,因为BS由于弱互易而难以获得CSI信息,下行链路的CSI必须由UE来估计。但在大规模MIMO系统中,反馈CSI矩阵的开销随着天线数量的增加而增加,也受到用户的发射功率和上行带宽的限制。因此,需要对反馈CSI进行压缩。

传统基于CS的方法如LASSO和BM3D-AMP算法等存在一些局限性,如假设CSI是理想稀疏的,在随机工程中忽略了信道统计,迭代处理导致了较大的延迟等。

基于深度学习的方法如CsiNet等,优于传统的基于CS的算法,而且可以有效地减小网络参数。这类算法的主要限制是网络架构不能提供足够的感受野(receptive field, RecF)*,表明深层神经元不能表示原始输入的足够区域。为了克服这种限制,一些论文提出了设计更大的RecF以增加卷积大小来提高CSI重建性能,代价是增加网络的复杂度。因此,设计一种轻量级的网络架构,在较低计算复杂度下提高RecF的同时,又能保持CSI重构的性能,是非常重要的。

文章的主要贡献有:

  • 提出了一种基于扩展卷积的CSI反馈网络DCRNet,该网络在有效压缩CSI反馈的同时降低了计算复杂度;
  • 在不增加卷积大小的情况下,利用扩展卷积增强RecF网络,重新设计了一种先进的编码器和解码器块,以提高重构性能,降低计算复杂度。

*感受野:CNN中每一层输出的特征图上的像素点映射回输入图像上的区域大小。通俗点的解释是,特征图上一点,相对于原图的大小,也是卷积神经网络特征所能看到输入图像的区域。

2 CSI反馈系统

考虑频分双工MIMO下行链路,在BS上有\(Nt>>1\)根天线,在每个UE上有1根天线,在OFDM中有\({N}_{\mathrm{c}}\)个子载波,第n个子载波的复值接收信号为:

\[y_n={\mathbf{h}}_n^H \mathbf{b}_n x_n+z_n, \]

\({\mathbf{h}}_n \in \mathbb{C}^{N_{\mathrm{t}} \times 1}, (·)^H,\mathbf{b}_n \in \mathbb{C}^{N_{\mathrm{t}} \times 1}, x_n \in \mathbb{C} \text {, 和 } z_n \in \mathbb{C}\)分别表示第\(n\)个子载波上的信道增益向量、共轭转置、波束成形向量、发射信号和加性高斯白噪声(AWGN)。所有子载波的CSI可表示为矩阵\({\mathbf{H}}=\left[{\mathbf{h}}_1, {\mathbf{h}}_2, \ldots, {\mathbf{h}}_{{N}_c}\right] \in \mathbb{C}^{N_t \times {N}_c}\),其中共有\(2N_cN_t\)个元素。

BS的波束形成和预编码设计需要CSI矩阵H的反馈,但MIMO的天线数量导致巨大的开销。为了解决这个问题,需要将CSI矩阵H压缩后再反馈给BS,CSI反馈模型如图1所示。

图1 CSI反馈结构

CSI矩阵H首先通过离散傅里叶变换(DFT)从空间域和频域变换到角域和延迟域,即:

\[\tilde{H}=F_cHF_t^H, \]

其中,\(F_c,F_t\)分别为\(Nc × Nc\)和$Nt × Nt \(的DFT变换矩阵。由于多径到达有延迟区间,矩阵\)\tilde{H}\(在角延迟域中是稀疏的,它可以分为两部分,一部分是\)H_a\(,其中有\)N_a\(行由非零元素组成(\)N_a < N_c\(),另一部分其余\)N_c−N_a\(行由近零元素组成。把信道矩阵\)H\(压缩为\)H_a$,而且信息损失可以忽略不计。

为了进一步压缩CSI矩阵,还要应用基于深度学习的自编码压缩和恢复模块,如图1所示,通过编码器压缩CSI矩阵输出较小的码字向量:

\[\begin{align*} \boldsymbol{v}=\mathcal {E}(\theta _{1},\boldsymbol{H}_{\boldsymbol{a}}), \tag{3} \end{align*} \]

其中,\(\mathcal {E}(·)\)代表压缩操作,\(\theta_1\)代表编码器的参数。压缩后的CSI矩阵通过专用的信道反馈给BS,然后BS通过解码器恢复CSI矩阵:

\[\begin{align*} \hat{\boldsymbol{H}}_{\boldsymbol{a}}=\mathcal {D}(\theta _{2},\boldsymbol{v}), \tag{4} \end{align*} \]

其中,\(\mathcal {D}(·)\)代表压缩操作,\(\theta_2\)代表解码器的参数。CSI反馈的目的是为了最小化平均重构误差:

\[\begin{align*} \min _{(\theta _{1},\theta _{2})} \mathbb {E}||\boldsymbol{H}_{\boldsymbol{a}}-\hat{\boldsymbol{H}}_{\boldsymbol{a}}||_{2}, \tag{5} \end{align*} \]

3 基于空洞卷积的CSI反馈

3.1 DCRNet的结构

基于卷积神经网络的自编码器可以有效地提取CSI矩阵的空间局部相关性,基于空洞卷积的DCRNet结构如图2所示。

图2 DCRNet的网络结构

在(a)编码器中,输入\(H_a\)的维度为\(2×N_a×N_t\),两个独立的通道分别代表CSI矩阵的实部和虚部,首先使用5×5的头卷积来提取和融合CSI矩阵实部和虚部的特征信息;然后通过一个编码块来提取深度的抽象信息,与ACRNet不同,为了减少复杂度, DCRNet 中的编码器只需要一个单元就可以得到17 × 17的 RecF,只比ACRNet中RecF的小一点;随后利用全连接层来把\(2×N_a×N_t\)的矩阵压缩成一维的码字向量,压缩比\(\mathcal {η}∈(0,1)\);最后码字通过无线信道传输到BS的解码器。

在(b)解码器中,输入码字经过全连接层进行重塑操作;随后5×5的头卷积用来增强信道恢复性能;之后两个空洞卷积解压块来恢复压缩的信息。其中批归一化和参数整流线性单元(parametric rectified linear unit,PReLU)激活函数应用到每一层卷积之中,带有可学习参数\(α\)的PReLU为:

\[\begin{align*} \text{PReLU}(x)=\left\lbrace \begin{array}{ll}x, & x \geq 0 \\ \alpha x, & x< 0. \end{array}\right. \tag{6} \end{align*} \]

3.2 空洞编码解码块的设计

与传统卷积不同,空洞卷积带有特定的间隔\(d\),也称作空洞率。二维空洞卷积运算可以写作:

\[\begin{align*} (\boldsymbol{I}\circledast \boldsymbol{K})[i,j]=\sum _{u}\sum _{v} {\boldsymbol{I}[i+du,j+dv]\cdot \boldsymbol{K}[u,v]}, \tag{7} \end{align*} \]

其中\(\circledast,\boldsymbol{I},\boldsymbol{K}\)分别表示空洞卷积操作、二维输入和卷积核,\(u,v\)为卷积核\(\boldsymbol{K}\)的指数,空洞率为\(d\)的空洞卷积有效卷积核大小表示为:

\[\begin{align*} k_{i}^{\prime }=k_{i}+(k_{i}-1)(d-1), \tag{8} \end{align*} \]

其中\(k_i,{k^{'}}_i\)为当前使用的卷积核大小和有效的卷积核大小。图3展示了空洞率不同的空洞卷积,在同样的卷积核大小下,当\(d>1\)时,空洞卷积比普通卷积能够提供更大的感受野,可以实现块稀疏CSI矩阵的稀疏采样。

图3 空洞率为1、2、3时的空洞卷积

1)编码块设计

虽然随着空洞率的增加RecF会变大,但连续使用相同空洞率的空洞卷积会造成网格效应和信息损失。根据混合空洞卷积和非对称卷积技术,在编码器块中采用了d = 1、d = 2和d = 3的非对称3×3卷积,如图2所示。可以验证编码块可以获得大小为13 × 13的RecF,等于CsiNet+的大小。这不仅可以帮助编码块提取大规模信息,关注局部细节而不产生网格效应,还可以降低计算复杂度。

由于连接不同卷积的特征可以产生CSI的多分辨率以提高系统性能,因此对编码块执行连接操作,如图2(c)所示。采用标准3 × 3滤波器作为空洞卷积的补充,编码块的输入将通过两个并行分支,一个是空洞卷积,另一个是标准3 × 3卷积。然后将它们的输出进行连接,通过1 × 1卷积将通道数量减少到2。最后根据残差学习的思想,使编码块的输入添加到1 × 1卷积的输出中。

2)解码块设计

在图2(d)中,与编码块的设计原则类似,在第一个分支中,使用d = 2的3 × 3空洞卷积将特征维数增加到\(8ρ\),其中\(ρ≥1\)为网络宽度扩展率。通过调整扩展率\(ρ\),可以使DCRNet-\(ρ\) x适用于不同计算能力的模块,然后使用3×1和1×3且d=3的空洞卷积代替标准9×9的卷积,可以有效的减少计算复杂度。随后使用3×3的卷积来减少特征通道数到2。

在第二个分支中,不像在编码块中只使用一个标准卷积,这里使用了分组卷积和宽度扩展运算,因为BS的计算资源不像UE是有限的,而且宽度扩展运算对于CSI反馈同样重要。其中,1 × 3和3 × 1滤波器分别用于增加和减少特征维数,5 × 1和1 × 5分组卷积作用与第一个分支中的相似。两个分支的输出将被连接在一起,并通过1 × 1的卷积。

由于使用了空洞卷积和多分辨率思想,DCRNet比ACRNet的感受野宽得多,而且FLOPs更低,在性能和计算复杂度之间取得了很好的平衡。

4 实验结果分析

4.1 实验设置

1)数据

根据COST2100实现室内5.3GHz和室外300MHz的训练和测试场景,BS处有\(N_t=32\)个均匀线性天线阵列和\(N_c=1024\)个子载波,原始大小为\(2×32×1024\)的CSI矩阵在转换到角延迟域处理之后,得到\(2×32×32\)的CSI矩阵,训练集、验证集和测试集分别为100000、30000和20000。

2)训练

使用Kaiming initialization来产生每个卷积层和全连接层的权重,还采用了余弦退火学习率来增强网络性能,初始学习率的范围在\(\gamma _{min}=5×10^{-5}\)\(\gamma _{max}=2×10^{-3}\)之间,学习率可以表示为:

\[\begin{align*} \gamma _{t} =\gamma _{min}+\frac{1}{2}(\gamma _{max}-\gamma _{min})\left(1+\cos \left({\frac{t-T_{w}}{T-T_{w}}\pi }\right)\right), \tag{9} \end{align*} \]

其中,\(t\)是第\(t\)个训练时期,\(γ_t\)是当前的学习率,\(T_w\)\(T\)分别是预热时期和总时期的数量,分别设置为30和2500。

3)评估标准

使用归一化均方误差(NMSE)来评估输入CSI矩阵\({\boldsymbol{H}_{\boldsymbol{a}}}\)和输出CSI矩阵\(\hat{\boldsymbol{H}_{\boldsymbol{a}}}\)的区别,由下式给出:

\[\text{NMSE}=\mathbb {E}\left\lbrace {\left\Vert \boldsymbol{H}_{\boldsymbol{a}}-\hat{\boldsymbol{H}_{\boldsymbol{a}}}\right\Vert _{2}^{2}}\Big/{\left\Vert \boldsymbol{H}_{\boldsymbol{a}}\right\Vert _{2}^{2}}\right\rbrace, \]

4.2 DCRnet的性能

将DCRNet与基于DL的CSI反馈网络进行比较,分为低复杂度网络组:CsiNet、CRNet、ACRNet和DCRNet,和高复杂度且高性能组:DCRNet10×、DS-NLCsiNet、SOTA CsiNet+和ACRNet10×。

表1列出了上述几种CSI反馈网络的性能比较,其中压缩率\(η\)分别设置为1/4、1/8、1/16和1/32,最佳结果以粗体显示。从表1中,可以发现DCRNet-1×具有最低的计算复杂度和最少的参数,而且可以在室内场景下实现了不同压缩率下的SOTA性能,在室外场景下,DCRNet-1×仍然可以以最低的FLOP实现几乎相同的SOTA性能。

表1 不同网络的NMSE比较

5 结论

文献提出了DCRNet,网络采用空洞卷积来增加RecF,同时降低计算复杂度。仿真结果表明了DCRNet1×在计算资源有限的情况下优于其它轻量级网络,而且DCRNet-10×以比传统网络低得多的计算复杂度实现了几乎相同的重建性能。

有关阅读文献《DCRNet:Dilated Convolution based CSI Feedback Compression for Massive MIMO Systems》的更多相关文章

  1. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  2. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  3. ruby-on-rails - 在 irb 中阅读文档 - 2

    我怀念ipython的一件事是它有一个?为特定功能挖掘文档的运算符。我知道ruby​​有一个类似的命令行工具,但是我在irb中调用它非常不方便。ruby/irb有类似的东西吗? 最佳答案 Pry是IPython的Ruby版本,它支持?命令来查找有关方法的文档,但语法略有不同:pry(main)>?File.dirnameFrom:file.cinRubyCore(CMethod):Numberoflines:6visibility:publicsignature:dirname()Returnsallcomponentsofthef

  4. ruby - 如何将 Vim 中的 "expand"文本转换成一种易于阅读的方式? - 2

    我经常使用嵌套数据结构,很多时候我必须从控制台手动分析它们。问题是它们全部打印在一行中。是否有一种简单的方法可以根据{,[,],}和逗号重新构造数据结构的显示,使其看起来像Ruby的pretty_print输出? 最佳答案 :%s/\([{,]\)/\1\r/gggVG=:setft=ruby呜呜呜 关于ruby-如何将Vim中的"expand"文本转换成一种易于阅读的方式?,我们在StackOverflow上找到一个类似的问题: https://stacko

  5. 基于SpringBoot的线上日志阅读器 - 2

    软件特点部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式,支持大文件的读取。支持实时打印新增的日志(类终端)。支持日志搜索。使用手册基本页面配置路径配置日志所在的目录,配置后按回车键生效,下拉框选择日志名称。选择日志后点击生效,即可加载日志。windows路径E:\java\project\log-view\logslinux路径/usr/local/XX历史模式历史模式下,不会读取新增的日志。针对历史文件可以分页读取,配置分页大小、跳转。历史模式下,支持根据关键词搜索。目前搜索引擎使用的是jdk自带类库,搜索速度相对较低,优点是比较简单。2G日志全文搜

  6. ruby - 在使用 ruby​​ 中的 "mail"gem 阅读电子邮件时需要帮助 - 2

    我正在使用Watir进行自动化,它会创建一封我需要检查的电子邮件。有人指出电子邮件gem是执行此操作的最简单方法。我添加了以下代码,并且能够从我的收件箱中收到第一封电子邮件。require'mail'require'openssl'Mail.defaultsdoretriever_method:pop3,:address=>"email.someemail.com",:port=>995,:user_name=>'domain/username',:password=>'pwd',:enable_ssl=>trueendputsMail.first我是这个论坛的新手,有以下问题:如何获

  7. ruby - 阅读用户输入时如何避免回显换行符? - 2

    我正在用Ruby编写类似curses的程序,我正在使用stty和ansi转义字符来实现我想要的。当我想获得用户输入时,我的问题就出现了。像许多基于控制台的程序一样,我想从终端底部获取用户输入。因此,我将光标放在屏幕底部并调用Readline.readline(或任何获取用户输入的方法)。像往常一样,它会读取所有内容,直到我按下回车键,并打印一个换行符。由于光标位于终端的最后一行,它会滚动一行,这会弄乱屏幕。我怎样才能避免这种情况?我试图使用stty来停止回显换行符,但我没有成功。也许可以使用stty来阻止终端滚动?当然,我可以编写自己的方法来通过一次读取一个字符(并捕获“返回”)来捕获

  8. ruby-on-rails - 阅读 Rails session secret 的最佳方式是什么? - 2

    我想以编程方式访问Railssessionsecret(我正在使用它来生成登录token)。这是我想出的:ActionController::Base.session.first[:secret]这将返回sessionsecret。但是,每次调用ActionController::Base.session时,它都会向数组中添加另一个条目,因此您最终会得到如下内容:[{:session_key=>"_new_app_session",:secret=>"totally-secret-you-guys"},{},{},{},{},{},{},{},{},{},{},{},{}]我觉得这不太

  9. ruby - 将文本粘贴到 IRB 中非常慢。阅读线问题? - 2

    当我将以下文本粘贴到在ruby​​-enterprise-2011.03下运行的IRB或PRY时,需要13秒。#Loremipsumdolorsitamet,consecteturadipisicingelit,seddoeiusmodtemporincididuntutlaboreetdoloremagnaaliqua.在同一台计算机上运行irb和其他ruby​​安装时,粘贴并不慢。jruby-1.5.6jruby-1.6.3ruby-1.8.6-p420ruby-1.8.7-p352ruby-1.9.1-p431ruby-1.9.2-p290ruby-1.9.3-preview1o

  10. ruby-on-rails - 你如何阅读现有的 Rails 项目? - 2

    当您开始处理现有的Rails项目时,您采取了哪些步骤来理解代码?你从哪里开始?在深入了解Controller、模型、助手和View之前,您使用什么来获得高级View?您是否有任何特定的技术、技巧或工具可以帮助加快该过程?请不要回复“学习Rails和Ruby”(就像问这个问题的lastguy的回复之一——他的问题也没有得到太多回复,所以我想我会再问一次并提示多一点)。我对自己的代码很满意。它正在对其他人进行分类,这让我很头疼,需要很长时间才能理解。 最佳答案 看看模型。如果应用程序编写得很好,这应该为您提供其域模型的图片,这是有趣的逻

随机推荐