Direction-of-Arrival Estimation of Coherent Signals via Coprime Array Interpolation

基于互质阵列的相干信源DOA估计(NNM)

相干信号模型:
x S ( t ) = s 1 ( t ) ∑ k = 1 K α k a S ( θ k ) + n S ( t ) = A S α s 1 ( t ) + n S ( t ) \mathbf{x}_{\mathbf{S}}(t)=s_{1}(t)\sum_{k=1}^{K}\alpha_{k}\mathbf{a}_{\mathbf{S}}(\theta_{k})+\mathbf{n}_{\mathbf{S}}(t)\\=\mathbf{A}_{\mathbf{S}}\alpha s_{1}(t)+\mathbf{n}_{\mathbf{S}}(t) xS(t)=s1(t)k=1KαkaS(θk)+nS(t)=ASαs1(t)+nS(t)
对互质阵列进行内插:
U = { l ∣ 0 ≤ l ≤ max ⁡ ( S ) } . \mathbb{U}=\{l|0\leq l\leq\max(\mathbb{S})\}. U={l∣0lmax(S)}.
x U ( t ) = s 1 ( t ) ∑ k = 1 K α k a U ( θ k ) + n U ( t ) = A U α s 1 ( t ) + n U ( t ) \begin{gathered} \mathbf{x}_{\mathrm{U}}(t) =s_1(t)\sum_{k=1}^K\alpha_k\mathbf{a}_\mathbf{U}(\theta_k)+\mathbf{n}_\mathbf{U}(t) \\ =\mathbf{A}_{\mathbf{U}}\boldsymbol{\alpha}s_{1}(t)+\mathbf{n}_{\mathbf{U}}(t) \end{gathered} xU(t)=s1(t)k=1KαkaU(θk)+nU(t)=AUαs1(t)+nU(t)
R x U = E { x U ( t ) x U H ( t ) } = p 1 A U α α H A U H + σ n 2 I ∣ U ∣ \mathbf{R}_{\mathbf{x}_{\mathbf{U}}}=E\{\mathbf{x}_{\mathbf{U}}(t)\mathbf{x}_{\mathbf{U}}^{H}(t)\}=p_{1}\mathbf{A}_{\mathbf{U}}\mathbf{\alpha}\mathbf{\alpha}^{H}\mathbf{A}_{\mathbf{U}}^{H}+\sigma_{n}^{2}\mathbf{I}_{|\mathbf{U}|} RxU=E{xU(t)xUH(t)}=p1AUααHAUH+σn2IU
从任意一行 R x U R_{xU} RxU,我们得到如下的Toeplitz矩阵:
F ( m ) = [ [ R x U ] m , L − 1 [ R x U ] m , L ⋯ [ R x U ] m , ∣ U ∣ − 1 [ R x U ] m , L − 2 [ R x U ] m , L − 1 ⋯ [ R x U ] m , ∣ U ∣ − 2 ⋮ ⋮ ⋱ ⋮ [ R x U ] m , 0 [ R x U ] m , 1 ⋯ [ R x U ] m , L − 1 ] \mathbf{F}(m)=\begin{bmatrix}\left[\mathbf{R_{x_U}}\right]_{m,L-1}&\left[\mathbf{R_{x_U}}\right]_{m,L}&\cdots&\left[\mathbf{R_{x_U}}\right]_{m,|\mathbf{U}|-1}\\\left[\mathbf{R_{x_U}}\right]_{m,L-2}&\left[\mathbf{R_{x_U}}\right]_{m,L-1}&\cdots&\left[\mathbf{R_{x_U}}\right]_{m,|\mathbf{U}|-2}\\\vdots&\vdots&\ddots&\vdots\\\left[\mathbf{R_{x_U}}\right]_{m,0}&\left[\mathbf{R_{x_U}}\right]_{m,1}&\cdots&\left[\mathbf{R_{x_U}}\right]_{m,L-1}\end{bmatrix} F(m)= [RxU]m,L1[RxU]m,L2[RxU]m,0[RxU]m,L[RxU]m,L1[RxU]m,1[RxU]m,U1[RxU]m,U2[RxU]m,L1
通过求解核范数最小化问题恢复托普利兹矩阵:
min ⁡ F ~ ( m ) ∈ C L × L ∥ F ~ ( m ) ∥ ∗ s u b j e c t   t o F ~ ( m ) ∘ C = F ^ ( m ) \begin{aligned}&\min_{\tilde{\mathbf{F}}(m)\in\mathbb{C}^{L\times L}}\|\tilde{\mathbf{F}}(m)\|_{*}\\&\mathrm{subject~to}\quad\tilde{\mathbf{F}}(m)\circ\mathbf{C}=\hat{\mathbf{F}}(m)\end{aligned} F~(m)CL×LminF~(m)subject toF~(m)C=F^(m)
仿真代码:

%% 《Direction-of-Arrival Estimation of Coherent Signalsvia Coprime Array Interpolation》仿真
%% IEEE SIGNAL PROCESSING LETTERS, VOL. 27, 2020
%% 相干信源DOA估计
clc;
clear all;
close all;
M = 3;
N = 5;
L = M+N-1;
array1 = 0:M:(N-1)*M;
array2 = 0:N:(M-1)*N;
array = [array1 array2];
array = unique(array);
arraymax = max(array);
d = 0.5;
theta = [10 30 ];
K = length(theta);
snap = 500;
f0 = 1e4;%载频
fs = 100*f0;%采样频率
d = 0.5;
snr =20;
t = [1:snap]/fs;
s = exp(1j*2*pi*(f0.*t));
A = exp(-1i*pi*array'*sin(theta/180*pi));
alpha = [1;exp(1j*pi/4)];
x= A*alpha*s;
x = awgn (x,snr,'measured');
%% 阵列内插
x_v = zeros(arraymax+1,snap);
for i = 0:arraymax
    count = find(i == array);
    if count
        x_v(i+1,:) = x(count,:);
    end
end
l =  (length(0:arraymax)+1)/2;
Rv = (x_v*x_v')/snap;
zD = Rv(1,:);
%% 重构Teoplitz矩阵
% F = zeros(l,l);%重构的协方差矩阵
F = toeplitz(fliplr(zD(1:l)),zD(l:end));
G = ones(l,l);
posi0V = find(F==0);
G(posi0V) = 0;
%% 求解凸优化问题
mu = 0.25;
cvx_begin quiet
variable T(l, l)  complex toeplitz 
minimize(norm_nuc(T) )
subject to
T.* G==F;
cvx_end
%% musicDOA估计
array = 0:l-1;
[Pmusic_db,angle] = MUSIC(T,K,array);
plot(angle,Pmusic_db,'Linewidth',1);
hold on
for n = 1:K
    plot([theta(n),theta(n)],ylim,'r-.','Linewidth',1);
end
xlabel('角度(°)');
ylabel('归一化幅度');
legend('NNM','波达方向');
[pks,locs] = findpeaks(Pmusic_db);
[a,b] = sort(pks,'descend');
angle_mer=sort(angle(locs(b(1:K))));
disp(angle_mer);
% % [U,D] = eig(T);                                       % 特征值分解
% % [D,I] = sort(diag(D));                                % 将特征值排序从小到大
% % U = fliplr(U(:, I));                                  % 对应特征矢量排序,fliplr 之后,较大特征值对应的特征矢量在前面
% % Un = U(:, K+1:end);                                     % 噪声子空间
% % Gn = Un*Un';
% % % 提取多项式系数并对多项式求根
% % len = arraymax+1;
% % coe = zeros(1, 2*len-1);
% % for i = -(len-1):(len-1)
% %     coe(-i+len) = sum(diag(Gn,i));
% % end
% % r = roots(coe);                                       % 利用roots函数求多项式的根
% % r = r(abs(r)<1);                                      % 找出在单位圆里的根
% % [lamda,I] = sort(abs(abs(r)-1));                      % 挑选出最接近单位圆的K个根
% % Theta = r(I(1:K));
% % Theta = asin(-angle(Theta)/pi)*(180/pi);                 % 计算信号到达方向角
% % Theta = sort(Theta).';
% % disp('估计结果:');
% % disp(Theta);

函数MUSIC代码如下:

function [Pmusic_db,angle] = MUSIC(R,K,Array)

[EV,Dv] = eig(R);%特征值分解
% [EV,Dv] = eig(T);%特征值分解
DD = diag(Dv);%将特征值变为向量形式
[DD,I] = sort(DD);%从小到大
DD = fliplr(DD');%翻转函数,从大到小
EV = fliplr(EV(:,I));
En = EV(:,K+1:end);%噪声子空间
angle=-90:0.01:90;
for m=1:length(angle)
    a=exp(-1i*pi*Array'*sin(angle(m)*pi/180));
    Pmusic(m)=1/(a'*En*En'*a);
end
Pmusic = abs(Pmusic);
Pmax = max(Pmusic);
Pmusic_db =pow2db(Pmusic/Pmax);
end


仿真结果如下图:

在这里插入图片描述

  • 34
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值