MVDR算法matlab程序
clc
clear all
close all
%% 常量定义
Freqs=; %工作频率
c=3e8; %光速
lamda=c/Freqs; %波长
,
d=*lamda; %单元间距
M=16; %天线阵元数
fs=2e6; %采样频率
pd=10; %快拍数
%% 模型建立
%--------------第一个干扰模型--------------------thetaJ1=20*pi/180; %干扰方向
<
FreqJ1=5e5; %第一个干扰的频率J1NR=sqrt(10^(60/10));
J1one=J1NR*exp(j*(2*pi*FreqJ1*(1:1:pd)/fs)); %1*pd %--------------第二个干扰模型--------------------ThetaJ2=60*pi/180; %干扰方向
FreqJ2=6e5; %第二个干扰的频率J2NR=sqrt(10^(60/10));
J2one=J2NR*exp(j*(2*pi*FreqJ2*(1:1:pd)/fs)); %1*pd 、
%--------------信号模型--------------------
ThetaS=30*pi/180;
FreqS=7e5;
SNR=sqrt(10^(40/10));
Sone=SNR*exp(j*(2*pi*FreqS*(1:1:pd)/fs)); %1*pd
%--------------空域处理-------------------------
I1=zeros(M,1);
I2=zeros(M,1);
>
IS=zeros(M,1);
for n=1:M
I1(n)=exp(j*2*pi*(n-1)*d*sin(thetaJ1)/lamda); I2(n)=exp(j*2*pi*(n-1)*d*sin(ThetaJ2)/lamda); IS(n)=exp(j*2*pi*(n-1)*d*sin(ThetaS)/lamda);
end
J1=I1*J1one;
J1=J1.';
¥
J2=I2*J2one;
J2=J2.';
%------------产生噪声-------------------------
noise=sqrt(1/2)*randn(pd,M)+j*sqrt(1/2)*randn(pd,M);
%------------产生接收信号-------------------------
XX=J1+noise+J2;
%% MVDR算法
"
Rxx=zeros(M,M);
Rxx=(XX.'*(XX.')')/pd;%M*M维
detaS=IS;
Wmvdr=inv(Rxx)*detaS*inv(detaS'*inv(Rxx)*detaS); %MVDR 算法
%% 直线阵布阵
p=-pi/2:pi/180:pi/2;
for jj=1:1:length(p) %空间角度扫描
;
w_scan=zeros(M,1);
scan=p(jj);
for n=1:1:M
w_scan(n)=exp(j*2*pi*(n-1)*d*sin(scan)/lamda);
end%空间导向矢量 1*M Fmvdr(jj)=abs(Wmvdr'*w_scan);
end
%% 画出方向图
Fmax=max(max(Fmvdr));
Fa=Fmvdr./Fmax;
Fa=20*log10(Fa);
figure(1);
plot(180*p/pi,Fa,'b-')