2.1 信号的频率估计
仿真1:对目标信号的到达角进行估计
设一维均匀线阵的阵元数目为8,其间距为半波长,有3个目标信号的到达角分别为-30°,0°,20°,利用MVDR算法对该目标信号进行到达角估计,计算结果如下图所示。
读者可根据自己的需求,设置阵元数、目标信号个数及目标真实角度、信号的信噪比等条件进行实验。
2.2 MATLAB仿真代码
clc;
clear;
close all;
%% MVDR算法估计到达角
d_lambda = 0.5; % 阵元间距与波长比
Rx_Num = 8; % 接收天线阵元数
N = 1000; % 采样快拍数
sigNum = 3; % 信源数目
theta0 = [-30,0,20]; % 真实来波角度
snr = 10; % 信噪比
S = randn(sigNum,N)+1j*randn(sigNum,N); % 远场窄带信号
A = exp(1j*2*pi*d_lambda*sind(theta0).'*(0:Rx_Num-1)).'; % 导向矢量
X = A*S; % 接收信号
Y = awgn(X,snr,'measured'); % 添加噪声的接收信号
R = Y*Y'/N; % 接收数据的协方差矩阵
R_ = inv(R); % 协方差矩阵的逆矩阵
thetaScan = (-90:0.1:90); % 扫描角度范围
As = exp(1j*2*pi*d_lambda*sind(thetaScan).'*(0:Rx_Num-1)).';
num = 0;
P = zeros(1,length(thetaScan)); % 谱峰函数初始化
for ii = thetaScan
num = num+1;
P(num) = 1/(As(:,num)'*R_*As(:,num));
end
P = 10*log10(abs(P)/max(abs(P))); % 对谱峰函数进行归一化并取对数
figure;
plot(thetaScan,P,'b','LineWidth',1);xlabel('扫描角范围');ylabel('归一化幅度/dB');hold on
ylim = get(gca,'Ylim');
for jj = 1:sigNum
% 画出真实波达角的值进行对比
line([theta0(jj) theta0(jj)],[ylim(1) ylim(2)],'Color','r','LineStyle','--');
hold on;
end
legend('MVDR估计值','真实值');