%---------------------------------------------------------
%music经典算法matlab仿真试验代码,不过经典算法在低信噪比情况分辨率比较差
%利用奇异值分解对两个相干信号进行解相关
%阵列为阵元数m=8;窄带远场信源数为2,两个信源相干,信噪比分别为10dB
%矩阵的构建利用Music平滑算法构建Y1。
%----------------------------------------------------------
clear all;
n=0.01:0.01:5.12;
%接受到的信号矩阵2x512,信噪比为10dB
snr=10;
t=10^(snr/10);
%接受到的信号矩阵2x512,信噪比为10dB
s1=sqrt(2*t)*cos(20*pi*n+pi/3);
s2=sqrt(2*t)*cos(20*pi*n+pi/3);
S=[s1',s2'].';
m=8;
d=2;
i=sqrt(-1);
%噪声为白噪声8x512,这里512为快拍数
n=randn(m,512);
N=n+n*i;
%信号导引矩阵8x2
arg1=10;
arg2=20;
arg=[sin((arg1/180)*pi),sin((arg2/180)*pi)];
for k=1:m
A(k,:)=exp(-i*(k-1)*pi*arg);
end
%阵元输出复合信号矩阵8x512
X=A*S+N;
%求出信号的协方差矩阵Rxx
Rxx=X*X'/512;
%协方差矩阵特征值分解
[v,u]=eig(Rxx)
%最大特征向量
v1=v(:,8);
p=5;
q=4;
%重构qxp矩阵Y1
Y1=[v1(1:5).';v1(2:6).';v1(3:7).';v1(4:8).'];
%--------------------------------------------------------
%经典奇异值分解算法
%--------------------------------------------------------
[U1,D1,V1]=svd(Y1);
j=[1:q]';
Un=U1(:,(d+1):q);
%不断变换方位角,进行扫描,找出需要的角度
for ang=0:90
a=exp(-i*pi*(j-1)*sin((ang/180)*pi));
w1=a'*Un*Un'*a;
Psvd(ang+1)=10*log(1./abs(w1));
end
ang=0:90
plot(ang,Psvd,'r');grid on;
xlabel('角度');ylabel('角谱/dB');legend('SVD算法');
title('svd算法分辨两个相干信号')
评论0