matlab仿真代码
clc
clear
close all
m = 8;
N = 3;
L = 500;
SNR = 10;
Noise1 = 1/(10^(SNR/20)).*randn(m-1,L);
Noise2 = 1/(10^(SNR/20)).*randn(m-1,L);
S = randn(N,L)+1j*randn(N,L);
theta = [-20,0,30];
A1 = exp(1j*pi.*(0:m-2)'*sin(theta/180*pi));
A2 = exp(1j*pi.*(0:m-2)'*sin(theta/180*pi))*diag(exp(1j*pi*sin(theta/180*pi)));
X1 = A1*S+Noise1;
X2 = A2*S+Noise2;
X =[X1;X2];
R = X*X';
[U, lamada_i]=eig(R);
Us = U(:,2*(m-1)-N+1:2*(m-1));
PHI_LS = Us(1:m-1,:)'*Us(m:2*m-2,:)/(Us(1:m-1,:)'*Us(1:m-1,:));
[Vpsi, Dpsi]=eig(PHI_LS);
theta_LS=asin(angle(diag(Dpsi))/pi)*180/pi;
theta_LS = sort(theta_LS);
Us1 = Us(1:m-1,:);
Us2 = Us(m:2*m-2,:);
Us12 = [Us1 Us2];
Mat = Us12'*Us12;
[E, lamada_k]=eig(Mat);
E11 = E(1:N,1:N);
E21 = E(N+1:2*N,1:N);
PHI_TLS = -E11/E21;
[VER,lamad_est] = eig(PHI_TLS);
theta_TLS = asin(angle(diag(lamad_est))/pi)*180/pi;
theta_TLS = sort(theta_TLS);
disp('真实值 LS_ESPRIT估计值 TLS_ESPRIT估计值');
disp([theta' theta_LS theta_TLS]);