学习笔记:OMP算法(Spatially Sparse Precoding in Millimeter wave MIMO Systems)
自从开始研究毫米波通信之后,读了几篇经典论文,这其中就包括2014年这篇《Spatially Sparse Precoding in Millimeter wave MIMO Systems》。在把文章读的差不多之后,导师建议我自己尝试写一下这篇文章中的OMP算法。于是我在知乎、博客、书籍等渠道搜集了一下OMP算法的讲解,其中知乎上有一篇OMP讲解的十分透彻,用具体的数值将MP和OMP按照计算步骤进行对比,深入浅出,很适合新手入门,网址如下:https://zhuanlan.zhihu.com/p/52276805
虽说论文中已经给出了OMP算法的伪代码,但是到自己上手的时候就犯了难:开始时会疑惑字典集如何选取,Fbb和Frf还有Fopt的矩阵维度未知等问题。搜集资料时发现matlab自带的OMP函数正是根据2014这篇论文来写的。在看matlab自带的OMP函数时恍然大悟:封装成函数后这些只需外部输入参数就好,而字典集选取是根据不同场景进行。读懂matlab自带的OMP函数也费了一番功夫,故通过本文记录学习代码的问题。
OMP算法就是简单来说就是给定压缩信号y和压缩矩阵A求解重构矩阵x。
论文中给出的OMP算法:
论文的优化目标是下式(1)
(1)
算法可以分为以下几步:
1. 将信号Fopt赋值给压缩信号Fres
2.在字典集At中寻找对Fres贡献值最大的原子(可以通过矩阵相乘得出Φ=At’*Fres)。
3.根据Φ选出贡献值最大的原子,并将它放入新的压缩矩阵Frf,通过最小二乘法式(3)计算新压缩矩阵Frf对Fres的贡献值。
4.最小二乘法得到的贡献值将赋给重构信号矩阵Fbb。
5.删除所选矢量的贡献值,更新压缩信号Fres。
6.重复步骤1234,直到原压缩矩阵的所有列都被选完。
(2)
(2)的解为式(3)
(3)
其中
注:上式(2)和(2)的解式都摘自知乎文章https://zhuanlan.zhihu.com/p/52276805(可以把Fopt看做是y,Frf看做新的压缩矩阵Anew,Fbb看做λ。)
下面是matlab2019b版本工具箱中的OMP函数,博主给每句代码都加了中文注释,如有异见请在评论中写出,可以共同讨论一下。
function [Fbb,Frf] = helperOMPTransmitWeights(H,NtRF,Ns,At)
% helperOMPTransmitWeights is in support of
% MassiveMIMOHybridBeamformingExample. It may change in a future release.
% Copyright 2017 The MathWorks, Inc.
% Reference:
% [1] Oma El Ayach, et al.,"Spatially Sparse Precoding in Millimeter wave
% MIMO Systems", IEEE Transactions on Wireless Communications, Vol. 13,
% No. 3, March 2014.
% use Comms convention
[~,~,v] = svd(H.');%正常的svd分解得到的是v',要得到v只需求H'的svd分解,故此处是对H'进行svd分解。
Fopt = v(:,1:Ns);%最初发射信号维度是Ns*1,由于是转置后的v赋值给Fopt,所以是Ns列
Nt = size(H,1);%返回信道H的行数
% Algorithm 1: Spatially sparse precoding via Orthogonal Matching Pursuit
Frf = complex(zeros(Nt,NtRF));%生成Nt*NtRF维复数矩阵
Fres = Fopt; %将理想信号赋值给恢复矩阵
for m = 1:NtRF
Psi = At'*Fres; %所有的原子贡献度,得到的Psi是一个列向量
[~,k] = max(diag(Psi*Psi')); %Psi*Psi'得到的对角线值是各个原子贡献值的平方,max输出列向量最大值的行号
Frf(:,m) = At(:,k); % 将最大贡献值对应原子赋值给新的压缩矩阵
Fbb = (Frf(:,1:m)'*Frf(:,1:m))\(Frf(:,1:m)'*Fopt); % 计算新压缩矩阵的最小二乘解
temp = Fopt-Frf(:,1:m)*Fbb;
Fres = temp/norm(temp,'fro'); %更新压缩信号
end
Fbb = sqrt(Ns)*Fbb/norm(Frf*Fbb,'fro'); %功率约束
% match H.'*Frf*Fbb*X.' to X*Fbb*Frf*H
Fbb = Fbb.'; %矩阵转置
Frf = Frf.';
% [EOF]
学习笔记:OMP算法(Spatially Sparse Precoding in Millimeter wave MIMO Systems)相关推荐
- 论文笔记《Spatially Sparse Precoding in Millimeter Wave MIMO Systems》
论文笔记<Spatially Sparse Precoding in Millimeter Wave MIMO Systems> 背景 增加商业无线系统可用的频谱,通过探索新的不那么受限的 ...
- 【统计学习方法】学习笔记——EM算法及其推广
统计学习方法学习笔记--EM算法及其推广 1. EM算法的引入 1.1 EM算法 1.2 EM算法的导出 1.3 EM算法在非监督学习中的应用 2. EM算法的收敛性 3. EM算法在高斯混合模型学习 ...
- 混合波束成形| 部分连接系统 :Hybrid Precoding for mmWave Massive MIMO Systems With Partially-Connected Structure
文章目录 问题背景 系统模型 PCS-HP设计的分析 PCS-HP的分阶段设计 模拟precoding的设计 情况一 情况二 结论 相关阅读 <Hybrid Precoding for mmWa ...
- c语言算法有效性,BerForest—C语言学习笔记-《算法》
这是我学习C语言的笔记,也可以算是回忆录,反正有利于我的学习,也可以让C语言的新手借鉴. 许多人都在盲目的学习编程,其实学习编程无为就是学习一些编程语法.即使学会了,也不一定能够自己独立的编写出程序了 ...
- 目标检测学习笔记--DSSD算法
1. 论文笔记 1.1 YOLO网络结构 论文链接:http://cn.arxiv.org/pdf/1506.02640 1.2 SSD网络结构 论文链接:http://cn.arxiv.org/pd ...
- 吴恩达神经网络和深度学习-学习笔记-12-RMSprop算法
全称是root mean square prop算法 我们假设纵轴方向为b,横轴方向为W.我么希望纵轴slow,横轴fast. 对于第t次迭代,公式如上图. 我们希望W方向fast,B方向slow,所 ...
- 【学习笔记】算法101--数学(二)2.3篇
前言: 学习<算法101>,每天进步一点点,加油
- 视频插帧—学习笔记(算法+配置+云服务+Google-Colab)
恰好碰到同学项目需要,了解了一下关于利用深度学习视频插帧的相关知识,在这里做一个简单的记录. 目录 一.方法+论文 1.DAIN (Depth-Aware Video Frame Interpolat ...
- (JAVA学习笔记) 冒泡排序算法
public class Demo06 {public static void main(String[] args) {int[] arr = {51,512,12,53,415,852,631,8 ...
- Fabric学习笔记-PBFT算法
本文介绍了实用拜占庭容错算法(PBFT). Fabric在v0.6中采用的是PBFT算法,在v1.0.0-preview中是SBFT算法,在v1.0.0-release中文档上说PBFT还在开发中,项 ...
最新文章
- layui 横向表单_对layui中表单元素的使用详解
- Django基础知识
- Java compiler level does not match解决方法
- c++设置单元格填充色_更改数据后单元格自动填充颜色,从此以后再也不用核对数据了...
- 新手学逆向,调试abexcm1过程
- iis同时运行asp和php,服务器IIS同时支持ASP和PHP
- Java技术:Optional 相关用法介绍笔记
- SQL语句大全,所有的SQL都在这里 !极度建议收藏...
- 正则匹配不包含某字符串_如何替换JS字符串中匹配到多处中某一指定节点?
- c#仿照qq登录界面编辑框内容操作
- leetcode 397 整数替换
- iTunes Connect(一) —— iOS应用上架到AppStore
- 数字表达_英语数字表达方法大全,内含数字/分数/时间/序数词/日期/小数等
- random.choice与random.choices
- JDE 系统表(标准表)
- 汇川AM系列Modbus通信设置
- softmax 激活函数
- Windows下编译apr、apr-util
- matplotlib用Times New Roman且不加粗
- 浅析直播间海量聊天消息的架构设计难点
热门文章
- 睿智的seq2seq模型4——往英文到法文的翻译里加上注意力机制
- 服务器双硬盘系统安装系统安装,固态机械混合安装教程!双硬盘安装系统的方法...
- 安装FileFormatConverters,出现错误“无法使用此产品的安装源。请确认安装源存在,并且您可以访问它”
- 土豆视频ipad 5.0 客户端
- 我为什么要写《OpenCV Android 开发实战》这本书
- Stanford CS224N: PyTorch Tutorial (Winter ‘21) —— 斯坦福CS224N PyTorch教程 (第三部分)
- (转)开源的大文件上传组件NeatUpload
- mysql修改数据sql语句_sql语句修改数据
- 官网下载STM32系列芯片的产品选型手册
- 编译原理初学者入门指南