前言
原子范数最小化作为压缩感知中比较热门的算法,因其通过在集合内寻找最优原子组合的思想,相较于其他On-grid、Off-grid的算法,Gridless的原子范数最小化算法具有最高的精度,但是随之而来的便是较高的复杂度与计算度,此外,在DOA及波束形成这一块由于其导向矢量结构特性与范德蒙德分解具有着极高的适配性,因此采用原子范数最小化这一方法具有更高的精度,这篇文章是20年由国防科大电科院的老师于TSP上进行发表。关于原子范数最小化及其在DOA中的应用场景,可以参考压缩感知的尽头: 原子范数最小化,该博客作者在其中已经提供了详细的公式推导。
模型提出及具体实现
问题提出
一般来讲,现有的大部分提出的稳健自适应波束形成算法仍然是基于MVDR,通过求解维纳最优解得到当前协方差矩阵下的最优权向量。该问题可以表示为如下形式:
在早期协方差矩阵通常以估计得到的数据协方差阵进行直接带入,这导致了在高信噪比下的信号自消的现象,近年来逐渐以干扰加噪声协方差阵代替,一定程度上提高了性能,在这篇文章中,作者通过将干扰矩阵带入,对协方差阵进行求解。即该问题可被表示为:
其中为干扰协方差阵,一说为干扰子空间,其理想情况下具有的特性为: 半正定性,是一个典型的托普利茨结构的矩阵,并且可被范德蒙德分解。因此作者的核心思想便是通过原子范数最小化,得到以名义导向矢量集表示的与接收信号协方差矩阵近似的重构干扰协方差矩阵。
这篇文章中作者以表示阵元数,以表示快拍数,以表示干扰数。
原子范数最小化
定义原子集的表示形式为:
其中的原子为:
其中,,为阵元数,则接收信号中干扰信号分量可表示为:
则可通过在接收信号的F范数邻域内,寻找能够被最少的原子数表示出来的干扰信号分量,即:
其中便是原子范数,可表示为:
该原子范数显然是个NP-hard问题,但是原子范数有着一条非常优秀的性质,就是可以像传统的 范数松弛成一个范数(这部分证明可参考B站-中科大凸优化-凸优化19)一样,从原子范数松弛成一个凸原子范数:
其中为原子范数,可表示为:
可以发现,从原子范数松弛成一个原子范数,实际上就是把问题从最少分量表示转变为各分量的最小非负加权和。与此同时 原子范数还满足范数的非负性、正定性、齐次性及三角不等式( 原子范数为凸,故根据凸函数性质,满足三角不等式)。然而 原子范数中需要考虑的优化项过多,因此可以通过将期望信号分量以其估计值进行代替,通过多次迭代进行的更新,从而减少优化问题的复杂度。因此上面的干扰信号 原子范数可表示为:
其等价形式为:
其中
为干扰协方差阵,为一保证半正定约束的变量。该部分的思想主要就是通过舒尔补与范德蒙德分解,将一个 原子范数约束问题等价为一个半正定约束规划问题,接下来对如何从第一个问题的问题的优化项转化为第二个问题的优化项与第一个问题的约束项作一点解释,首先引入如下两个概念:
范德蒙德分解
对于任意秩的半正定Hermitian-Toeplitz矩阵,可以进行如下范德蒙德分解:
当且仅当时该分解唯一,其中为第k个“频率分量”,其形式就像阵列信号处理中的导向矢量一样,其中的各个元素在相位上的变化趋势时线性的,而为每个频率分量对应的幅度以及相位。
舒尔补条件
假设,即为一正定矩阵,,即为一对称矩阵,则有以下不等式成立:
在获知以上两个概念后,首先观察以下矩阵:
则若该矩阵半正定,有:
1、为半正定矩阵,存在唯一范德蒙德分解。
2、一定位于的列空间中
在满足作者给定的条件下该矩阵是半正定的,因此首先对该矩阵尝试作范德蒙德分解,即得到:
其中为范德蒙德分解得到的频率分量,其意义为协方差矩阵中的导向矢量,为范德蒙德分解得到的频率分量,其意义为第个入射信号在每个快拍上的相位信息所构成的向量。则若找到了满足该矩阵半正定条件的秩最小的,其秩便是组成所需的最少原子数,即实现了相应的原子范数最小化,该问题可被表示为:
该问题非凸,可凸松弛至
该松弛实际上的意义是范数松弛至范数的相似的表示形式,即最少原子数松弛至最小非负加权和。该问题显然为凸:首先矩阵的迹为一仿射,对于约束条件,显然有以下等价条件成立:
该约束为凸。
至此已经可以通过CVX对该凸问题进行求解。作者随后提供了该凸问题的ADMM的迭代解法,对于SDP类的优化问题,通过ADMM能够降低优化算法的复杂度。关于ADMM在原子范数最小化中的应用可以参考:ADMM算法的应用: 降低SDP算法复杂度
首先对原问题
进行等价变换:
该问题也等价为作者在文中提出的形式:
从原问题,到原问题的等价问题是以罚函数的形式,将约束条件放进优化条件,相当于对原问题进行松弛。同时,引入罚函数法得到的最优值总比原问题的最优值更小(这部分可参考B站-中科大凸优化-凸优化40、41)。
从原问题的等价问题到作者在文中提出的约束问题,作者首先是将惩罚因子移到了矩阵迹的部分,这就使得该问题的目标从最稀疏原子表示出于接收信号相似的信号到对接收信号以最稀疏的信号进行表示。对于约束函数部分,通过引入新的变量,使得半正定矩阵
变为无约束,对于该半正定矩阵的优化问题变为了无约束优化问题。
ADMM求解
对作者在文中提出的约束问题形式进行增广拉格朗日函数求解,增广拉格朗日函数如下所示:
其中为拉格朗日乘子,为增广拉格朗日乘子。接下来便是以优化变量-约束变量-拉格朗日乘子的顺序进行交替优化,如下所示:
其中上标为其迭代次数。式1与式2的要求均为取到全局最优解,式3则是通过取其一阶偏导为0得到其闭式解。至此为止迭代形式仍有些许复杂,因此可通过对增广拉格朗日函数求导对得出一些变量的闭式更新解,首先有以下公式成立:
对于一些参与求导的分块矩阵,作者进行了如下处理:
则上面的全局最优解操作即可重新表示为:
其中为一对角阵,其对角线上的元素值满足:
为一矩阵到向量的线性映射,该映射输出的第个元素表示输入矩阵中所有的行数与列数满足的元素的和。则表示首项为1,其余为0的列向量。至于是如何得到的,将增广拉格朗日函数中关于的项进行展开,有
结合复Toeplitz阵的特性,对进行逐项求导,即可得到。
对于与,这里作者用了一个很巧妙的代换运算,将两个全局最优解以拼接矩阵的方式进行联合求解。首先提取出增广拉格朗日函数中与和相关的部分,有:
通过以下两个等价代换,即可把该双变量增广拉格朗日函数变换成单变量增广拉格朗日函数,即:
等价的单变量增广拉格朗日函数为:
对应的全局最优解为:
其中,。
最后为半正定矩阵的更新,增广拉格朗日函数中与相关的分量如下所示:
则根据ADMM的Scaled Form(该部分可参考ADMM算法简介),该函数可被表示为:
则该函数的目标即为寻找使第一项F范数的平方最小化的半正定矩阵,则有:
其中。至此ADMM算法的全部闭式更新解已获得。
收敛性及误差分析
在无噪声环境下,最小化噪声信号的 原子范数总是可行的,因此作者考虑在噪声环境下 最小化噪声信号的 原子范数可行性。
引理1:与为上文中的原子范数最小化问题(文中(14))的最优解,当且仅当以下条件满足:
其中为两个矩阵的复内积,定义为,为,即 原子范数的对偶范数,满足范数四要素的范数可视为一凸函数,因此对偶范数的定义如下:
即对于范数,其对偶范数是找到一个向量或矩阵,使得和的内积达到最大,这个最大的内积就是的对偶范数。因此原子范数的对偶范数定义为(第二步到第三步,从的角度上看待):
谈到范数的对偶函数,就不得不提范数的共轭函数。根据共轭函数的定义,范数的共轭函数有以下定义成立(以 原子范数为例):
范数的共轭函数为指示函数,即若,其共轭函数为:
且对偶范数有以下性质成立:
对于该引理的证明,首先考虑引理1,其条件1为(14)的约束项,因此显然成立。随后作者将最小化噪声信号分量的原子范数优化问题转化为其等价的LASSO形式(个人感觉更像是罚函数,赋约束以权值将原问题变成一个无约束问题),即:
该问题显然为凸((14)的等价形式(15)为凸,因此14为凸),因此存在最小值,使得:
展开上式,有:
注意到:
则:
又因为原子范数为凸,为仿射与凸函数的嵌套,因此也为凸,则根据凸函数的定义,有:
即得:
将(39)带入(38)对不等式进行进一步放缩:
同时令,则有:
则可推出:
进一步得到:
上式右边部分以代替即证为最优解:
令,,则式(40)可表示为:
等价于:
因此根据 原子范数的对偶范数的定义及共轭函数的性质(可参考【凸优化笔记3】-凸优化问题、示性函数、共轭函数、对偶范数),有
式17条件1即证。
式(17)条件3即证,将(44)与(45)代入(43),即得:
式(17)条件2即证 ,因此满足式(17)三条件的与即为问题(16)的一个解。
定理1 :对于优化问题(16),若噪声的原子范数的对偶范数存在上确界,则最优解的均方误差可表示为:
其中为信号的真实值。
证明:根据式(17),(19)及定理1的前提可表示为:
同时最优解须满足式14中的条件:
根据式(17)条件3,有:
其中为的共轭带入式(48),有:
即证。因此有:
定理2 :对于优化问题(16),若噪声的原子范数的对偶范数存在上确界,且真实期望信号满足,则干扰信号的最优解满足:
其中为估计值的真实值。则可得到干扰信号与干扰子空间均一致收敛。
期望信号方向再估计
已知上一循环所得到的期望信号方向为,则方向误差可表示为,求解该方向误差可表示为以下原子范数最小化问题:
其中为在处的导数(与On-grid到Off-Grid有异曲同工之妙),其SDP形式为
该问题同样可以通过CVX或者ADMM进行求解。
自适应权向量估计
需要注意的是,为一欠秩阵,因此直接取逆不可行,可采用以该矩阵的M-P广义逆代替之,有:
在这之后作者又将该算法拓展到了多目标场景,即构造多个期望信号的约束,其思想与MVDR拓展到LCMV类似,因此不再赘述与进行仿真。
算法步骤总结
该迭代原子范数最小化自适应波束形成算法步骤如下所示:
输入:量测数据,期望信号估计值 |
初始化:设定噪声相关量, |
设定迭代变化值,进行迭代: 迭代步骤1:对问题(14)进行求解,以获得期望信号的估计值,求解得到的信号估计值记为。 迭代步骤2:对问题(23)进行求解,以获得期望信号方向估计偏差,求解得到的信号估计值记为。 迭代步骤3:若满足,跳出循环并输出噪声子空间估计值与期望信号方向估计偏差,否则返回迭代步骤1。 |
获得自适应权向量。 |
仿真
部分仿真条件如表所示:
阵元数 | 10 |
信噪比 | 10 |
扰噪比 | 10 |
阵元间距 | 半波长 |
信源数 | 1 |
干扰数 | 2 |
信源到达角 | 5° |
干扰到达角 | -30°,45° |
信源角度估计误差 | [0°,3°] |
信号F范数容忍度 | 0.1 |
噪声阵F范数约束上限 | 100 |
代码如下所示(采用的是CVX求解器,若想要提高求解速度请用ADMM对变量进行逐个迭代求解):
运行该段代码需要安装MATLAB CVX组件与SDPT3组件,若未安装可能运行报错。
运行需求时间较长,主要原因是对角度估计线性逼近过程中一阶泰勒展开导致的逼近速度过慢。
clc;
clear;
jk = 0;
loop = 50;
SINRO = zeros(1,length(-20:5:40));
snr = 10;
deg_dev_predf = 3;%%预定义的角度最大偏移量
ang_mismatch1 = randi(deg_dev_predf*2)-deg_dev_predf;
ang_mismatch2 = randi(deg_dev_predf*2)-deg_dev_predf;
ang_mismatch3 = randi(deg_dev_predf*2)-deg_dev_predf; %%三个不同方向的DOA误差
% ang_mismatch1 = 0;
% ang_mismatch2 = 0;
% ang_mismatch3 = 0; %%三个不同方向的DOA误差
%% 初始化及设定参数
array_num = 10;%%阵元数
snapshot_num = 10;%%快拍数
source_aoa = [5,-30,45];%%信源到达角
tgt_ang = 1;
c = 340;%%波速
f = 1000;%%频率
lambda = c/f;%%波长
d = 0.5*lambda;
inr1 = 10;
inr2 = 10;
source_num = length(source_aoa);%%信源数
sig_nr = [snr,inr1,inr2];%%信号功率dBw
deg_deviate = 3;%%误差角度偏离
source_dev = source_aoa+[ang_mismatch1,ang_mismatch2,ang_mismatch3];
%% 导向矢量
A = exp(-1i*(0:array_num-1)'*2*pi*(d/lambda)*sind(source_aoa));%%阵列响应矩阵
tar_sig = wgn(1,snapshot_num,sig_nr(tgt_ang));
inf1 = wgn(1,snapshot_num,sig_nr(2));
inf2 = wgn(1,snapshot_num,sig_nr(2));
n = (randn(array_num,snapshot_num)+randn(array_num,snapshot_num)*1i)/sqrt(2);
rec_sig = A(:,1)*tar_sig+A(:,2)*inf1+A(:,3)*inf2+n;
%% 算法
theta_est = [];
tar_ang_est = source_dev(1);
theta_est = [theta_est tar_ang_est];
judge_fro_tol = 0.1;
noise_var_tol = 100;
current_fro = norm(rec_sig,"fro")^2;
while current_fro >= judge_fro_tol
%% iteration step 1
current_ang = tar_ang_est(end);
current_sv_0 = exp(-1i*(0:array_num-1)'*pi*sind(current_ang));
cvx_begin quiet
cvx_solver sdpt3
variable Tau1(array_num,array_num) hermitian toeplitz
variable omega_matrix1(snapshot_num,snapshot_num) hermitian toeplitz
variable source_sig1(snapshot_num,1) complex
variable X1(array_num,snapshot_num) complex
minimize(array_num*Tau1(1,1)+snapshot_num*omega_matrix1(1,1))
subject to
[Tau1 X1-current_sv_0*conj(source_sig1');(X1-current_sv_0*conj(source_sig1'))' omega_matrix1] == hermitian_semidefinite(array_num+snapshot_num);
norm(rec_sig-X1,"fro") <= sqrt(2*noise_var_tol);
cvx_end
%% iteration step 2
der_sv_0 = -1i*pi*(0:array_num-1)'*cosd(current_ang).*current_sv_0;
cvx_begin quiet
cvx_solver sdpt3
variable Tau2(array_num,array_num) hermitian toeplitz
variable omega_matrix2(snapshot_num,snapshot_num) hermitian toeplitz
variable delta_theta
variable X2(array_num,snapshot_num) complex
minimize(array_num*Tau2(1,1)+snapshot_num*omega_matrix2(1,1))
subject to
[Tau2 X2-(current_sv_0+delta_theta*der_sv_0)*conj(source_sig1');(X2-(current_sv_0+delta_theta*der_sv_0)*conj(source_sig1'))' omega_matrix2] == hermitian_semidefinite(array_num+snapshot_num);
norm(rec_sig-X2,"fro") <= sqrt(2*noise_var_tol);
cvx_end
%% judgment
current_fro = norm(X1-X2,'fro');
disp(current_fro);
current_ang = current_ang+delta_theta;
disp(delta_theta);
disp(current_ang);
tar_ang_est = [tar_ang_est current_ang];
end
[P,D] = eig(Tau2'*Tau2);
inv_Tau = P*inv(D)*P'*Tau2';
a_est = exp(-1i*(0:array_num-1)'*pi*sind(current_ang));
w0 = inv_Tau*a_est/(a_est'*inv_Tau*a_est);
beam_plot(w0);
function [] = beam_plot(input_weight_vector)
array_num = length(input_weight_vector);
theta = -90:0.01:90;
p = exp(-1j*2*pi*(0:array_num-1)'*sind(theta)/2);
y = input_weight_vector'*p;
outputval = 20*log10(abs(y)/max(abs(y)));
figure()
plot(theta,outputval,'LineWidth',2);
end
仿真运行结果如下所示:
部分参考文献
Zai Yang, Jian Li, Petre Stoica, and Lihua Xie. Sparse Methods for Direction-of-Arrival Estimation