📄 music算法doa估计.m
字号:
%%%%%%%%%%%%% 8阵元阵列。2个输入信号,S1:DOA为30度,S2:DOA为40度
clear;
SNR = input ('SNR = --->');
dLamtR=1/2;
angle1=30*pi/180; %信号入射角
angle2=40*pi/180;
L=8; %阵元数
Thita=-pi:0.005*pi:pi;
Atheta = exp(j * (0 : L-1)' * pi * sin(Thita));
a1=exp(j*pi*(0:L-1)'*sin(angle1));
a2=exp(j*pi*(0:L-1)'*sin(angle2));
N=100;
v = randn(1,8) + j * randn(1,8); %生成1行8列的高斯噪声
v=v/std(v); %将噪声归一化
y=zeros(L,N); %对y置零
s1=exp(j*(0:N-1)'*pi/4);
s2=exp(j*(0:N-1)'*pi/6);
y1=a1*s1.';
y2=a2*s2.';
for i=1:L
y(i,:)=y1(i,:)+y2(i,:)+10^(-SNR/20)*v(i); %得到y(t)
end
R=y*y'/N; %相关阵近似值
[V,D]=eig(R); %求特征值和特征矢量
unarranged_vaLue=diag(D);
for n=1:L %对特征值进行排序
for k=n:L-1
if unarranged_vaLue(n)<unarranged_vaLue(k+1) %如果第n个特征值小于之后的某个特征值
middLe_vaLue=unarranged_vaLue(k+1); %将第k+1个特征值赋给中间特征值
middLe_vector=V(:,k+1); %将第k+1列特征向量赋给中间向量
unarranged_vaLue(k+1)=unarranged_vaLue(n); %将第n个特征值赋给k+1特征值
V(:,k+1)=V(:,n); %将第n列特征向量赋给第k+1列
unarranged_vaLue(n)=middLe_vaLue; %将中间特征值赋给第n个特征值
V(:,n)=middLe_vector; %将中间特征向量赋给第n列特征向量
end
end
end
for n=1:L-2
noisespace(:,n)=V(:,L+1-n); %求噪声子空间
end
E = noisespace * noisespace';
for k=1:length(Thita)
Music1(k) = 1 / (Atheta(:,k)' *E * Atheta(:,k));
end
figure;
plot(Thita*180/pi,abs(Music1));
axis([-100,100,0,50]);
title(['Music,SNR=',num2str(SNR)]);
xlabel('空间方位角(单位:度)'),ylabel('幅度');
grid
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -