最近事情太多,来不及更新。看了一篇很经典的论文D. Malioutov, M. Cetin and A. S. Willsky, "A sparse signal reconstruction perspective for source localization with sensor arrays," in IEEE Transactions on Signal Processing, vol. 53, no. 8, pp. 3010-3022, Aug. 2005, doi: 10.1109/TSP.2005.850882. ; 又参考了一个博主“冬瓜班小朋友”的文章https://blog.csdn.net/weixin_38452468/article/details/72879092?spm=1001.2014.3001.5501,受益很大,我在博主的基础上再写一点自己的想法。

1.有关二阶锥问题

锥,建议看下视频https://www.bilibili.com/video/BV1z64y1u7pb/?spm_id_from=333.788.recommend_more_video.-1对凸集,凸锥,仿射集做解释

2.matlab使用cvx工具包

第一次用matlab跑cvx工具包,有点磕磕绊绊,但还好有很多例子可以参考。cvx写matlab有三个步骤,

1)定义变量:常用的变量名,variable:complex(复数),integer(整数),nonnegative(负定),semidefinite(半正定),symmetric(对称矩阵)。 特别需要注意的是我当时写的时候定义了一个中间变量variable,想对其进行赋值,但是总是出现“The following cvx variable(s) have been cleared or overwritten” 错误!后来我才发现想要赋值的中间变量类型应该为expression类型。

2)定义优化函数:minimize( );

3)写约束条件:(<=) or (>=) or (==) 。

https://www.bilibili.com/video/BV1UQ4y1K7Vf?from=search&seid=2817388003776759797视频讲解有关cvx工具包怎么用;比较有帮助

cvx工具包的一般语法如下所示

cvx_begin

define variables; % 定义变量

minimize(objective expression); % 定义优化函数

subject to

constraint1 <= 0; % 定义不等式约束

constraint2 >= 0; % 定义不等式约束

constraint3 == 0; % 定义等式约束

variable == set;

cvx_end

3.有关“A sparse signal reconstruction perspective for source localization with sensor arrays”的内容

1)SVD分解

他这里讲得很详细,M:阵元数,K:目标数,T:采样点数,也即快拍数;对Y[M×K维]做SVD分解得到ULV,Dk是T*k维,这样直接相乘能极大减小计算量;文中说到L1-SVD算法的思想是将接收数据分为信号子空间和噪声子空间,如果没有噪声的话,直接用信号子空间的基可以来估计导向矢量A的列的稀疏组合。然后可以将原来的阵列接收模型改写成式(11)的样子,其中Ysv维度是[M×K维],A维度为[M×K维],Ssv维度为[K×K维]。

算法的流程如下图所示

2)二阶锥优化

我凸优化感觉还没有入门,这篇论文里直接用二阶锥来求解式(11)中的问题,我直接懵了。然后找了相关内容https://www.bilibili.com/video/BV1H54y1d75w?from=search&seid=225011787781444983才知道锥和二阶锥的定义和应用。

二阶锥优化是一种非线性优化,可以方便的使用内点法求解问题。

作者将优化问题

改写成二阶锥问题

怎么说呢,这可能就是大佬吧。

在复现的过程中参考博主“冬瓜班小朋友”很多内容,把我的代码也贴在最后,现在总结下来看,只要是理解了算法步骤代码确实不难写。

3)细化网格方法

这篇文章还有一个亮点就是他做了网格细化,我之前在做MUSIC的时候,就想过先进行粗估计再进一步细估计,这样能避免对所有空域搜索,可以极大降低计算量。Dmitry Malioutov的思路就是类似的。等我代码实现了再来share

4)总结

这篇论文里主要是提出了L1范数的惩罚项加强稀疏性;然后对接收信号做SVD分解得到数据量很小的观测模型;并用二阶锥规划方法求解该问题;最后为了进一步减小网格划分的计算量,用了网格细化的方法。

% 作者:gxy
% 功能:复现《A sparse signal reconstruction perspective for source localization with sensor arrays》的方法
% 时间:2021.06.29clc
clear
close all
% 回波构造
N = 8;                   % 阵列数
dd = 0.5;               % 阵列间距与波长比值
d=0:dd:(N-1)*dd;  % 阵列相对波长位置
theta = [-10 5];     % 目标角度
NumK = length(theta);
snr = 10;               % 输入信噪比dB
Sample = 20;          % 快拍数A=exp(-1i*2*pi*d.'*sind(theta)); % 导向矢量
S=randn(NumK,Sample);           % 目标回波
X=A*S;                                        % 阵列接收信号
X1=awgn(X,snr,'measured');       % 加噪信号% 构造过完备基
d_lamda = 0.5;
AA=[];
theta=-90:0.5:90;
Ntheta = length(theta);
for kkk= 1:length(theta) g=exp(-1i*2*pi*[0:N-1]'*d_lamda*sin(theta(kkk)/180*pi));  AA=[AA,g];
end %% L1-SVD方法
Y = X1;
[U,L,V] = svd(Y) ; % 做SVD分解
Ik = ones(1,NumK);
Dk = [diag(Ik); zeros(NumK,Sample-NumK)']; % 维度T*K维
Ysv = Y*V.'*Dk;
Ssv = S *V.'*Dk;% 转换为二阶锥规划
% 优化变量为Ssv1
cvx_begin variables p q;variable r(Ntheta,1) ; variable Ssv1(Ntheta,NumK) complex ; expression sl2(Ntheta,1) ;  minimize(p + 2*q)subject tonorm(vec(Ysv - AA*Ssv1),2) <=p;II = ones(Ntheta,1);II'*r <=q;  for i = 1:Nthetanorm(Ssv1(i,:),2) <=r(i);end
cvx_endSsv1sum = sum(abs(Ssv1) , 2);
Power_Ssv=10*log10(Ssv1sum/max(Ssv1sum));
plot(theta,Power_Ssv.','r');
xlabel('角度/degree');
ylabel('功率/dB');
grid on;

结果如下

L1-SVD实现DOA相关推荐

  1. 通用求根算法zeroin_Modern Robotics运动学数值解法及SVD算法(C matlab)

    前言 原著之前CSDN已经注销,新CSDN Galaxy_Robot的博客_CSDN博客-机器人,C语言,我是谁?领域博主​blog.csdn.net 这半个月的业余时间研究了机器人逆运动学的解析解法 ...

  2. matlab paticalcoff,关于DOA估计中加权前后向空间平滑算法的仿真问题

    参考论文:<相干信源波达方向估计的加权空间平滑算法> 王布宏 王永良 陈辉 武汉空军雷达学院重点实验室 武汉430010 摘  要 提出了一种用于空间相干源 DOA 估计的加权空间平滑算法 ...

  3. c++svd算法_AI算法工程师面试6

    60道AI算法高频面试题 https://mp.weixin.qq.com/s/1GavvCY7wUetMvC61gxkLg​mp.weixin.qq.com 机器学习(15题) 参考: 为什么LR模 ...

  4. DOA——MUSIC算法

    一.均匀圆阵(UCA, Uniform Circular Array)的MUSIC算法 假设一个半径为R的M元均匀圆阵的所有阵元均位于坐标系X-Y平面内,第k-1个阵元坐标为,第i个窄带信号波长为,来 ...

  5. 【数值分析×机器学习】以SVD的分解形式进行深度神经网络的训练(逐渐熟练)

    英文标题:Learning Low-rank Deep Neural Networks via Singular Vector Orthogonality Regularization and Sin ...

  6. 【阵列信号处理】DOA估计算法

    DOA估计中的ESPRIT算法 ESPRIT算法时一种利用子空间旋转法估计DOA参数的方法,其算法的基本思想是将阵列在结构上分成两个完全一致的子列,两个子列相应阵元偏移的距离相等,也就是说阵列的阵元被 ...

  7. 基于空间平滑MUSIC算法的相干信号DOA估计(1)

    空间平滑MUSIC算法(1) 1. 前言 在上一篇博客中有提到,当多个入射信号相干时,传统MUSIC算法的效果就会不理想.具体原因是多个入射信号相干时,有部分能量就会散发到噪声子空间,使得MUSIC算 ...

  8. L1_SVD方法的稀疏矩阵的DOA估计

    写点题外话,最近,一直在研究Malioutouv的 这是他毕业论文摘出来的一篇论文,他的毕业论文下载地址:D. M. Malioutov. (2003, Jul.) A Sparse Signal R ...

  9. 基于matlab的相干信号的doa 估计,基于空间平滑MUSIC算法的相干信号DOA估计(1)

    基于空间平滑MUSIC算法的相干信号DOA估计(1) 基于空间平滑MUSIC算法的相干信号DOA估计(1) 空间平滑MUSIC算法(1) 在上一篇博客中有提到,当多个入射信号相干时,传统MUSIC算法 ...

  10. DOA估计 基于互质阵列的DOA估计

    前言 传统阵列的配置方式是均匀线阵,该阵列要求相邻阵元的间距为半波长,易产生耦合效应,影响 DOA 估计精度.而稀疏阵列利用协方差矩阵构建差分共阵方式在虚拟域上生成虚拟阵列,并利用虚拟阵列实现波达方向 ...

最新文章

  1. 码农翻身讲计算机基础:并发,同步与信号量
  2. linux fstream open,fstream创建文件的问题
  3. php instanceof 基类,PHP强制对象类型之instanceof操作符
  4. 告别CNN?计算机视觉也用上Transformer了
  5. 基于Android6.0~9.0的适配
  6. python跳一跳编程构造_python实现微信跳一跳辅助工具步骤详解
  7. 在 Centos 安装 MySQL
  8. 装饰模式实例+java,java 中设计模式(装饰设计模式)的实例详解
  9. 工作周记 - 第四周 (2016/06/12 - 2016/06/18) 我没喝多,但是今天话多了 - -
  10. 阅读笔记-JavaScript学习指南
  11. 计算机快捷方式app卸载,一打开电脑就自动出现的快捷方式软件删不掉怎么办
  12. python批量查询高德地图经纬度(支持xlxs)
  13. crx插件转换火狐插件_我的Firefox插件
  14. 免实名域名是什么意思?
  15. 深度学习系统 深度学习软件
  16. 樱花落(python)
  17. c语言 最长单词,c语言求最长公共单词
  18. Tomcat重启单个服务
  19. 【26天高效学习Java编程】Day22:Java中的属性集-缓冲流-转换流-序列化流详解
  20. 一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?

热门文章

  1. 使用ansible执行命令时出现Failed to connect to the host via ssh错误
  2. 收款码相关的新规解决方案,个人收款码被限怎么办?
  3. Excel中,用VLOOKUP如何跨表查找引用数据,例如通过工号查姓名,通过key查value
  4. PC硬件之我见——CPU篇
  5. SQLServer CONCAT函数
  6. Android支付宝错误码62009,[payment支付宝:62009]未知错误;到底什么问题啊啊啊啊啊...
  7. 分布式文件系统之冗余设计(电脑坏了怎么办)
  8. 用javascript求两数之和
  9. 视频直播点播平台EasyDSS如何通过接口调用实现截取视频的功能?
  10. EP-PEG2000-EP,具有两个环氧基团的线性双功能PEG,EP-PEG2000-Epoxide