资源描述:
《阵列信号处理对角加载算法matlab程序.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、%----------对角加载(LSMI和SMI)方向图-----------------------%总结:这种算法主要给出了一种对角加载值的计算方法,对误差具有一定的稳健性,研究发现%当数据协方差矩阵中含有信号分量会影响算法的性能。clearall;clearall;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)
2、);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);forLL=1:N_signalInterferential_Array(:,LL)=Si
3、(LL)*test(ang2,N_array,ratio_d_and_w).';Desired_Array(:,LL)=Sd(LL)*test(ang1,N_array,ratio_d_and_w).';endX=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
4、_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;forj=1:length(ang)steer=test(ang(j),N_array,ratio_d_and_w);f1(j)=w_SMI'*steer;f2(j)=w_LSMI'*steer;endf1=10*log10(abs(f1)/(max(max(abs(f1)))));f2=10*log10(abs(f2)/(max(max(abs(f2)
5、))));subplot(2,1,1);plot(x_axis,f1),gridon;holdon;plot(x_axis,f2,'--'),gridon;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*e
6、ye(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;forj=1:length(ang)steer=test(ang(j),N_array,ratio_d_and_w);f1(j)=w_SMI'*steer;f2(j)=w_LSMI'*steer;endf1=10*log10(abs(f1)/(ma
7、x(max(abs(f1)))));f2=10*log10(abs(f2)/(max(max(abs(f2)))));subplot(2,1,2);plot(x_axis,f1),gridon;holdon;plot(x_axis,f2,'--'),gridon;xlabel('theta/°');ylabel('F/dB');title('(b)');