Joint SVD

%2017.6.24
%JSVD
%Joint SVD of 2 cross_correlation matrices to achieve automatic paring in
%2-D angle estimation problems
clc
close all;
clear all

Mx=10;                                                                     %x轴阵元数
Mz=10;                                                                     %z轴阵元数
d_lamda=1/2;                                                               %阵元间距
K=2;                                                                       %信号数
phix=[45,52];                                                              %x轴方位角
thetaz=[15,25];                                                            %z轴俯仰角
fc=[200*10^6,300*10^6];                                                    %信号频率
fs=1000*10^6;                                                              %采样频率
L=1000;                                                                    %快拍数
snr=10;                                                                    %信噪比

for k=1:L
    S(:,k)=sqrt(10.^(snr/10))*randn(1)*exp(1j*2*pi*fc'/fs*(k-1));
end
for kk=1:K
    A1x(:,kk)=exp(-1j*2*pi*[0:Mx-1]'*d_lamda*cos(phix(kk)/180*pi));
    A1z(:,kk)=exp(-1j*2*pi*[0:Mz-1]'*d_lamda*cos(thetaz(kk)/180*pi));      %1维导向矢量
end
ZZ=A1z*S+wgn(Mz,L,0,'dBm','complex');                                      %z轴接收到的信号
XX=A1x*S+wgn(Mz,L,0,'dBm','complex');                                      %x轴接收到的信号

Rxz=XX*ZZ'/L;                                                              %(4)获取协方差矩阵
Rxz1=Rxz(:,1:Mx-1);
Rxz2=Rxz(:,2:Mx);
R=[Rxz1;Rxz2];                                                             %(10)
[U,D,V]=svd(R);                                                            %(11)
U1=U(:,1:K);
U11=U1(1:Mx,:);
U12=U1(Mx+1:2*Mx,:);
W=pinv(U11)*U12;
[T,w]=eig(W);                                                              %(18)
gama=(diag(w)).';                                                          %(20)
doa_theta=acos(angle(gama)/pi)*180/pi;
doa_theta=sort(doa_theta,'ascend');                                        %估计出来方位角
Aphi=U11*(T);
phii=0:0.0001:90;
for k=1:K
for  kk=1:length(phii)  
    a=exp(-1j*2*pi*d_lamda*cos(phii(kk)/180*pi)*[0:Mx-1]');
   p(k,kk)=(abs(a'*Aphi(:,k)))/(norm(a,2).^2);  
end
   [Pv(k,:),Pd(k,:)]=max(p(k,:));
   doa_phi(k)=(Pd(k,:)-1)/10000;
end
disp('(俯仰角,方位角)');
for k=1:K
    disp([num2str(doa_phi(k)) ',' num2str(doa_theta(k))]);
end


猜你喜欢

转载自blog.csdn.net/weixin_38452468/article/details/73744024
SVD