📄 mvdr.m
字号:
%function StandardLMS()
close all
clear;
clc;
Num_snap_shot=200; %有用信号长度
Num_element=7; %阵元数
rou=0.5; %阵元间距
SNR=10; %信噪比
Theta_im=[70 50 90 110 100 130];
% Theta_im=[70 50 90 110 150 130];
Theta_im=[70 50 90];
Theta_im=[70 55 85];
Theta_im=[70 60 80];
% Theta_im=[70 60 80 90 50];
Doa_signal_desired=Theta_im(1); %有用信号到达角
Doa_signal_interfere=Theta_im(2:end);
Num_int=length(Doa_signal_interfere);
signal_desired_steervector=SteerVectGen(Doa_signal_desired,Num_element,rou,'linear','arrayaxis');%有用信号导向矢量
signal_desired = sqrt(2)*randsrc(1,Num_snap_shot,[1 -1],1e6); % 有用信号数据
refSig=signal_desired;%参考信号
JNR=0;
JNR=sqrt(10.^(JNR/10)*2);
arrayOutput1=kron(signal_desired,signal_desired_steervector);%期望用户信号天线阵输出
arrayOutput2=0;
for kk=1:Num_int
signal_interfere = JNR*randsrc(1,Num_snap_shot,[1 -1],kk); %干扰信号数据
signal_interfere_steervector=SteerVectGen(Doa_signal_interfere(kk),Num_element,rou,'linear','arrayaxis');%干扰信号导向矢量
arrayOutput2=arrayOutput2+kron(signal_interfere,signal_interfere_steervector);
end
arrayOutput3=arrayOutput2+arrayOutput1;
arrayOutput=awgn((arrayOutput1).',SNR,'measured').';%加入白高斯噪声
X=arrayOutput+arrayOutput2;%在天线阵输出信号中加入干扰信号
%MVDR法求权值
Matrix_relative_X=X*X'/Num_snap_shot;
Gain_ctrl=10;
Matrix_relative_X=Matrix_relative_X+Gain_ctrl*eye(Num_element);%天线阵输出信号的协方差矩阵
% w=inv(Matrix_relative_X)*signal_desired_steervector/(signal_desired_steervector'...
% *inv(Matrix_relative_X)*signal_desired_steervector);%求权值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[Ux,Sx] = svd(Matrix_relative_X);
S_x=diag(Sx);
Rxinv=zeros(Num_element);
for ii=1:Num_element
Rxinv=Rxinv+1/S_x(ii)*Ux(:,ii)*Ux(:,ii)';
end
w=Rxinv*signal_desired_steervector/(signal_desired_steervector'...
*Rxinv*signal_desired_steervector);
%显示SMI算法的方向图
figure;
theta=0:180;
pat=SteerVectGen(theta,Num_element,rou,'linear','arrayaxis');
pat1=w'*pat;
pat1=20*log10(abs(pat1));
pat1=pat1-max(pat1);
% Adptive_linear_array(0,rou,Num_element,7, w);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
vir=2*Num_element-1;
SOI_steerK=SteerVectGen(Doa_signal_desired,vir,rou,'linear','arrayaxis');
Scan_mat=SteerVectGen(theta,vir,rou,'linear','arrayaxis');;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I_sig_sum=X;
I_sig_sum_con=flipud(conj(I_sig_sum(2:end,:)));
Z=[I_sig_sum_con;I_sig_sum];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Rzz=Z*Z'/Num_snap_shot;
Gain_ctrlz=mean(diag(Rzz));
Gain_ctrlz=10;
Rzz=Rzz+Gain_ctrlz*eye(vir);
% wz=inv(Rzz)*SOI_steerK/(SOI_steerK'...
% *inv(Rzz)*SOI_steerK);%求权值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[U,S] = svd(Rzz);
% S_f=diag(S+Gain_ctrl*eye(vir));
S_f=diag(S);
Rinv=zeros(vir);
for ii=1:vir
Rinv=Rinv+1/S_f(ii)*U(:,ii)*U(:,ii)';
end
wz=Rinv*SOI_steerK/(SOI_steerK'...
*Rinv*SOI_steerK);
wz=U(:,1:(Num_int+1))*U(:,1:(Num_int+1))'*wz;
pat3=wz'*Scan_mat;
pat3=20*log10(abs(pat3));
pat3=pat3-max(pat3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pat2=SOI_steerK'*Scan_mat;
pat2=20*log10(abs(pat2));
pat2=pat2-max(pat2);
%%%%%%%%%%%%
% figure
% plot(theta,pat2);
% title('MVDR算法');
% grid on;hold on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
Huang=12;
figure;
h_ap=axes('FontSize',Huang,'FontName','Times New Roman');
set(get(h_ap,'Xlabel'),'String','\it\theta\rm/deg','FontName','Times New Roman','FontSize',Huang);
set(get(h_ap,'Ylabel'),'String','波束图/dB','FontName','Times New Roman','FontSize',Huang);
kp(1)=line(theta,pat1,'color','r',...
'linewidth',2,'marker','none','markersize',8,'lineStyle','-');hold on;grid on;
kp(2)=line(theta,pat3,'color','b',...
'linewidth',2,'marker','none','markersize',8,'lineStyle','--');hold on;grid on;
legend(kp,'MVDR','非圆MVDR')
axis tight;box off;%grid off
hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -