jjzjj

稀疏DOA估计的经典算法——l1-SVD算法

大灰煜 2023-08-26 原文

On-Grid类DOA估计经典算法—— l 1 − SVD l_1-\text{SVD} l1SVD

文献"A Sparse Signal Reconstruction Perspective for Source Localization With Sensor Arrays"提出了一种稀疏表示的DOA定位算法,它属于On-Grid类算法的范畴。其核心要点有二:其一是,通过了奇异值(SVD)分解,把以大量快拍数衡量的信号模型,转换成以信源数衡量的低维信号模型;其二是,以二阶锥规划法替代通用的非线性优化方法来处理问题,使得算法更加高效。

目录

过完备字典模型

常用的参数标注:

M M M——均匀阵列的阵元数, K K K——信源数, T T T——时域快拍数, N θ N_{\theta} Nθ——过完备字典的尺寸

一般的,远场DOA估计模型为: y ( t ) = A ( θ ) s ( t ) + n ( t ) y(t) = \boldsymbol{A}(\theta)s(t)+n(t) y(t)=A(θ)s(t)+n(t)其中, A ( θ ) ∈ C M × K \boldsymbol{A}(\theta) \in \mathbb{C}^{M\times K} A(θ)CM×K是阵列流形矩阵, s ( t ) s(t) s(t) n ( t ) n(t) n(t)分别是 t t t时刻的信号向量和噪声向量,它们彼此独立。

同时,从稀疏的角度看待这个接收信号,我们可以把它重新写作:
Y = A x + N \boldsymbol{Y}=\boldsymbol{A}\boldsymbol{x}+\boldsymbol{N} Y=Ax+N这时, Y ∈ C M × T \boldsymbol{Y}\in \mathbb{C}^{M\times T} YCM×T仍为信号接收矩阵;而 A ∈ C M × N θ \boldsymbol{A} \in \mathbb{C}^{M\times N_{\theta}} ACM×Nθ为过完备集的流形矩阵,过完备集可以视作:由空域划分出来方向网格(Grid)组成的集合,如过完备集为: S θ = { − 9 0 ∘ : 1 ∘ : 9 0 ∘ } \mathcal{S}_{\theta} = \{-90^{\circ}:1^{\circ}:90^{\circ}\} Sθ={90:1:90}其对应的集合尺寸为: N θ = 181 N_{\theta} = 181 Nθ=181,对应的稀疏信号向量为: x ∈ C N θ × 1 \boldsymbol{x}\in \mathbb{C}^{N_{\theta}\times 1} xCNθ×1,当然,它的绝大多数的元素都为0,所以才”稀疏“。

因此,恢复出信号向量 x \boldsymbol{x} x中不为0位置的索引,即代替了DOA估计的问题。

l 1 l_1 l1范数最小化

因为有了噪声项的干扰,信号 x x x出现了一些额外的非0项。因而,为了恢复这个信号向量,我们自然而然把最小化 l 0 l_0 l0范数作为目标函数,即使非0项数最小。
min ⁡ ∥ x ∥ 0 \min\|\boldsymbol{x}\|_0 minx0然而, l 0 l_0 l0范数是非凸的,所以一般将其凸松弛为 l 1 l_1 l1范数来处理,即,向量元素绝对值的和。
min ⁡ ∥ x ∥ 1 \min \|\boldsymbol{x}\|_1 minx1另一方面,我们常用观测矩阵的"弗罗贝尼乌斯"范数(F)来衡量观测矩阵 Y \boldsymbol{Y} Y和理想接收矩阵 A x \boldsymbol{A}\boldsymbol{x} Ax之间的差距,就是矩阵元素平方和再开根号:
∥ Y − A x ∥ F 2 ≤ β 2 \|\boldsymbol{Y} - \boldsymbol{A}\boldsymbol{x}\|_F^2 \leq \beta^2 YAxF2β2这里的参数 β 2 \beta^2 β2指明了:我们能够允许的噪声参数的大小,一般可以从噪声功率处确定。

以上优化问题亦可以写成以下这种无约束的形式:
min ⁡ ∥ Y − A x ∥ F 2 + λ ∥ x ∥ 1 \min \|\boldsymbol{Y} - \boldsymbol{A}\boldsymbol{x}\|_F^2 + \lambda\|\boldsymbol{x}\|_1 minYAxF2+λx1这里的参数 λ \lambda λ用于控制”空间谱的稀疏性“和”范数偏移尺度“的平衡,约 0.1 − 10 0.1-10 0.110,它更像是一个经验值。

SVD降维

奇异值分解常常用于分析组成一个矩阵的主要成分,这很适合分析受噪声干扰的信号。将观测信号矩阵 Y \boldsymbol{Y} Y进行奇异值分解:
Y = U L V H \boldsymbol{Y} = \boldsymbol{U}\boldsymbol{L}\boldsymbol{V}^H Y=ULVH其中, U ∈ C M × M \boldsymbol{U}\in \mathbb{C}^{M\times M} UCM×M V ∈ C T × T \boldsymbol{V}\in \mathbb{C}^{T\times T} VCT×T都是酉矩阵,矩阵 L ∈ C M × T \boldsymbol{L}\in \mathbb{C}^{M\times T} LCM×T是由一个 M × M M\times M M×M的对角矩阵和 M × ( T − M ) M\times(T-M) M×(TM)的0矩阵构成,而对角矩阵中有 K K K个大元素和 ( M − K ) (M-K) (MK)个小元素,它们之间存在数量级的差距。因此,很自然地,我们可以把这些主成分过滤出来。

定义一个选择矩阵 D K ∈ C T × K \boldsymbol{D}_K\in \mathbb{C}^{T\times K} DKCT×K,它由一个尺寸为 K K K的单位矩阵和 ( T − K ) × K (T-K)\times K (TK)×K的0矩阵构成。
Y S V = Y V D K = U L D K \boldsymbol{Y}_{SV} = \boldsymbol{Y}\boldsymbol{V}\boldsymbol{D}_K = \boldsymbol{U}\boldsymbol{L}\boldsymbol{D}_K YSV=YVDK=ULDK得到一个新的接收矩阵 Y S V ∈ C M × K \boldsymbol{Y}_{SV}\in \mathbb{C}^{M\times K} YSVCM×K,显然,它降低了信号的尺寸,使得算法更加高效,更适合高快拍的情景。

那么,此时,经过线性变换 V D K \boldsymbol{V}\boldsymbol{D}_K VDK,信号的模型变为: Y S V = A S S V + N S V \boldsymbol{Y}_{SV} = \boldsymbol{A}\boldsymbol{S}_{SV} + \boldsymbol{N}_{SV} YSV=ASSV+NSV对应的, l 1 l_1 l1优化问题转变成了:
min ⁡ S S V ∥ Y S V − A S S V ∥ F 2 + λ ∥ s ~ l 2 ∥ 1 \min_{\boldsymbol{S}_{SV}} \|\boldsymbol{Y}_{SV} - \boldsymbol{A}\boldsymbol{S}_{SV}\|_F^2 + \lambda\|\boldsymbol{\tilde{s}}^{l_2}\|_1 SSVminYSVASSVF2+λs~l21由于 S S V \boldsymbol{S}_{SV} SSV相比于 x \boldsymbol{x} x变成了矩阵,因而, s ~ l 2 \boldsymbol{\tilde{s}}^{l_2} s~l2为矩阵 S S V \boldsymbol{S}_{SV} SSV每一行向量的 l 2 l_2 l2范数,用以替代 x \boldsymbol{x} x的每一个元素。

二阶锥(SOC)优化

以上即为 l 1 − SVD l_1-\text{SVD} l1SVD算法的核心思想,以上优化问题是凸的,通过求解非线性优化即可。

而作者进一步将该问题转化为了二阶锥规划(SOCP)的框架,进而使用更高效的内点法求解。

二阶锥的定义与约束

定义二阶锥:
C k = { [ u t ] : u ∈ R K − 1 , t ∈ R , ∥ u ∥ ≤ t } \mathcal{C}_k = \left\{\begin{bmatrix} \boldsymbol{u} \\ t \end{bmatrix}: \boldsymbol{u} \in \mathbb{R}^{K-1}, t \in \mathbb{R},\|\boldsymbol{u}\| \leq t \right\} Ck={[ut]:uRK1,tR,ut}二阶锥约束可以表示为:
∥ A x + b ∥ ≤ c T x + d \|\boldsymbol{A}\boldsymbol{x}+\boldsymbol{b}\| \leq \boldsymbol{c}^T\boldsymbol{x}+\boldsymbol{d} Ax+bcTx+d等价于:
[ A c T ] x + [ b d ] ∈ C k \begin{bmatrix} \boldsymbol{A} \\ \boldsymbol{c}^T \end{bmatrix} \boldsymbol{x} + \begin{bmatrix} \boldsymbol{b} \\ \boldsymbol{d} \end{bmatrix} \in \mathcal{C}_k [AcT]x+[bd]Ck

二阶锥优化问题

一般形式:
min ⁡ x f T x s . t ∥ A i x + b i ∥ ≤ c i T x + d i F x = g \min_{\boldsymbol{x}} \quad \boldsymbol{f}^T\boldsymbol{x} \\ s.t \quad \|\boldsymbol{A}_i\boldsymbol{x}+\boldsymbol{b}_i\| \leq \boldsymbol{c}_i^T\boldsymbol{x}+\boldsymbol{d}_i \\ \quad \boldsymbol{F}\boldsymbol{x} = \boldsymbol{g} xminfTxs.tAix+biciTx+diFx=g其中, f ∈ R n \boldsymbol{f} \in \mathbb{R}^n fRn A i ∈ R n i × n \boldsymbol{A}_i\in \mathbb{R}^{n_i \times n} AiRni×n b i ∈ R n i \boldsymbol{b}_i\in \mathbb{R}^{n_i} biRni c i ∈ R n \boldsymbol{c}_i\in \mathbb{R}^{n} ciRn d i ∈ R \boldsymbol{d}_i\in \mathbb{R} diR F ∈ R p × n i \boldsymbol{F} \in \mathbb{R}^{p \times n_i} FRp×ni g ∈ R p \boldsymbol{g} \in \mathbb{R}^{p} gRp。另外,待优化变量 x ∈ R n \boldsymbol{x} \in \mathbb{R}^{n} xRn

注意,二阶锥优化问题对目标函数没有绝对的要求。

理解问题的转化

作者Malioutov最终把非线性优化问题转化成了SOCP问题: min ⁡ p , q , r , S S V p + λ q s . t ∥ vec { Y S V − A S S V } ∥ 2 2 ≤ p 1 T r ≤ q ∥ S S V ( i , : ) ∥ 2 ≤ r i \min_{p,q,\boldsymbol{r},\boldsymbol{S}_{SV}} \quad p + \lambda q \\ s.t \quad \|\text{vec}\{\boldsymbol{Y}_{SV} - \boldsymbol{A}\boldsymbol{S}_{SV}\}\|_2^2 \leq p \\ \boldsymbol{1}^T\boldsymbol{r} \leq q \\ \|\boldsymbol{S}_{SV}(i,:)\|_2 \leq r_i p,q,r,SSVminp+λqs.tvec{YSVASSV}22p1TrqSSV(i,:)2ri二阶锥规划的约束条件,简单理解为:待优化变量的仿射变换的范数小于等于另一种仿射变换。

因此,对应关系为:
x = [ p q r vec { S S V } ] \boldsymbol{x} = \begin{bmatrix} p \\ q \\ \boldsymbol{r} \\ \text{vec}\{\boldsymbol{S}_{SV}\} \end{bmatrix} x= pqrvec{SSV} 第一个约束条件转换为:
∥ vec { Y S V } − ( I ⊗ A ) vec { S S V } ∥ ≤ p \|\text{vec}\{\boldsymbol{Y}_{SV}\} - \left(\boldsymbol{I}\otimes\boldsymbol{A}\right)\text{vec}\{\boldsymbol{S}_{SV}\}\| \leq p vec{YSV}(IA)vec{SSV}p显然,这符合了二阶锥规划的约束条件的定义。

与MUSIC谱估计对比

两个信源的对比:

两个相近的信源的谱对比:

实验代码

clc;clear all;close all;
twpi = 2*pi;
derad = pi/180;
j = sqrt(-1);

%% 生成信号
M = 8;%阵元数
c = 1500;%声速1500m/s
f = 1e4;%载频10kHz
lambda0 = c/f;%载波波长
dd = 0.5*lambda0;%阵元间距
d = 0:dd:(M-1)*dd;
theta = [10 15];
K = length(theta);%信源数
fs = 2.5*f;%采样频率
L = 100;%快拍数
t = [1:L]/fs;%时域采样
A = exp(j*twpi*d'*sin(theta*derad)/lambda0);%方向向量
S = randn(K,L).*exp(j*twpi*ones(K,1)*f*t);
snr = 20;%信噪比
Y = awgn(A*S,snr,'measured');%加入高斯白噪声

%% 构造完备字典
Grid = -90:1:90;
AA = exp(j*twpi*d'*sin(Grid*derad)/lambda0);
Dk1 = eye(K);
Dk2 = zeros(K,L-K);
Dk = [Dk1,Dk2].';
[U,~,V] = svd(Y);       %进行奇异值分解
Ysv = Y*V'*Dk;

%% 求解凸优化问题
cvx_begin quiet
variables p q
variables r(length(Grid))
variable SSV1(length(Grid),K)  complex;
expression xsv(length(Grid),1)
expressions Zk(M,K) complex
minimize( p + 2*q );
subject to
Zk = Ysv - AA*SSV1;
Zvec = vec(Zk);                  %把矩阵转化为向量
norm(Zvec,2) <= p;               %第一个不等式约束
sum(r) <= q;                     %第二个不等式约束
for i=1:length(Grid)       %第三个不等式约束
    norm(SSV1(i,:),2) <= r(i);
end
cvx_end

%% 绘制空间谱
power = 10*log10(abs(SSV1(:,1))/max(abs(SSV1(:,1))));
h1 = plot(Grid,power,'r');
hold on
xlabel('DOA/degree');
ylabel('PowerdB');

%% 绘制MUSIC空间谱
R = Y*Y'/L;
[EV,D] = eig(R);%特征值分解
DD = diag(D);%将特征值变为向量形式
[DD,I] = sort(DD);%从小到大
EV = fliplr(EV(:,I));
%%%%%%%%%%构造MUSIC的谱函数%%%%%%%%%%%
En = EV(:,K+1:M);%噪声子空间
Pmusic = zeros(1,length(Grid));
for ii = 1:length(Grid)
    Pmusic(ii) = 1/(AA(:,ii)'*En*En'*AA(:,ii));
end
Pmusic=abs(Pmusic);
Pmax = max(Pmusic);
Pmusic_db = 10*log10(Pmusic/Pmax);
h2 = plot(Grid,Pmusic_db,'b');
xlim([-90 90])
set(gca,'XTick',[-90:30:90])
grid on
hold on
m = ylim;
for i = 1:K
    line([theta(i) theta(i)],[m(1) 0],'Color','k','LineWidth',1,'LineStyle','--');
    hold on
end
legend('l1-SVD','MUSIC','Direction of Arrival');
Tick',[-90:30:90])
grid on
hold on
m = ylim;
for i = 1:K
    line([theta(i) theta(i)],[m(1) 0],'Color','k','LineWidth',1,'LineStyle','--');
    hold on
end
legend('l1-SVD','MUSIC','Direction of Arrival');

文献

链接:文献获取
提取码:6666

有关稀疏DOA估计的经典算法——l1-SVD算法的更多相关文章

  1. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  2. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  3. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  4. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  5. 100个python算法超详细讲解:画直线 - 2

    1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva

  6. ruby - 在 Ruby 中实现 Luhn 算法 - 2

    我一直在尝试用Ruby实现Luhn算法。我一直在执行以下步骤:该公式根据其包含的校验位验证数字,该校验位通常附加到部分帐号以生成完整帐号。此帐号必须通过以下测试:从最右边的校验位开始向左移动,每第二个数字的值加倍。将乘积的数字(例如,10=1+0=1、14=1+4=5)与原始数字的未加倍数字相加。如果总模10等于0(如果总和以零结尾),则根据Luhn公式该数字有效;否则无效。http://en.wikipedia.org/wiki/Luhn_algorithm这是我想出的:defvalidCreditCard(cardNumber)sum=0nums=cardNumber.to_s.s

  7. Ruby 斐波那契算法 - 2

    下面是我写的一个计算斐波那契数列中的值的方法:deffib(n)ifn==0return0endifn==1return1endifn>=2returnfib(n-1)+(fib(n-2))endend它工作到n=14,但在那之后我收到一条消息说程序响应时间太长(我正在使用repl.it)。有人知道为什么会这样吗? 最佳答案 Naivefibonacci进行了大量的重复计算-在fib(14)fib(4)中计算了很多次。您可以将内存添加到您的算法中以使其更快:deffib(n,memo={})ifn==0||n==1returnnen

  8. ruby-on-rails - Rails add_index 算法 : :concurrently still causes database lock up during migration - 2

    为了防止在迁移到生产站点期间出现数据库事务错误,我们遵循了https://github.com/LendingHome/zero_downtime_migrations中列出的建议。(具体由https://robots.thoughtbot.com/how-to-create-postgres-indexes-concurrently-in概述),但在特别大的表上创建索引期间,即使是索引创建的“并发”方法也会锁定表并导致该表上的任何ActiveRecord创建或更新导致各自的事务失败有PG::InFailedSqlTransaction异常。下面是我们运行Rails4.2(使用Acti

  9. ruby - 趋势算法 - 2

    我正在开发一个类似微论坛的项目,其中一个特殊用户发布一条快速(接近推文大小)的主题消息,订阅者可以用他们自己的类似大小的消息来响应。直截了当,没有任何形式的“挖掘”或投票,只是每个主题消息的响应按时间顺序排列。但预计会有很高的流量。我们想根据它们引起的响应嗡嗡声来标记主题消息,使用0到10的等级。在谷歌上搜索了一段时间的趋势算法和开源社区应用示例,到目前为止已经收集到两个有趣的引用资料,但我还没有完全理解它们:Understandingalgorithmsformeasuringtrends,关于使用基线趋势算法比较维基百科页面浏览量的讨论,在SO上。TheBritneySpearsP

  10. Ruby - 不支持的密码算法 (AES-256-GCM) - 2

    我收到错误:unsupportedcipheralgorithm(AES-256-GCM)(RuntimeError)但我似乎具备所有要求:ruby版本:$ruby--versionruby2.1.2p95OpenSSL会列出gcm:$opensslenc-help2>&1|grepgcm-aes-128-ecb-aes-128-gcm-aes-128-ofb-aes-192-ecb-aes-192-gcm-aes-192-ofb-aes-256-ecb-aes-256-gcm-aes-256-ofbRuby解释器:$irb2.1.2:001>require'openssl';puts

随机推荐