Matlab中的MVDR波束形成器
我正在尝试使用Matlab中的信号处理工具箱进行波束形成,但我的结果并不像我预期的那样 我有一个由8个各向同性天线(近似线性)组成的阵列,接收来自多个方向的信号。然后,我使用相位延迟和MVDR函数在8根天线上对时间序列数据进行波束形成 当我绘制两个波束形成器的波束图时,相位延迟是我所期望的——一个主瓣,然后是周围的副瓣。然而,MVDR波束模式在我试图观察的波束角度没有主瓣 我的MVDR波束形成器代码如下。(注意,相位延迟代码相同,但代码中的“phased.PhaseShiftBeamformer”替换为“phased.MVDRBeamformer”Matlab中的MVDR波束形成器,matlab,signal-processing,Matlab,Signal Processing,我正在尝试使用Matlab中的信号处理工具箱进行波束形成,但我的结果并不像我预期的那样 我有一个由8个各向同性天线(近似线性)组成的阵列,接收来自多个方向的信号。然后,我使用相位延迟和MVDR函数在8根天线上对时间序列数据进行波束形成 当我绘制两个波束形成器的波束图时,相位延迟是我所期望的——一个主瓣,然后是周围的副瓣。然而,MVDR波束模式在我试图观察的波束角度没有主瓣 我的MVDR波束形成器代码如下。(注意,相位延迟代码相同,但代码中的“phased.PhaseShiftBeamformer
array = phased.ConformalArray('ElementPosition',[ys;xs;zeros(1,8)],...
'ElementNormal',[normal_az; normal_el]);
angle_of_arrival = [theta;0];
%Capon beamformer
beamformer = phased.MVDRBeamformer('SensorArray',array,...
'OperatingFrequency',f0,...
'Direction',angle_of_arrival,'WeightsOutputPort',true);
[y,w] = beamformer(time_series_for_antennas);
产生的光束模式如下图所示。绿色十字表示光束的方向。相位延迟函数用于生成顶部图和底部图的MVDR函数
为了尝试理解这个问题,我在mathworks网站上重新创建了一个简单的示例,以查看信号从单个方向传入时的结果(代码见下文)。在这个示例中,与我的问题一样,当波束形成角度在0到180度之间时,主瓣并不突出
有人对此有什么理由吗
clear;
close all;
clc;
t = [0:.1:200]';
fr = .01;
xm = sin(2*pi*fr*t);
c = physconst('LightSpeed');
fc = 300e6;
rng('default');
incidentAngle = [45;0];
array = phased.ULA('NumElements',5,'ElementSpacing',0.5);
x = collectPlaneWave(array,xm,incidentAngle,fc,c);
noise = 0.1*(randn(size(x)) + 1j*randn(size(x)));
rx = x + noise;
figure(1)
count=1; % Used to initialize the counter
myVideo = VideoWriter('beamform_steering_vector.avi');
myVideo.FrameRate = 5;
open(myVideo)
for ang=-180:180 % Loop over the video
beamformer = phased.MVDRBeamformer('SensorArray',array,...
'PropagationSpeed',c,'OperatingFrequency',fc,...
'Direction',[ang;0],'WeightsOutputPort',true);
[y,w] = beamformer(rx);
[weights,azimuthal,elevation] = pattern(array,fc,[-180:180],0,'PropagationSpeed',c,...
'Weights',w,'CoordinateSystem','rectangular',...
'Type','powerdb');
plot(azimuthal, weights)
hold on
plot(azimuthal(azimuthal==ang),weights(azimuthal==ang),'bx')
hold off
title(ang)
drawnow; % This just shows you the video as it makes it
M(count) = getframe(gcf); % This captures the video frames
count=count+1; %This basically just counts the number of frames
end
如果你能把这个问题发到,那将是更有益的。如果你能把这个问题发到,那将是更有益的