互质阵列DOA估计,不用空间平滑

clear all
close all
clc
M = 5;%子阵一阵元数
N = 3;%子阵二阵元数
m = 0:M-1;
n = 0:N-1;
array= union(M*n,N*m);%不用扩展扩展互质阵列
arraymax = max(array);
snap = 500;
f0 = 1e4;%载频
fs = 2*f0;%采样频率
t = [1:snap]/fs;
theta =-50:100/6:50;%多到达角
K = length(theta);
k = rand(K,1);
S = exp(1j*2*pi*(k*f0.*t));
A = exp(-1i*pi*array'*sin(theta/180*pi));
x= A*S;
snr = 30;
x = awgn (x,snr,'measured');
vir_x = vec(x*x'/snap);
%% 构造差分阵列接收单快拍数据
len = length(array);
% diff_array = zeros(1,len^2) ;
for j=1:len
 B(:,j)=array-array(j);      % 差阵列(包含重复项)
end
B = B(:);
diff_sum = unique(sort(B));
arraymax = max(diff_sum);
xv_h =zeros(2*arraymax+1,1);
for i = -arraymax:arraymax
    [a,b]=find(B == i);
    if(a)
        xv_h(i+1+arraymax,:) = mean(vir_x(a,:));
    end
end
%%取非零数
x_u = xv_h(-length(array)+arraymax+1:length(array)+arraymax+1);
L = (length(x_u)+1)/2;
R = toeplitz(x_u(L:end));
R_SS = 1/L*(R*R');
[EV,Dv] = eig(R_SS);%特征值分解
DD = diag(Dv);%将特征值变为向量形式
[DD,I] = sort(DD);%从小到大
DD = fliplr(DD');%翻转函数,从大到小
EV = fliplr(EV(:,I));
En = EV(:,K+1:end);%噪声子空间
angle=-60:0.01:60;
for m=1:length(angle)
    a=exp(1i*pi*(0:L-1)'*sin(angle(m)*pi/180));
    Pmusic(m)=1/(a'*En*En'*a);
end
Pmusic = abs(Pmusic);
Pmax = max(Pmusic);
Pmusic_db = pow2db(Pmusic/Pmax);
plot(angle,Pmusic_db,'Linewidth',1.5,'Color',[0 0 1]);
hold on
for n = 1:K
    plot([theta(n),theta(n)],ylim,'r-.','Linewidth',1);
end
grid on
xlabel('angle(degree)');
ylabel('Spatial spectrum(dB)');

参考《Sparse Array Signal Processing: New Array Geometries, Parameter Estimation, and Theoretical Analysis》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值