请大家帮忙看看程序哪里错了
以下是我写的用music算法求时间延迟的程序,出来的结果不对,而且每次运行的结果都不一样,请大家给看看哪里错了!急!
%交代已知条件
clear
close all
f=1*10^8;%载波频率
c=3*10^8;
lamda=c/f;%载波波长
d=lamda/2;%阵元间距
n=10;s=3;%天线个数是10,入射信号个数为3
f1=2*10^8; %入射信号的频率为10,入射角度为40度
thita1=40;
thita2=90;
thita3=135;
%snapshot=1:100;
L=100;dt=0.01;
LL=0:L-1;t=LL*dt;
S1=exp(j*2*pi*f1*(t-0.10));
S2=exp(j*2*pi*f1*(t-0.20));
S3=exp(j*2*pi*f1*(t-0.50));
S=[S1;S2;S3];
A1=10*exp(-j*2*pi*d*[0:n-1]*cos(thita1*pi/180)/lamda).';
A2=10*exp(-j*2*pi*d*[0:n-1]*cos(thita2*pi/180)/lamda).';%方向向量的表达式
A3=10*exp(-j*2*pi*d*[0:n-1]*cos(thita3*pi/180)/lamda).';
A=[A1,A2,A3];
SNR=10;
y=A*S;
X = awgn(y,SNR);
%for k=1:n
% x(:,k)=X(k,:)';
%end
x=X';
xx=x*x'/n;%求协方差矩阵
%XX=sum(xx)/n;
%R=cov(X'); %求协方差矩阵
[V,D]=eig(xx);%求特征值d和特征向量v
%diag(D) 把对角线上的元素取出来排成一列
[Y,I]=sort(diag(D)); %排序 对D进行排序放在Y中,I中放指针数值,升序排列
Un=V(:,I(1:n-s));
delay=0:0.1:1;
for i=1:length(delay)
SS=exp(j*2*pi*f1*(t-delay(i))).';
Pmusic(i)=(SS'*SS)/(SS'*Un*Un'*SS);
end
figure(1);
plot(delay,10*log10(abs(Pmusic)/max(abs(Pmusic))),'r--');%横坐标是入射角度 纵坐标是归一化的功率/db
grid on;
hold on;
xlabel('时间延迟(s)');
ylabel('输出功率(dB)');
title('普通music算法');
legend('普通MUSIC'); |