阵列信号处理对角加载算法matlab程序

  • 格式:docx
  • 大小:14.91 KB
  • 文档页数:2

%----------对角加载(LSMI 和SMI)方向图-----------------------
%总结:这种算法主要给出了一种对角加载值的计算方法,对误差具有一定的稳健性,研究发现
%当数据协方差矩阵中含有信号分量会影响算法的性能。

clear all;clear all;clc;
ratio_d_and_w=0.5;
N_array=20;%阵列数
N_signal=60;% 样本数
ang1=0*pi/180;%所需信号的方向
SNR=5;%信噪比
ASd=sqrt(10.^(SNR/10));
ang2=40*pi/180;%干扰信号的方向
INR=45;%干噪比
ASi=sqrt(10.^(INR/10));
Sd=ASd*(randn(1,N_signal)+i*randn(1,N_signal));%Sd为所需信号
Si=ASi*(randn(1,N_signal)+i*randn(1,N_signal));%Si为干扰信号
Ni=randn(N_array,N_signal)+i*randn(N_array,N_signal);%Ni内噪声
Desired_Array=zeros(N_array,N_signal);
Interferential_Array=zeros(N_array,N_signal);
for LL=1:N_signal
Interferential_Array(:,LL)=Si(LL)*test(ang2,N_array,ratio_d_and_w).';
Desired_Array(:,LL)=Sd(LL)*test(ang1,N_array,ratio_d_and_w).';
end
X=zeros(N_array,N_signal);
X= Interferential_Array +Ni;
Rx=X*X'/N_signal;
mm=std(diag(Rx));%对角加载值的确定下限
%mm=trace(Rx)/N_array;%对角加载值的确定上限
R1=Rx+mm*eye(size(Rx));
R=inv(R1);
A_est=test(ang1,N_array,ratio_d_and_w);
C= A_est;
w_SMI=R*C/(C'*R*C);%对角加载
w_LSMI=inv(Rx)*C/(C'*inv(Rx)*C);%普通的Capon算法
x_axis=-90:0.5:90;
ang=(x_axis)*pi/180;
for j=1:length(ang)
steer=test(ang(j),N_array,ratio_d_and_w);
f1(j)=w_SMI'*steer;
f2(j)=w_LSMI'*steer;
end
f1=10*log10(abs(f1)/(max(max(abs(f1)))));
f2=10*log10(abs(f2)/(max(max(abs(f2)))));
subplot(2,1,1);
plot(x_axis,f1),grid on;hold on;
plot(x_axis,f2,'--'),grid on;
xlabel('theta/°');
ylabel('F/dB');
title('(a)');
%********************************************** X=Desired_Array +Interferential_Array +Ni;
Rx=X*X'/N_signal;
mm=std(diag(Rx));%对角加载值的确定下限
%mm=trace(Rx)/N_array;%对角加载值的确定上限
R1=Rx+mm*eye(size(Rx));
R=inv(R1);
A_est=test(ang1,N_array,ratio_d_and_w);
C= A_est;
w_SMI=R*C/(C'*R*C);%对角加载
w_LSMI=inv(Rx)*C/(C'*inv(Rx)*C);%普通的Capon算法x_axis=-90:0.5:90;
ang=(x_axis)*pi/180;
for j=1:length(ang)
steer=test(ang(j),N_array,ratio_d_and_w);
f1(j)=w_SMI'*steer;
f2(j)=w_LSMI'*steer;
end
f1=10*log10(abs(f1)/(max(max(abs(f1)))));
f2=10*log10(abs(f2)/(max(max(abs(f2)))));
subplot(2,1,2);
plot(x_axis,f1),grid on;hold on;
plot(x_axis,f2,'--'),grid on;
xlabel('theta/°');
ylabel('F/dB');
title('(b)');。