Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab中的MVDR波束形成器_Matlab_Signal Processing - Fatal编程技术网

Matlab中的MVDR波束形成器

Matlab中的MVDR波束形成器,matlab,signal-processing,Matlab,Signal Processing,我正在尝试使用Matlab中的信号处理工具箱进行波束形成,但我的结果并不像我预期的那样 我有一个由8个各向同性天线(近似线性)组成的阵列,接收来自多个方向的信号。然后,我使用相位延迟和MVDR函数在8根天线上对时间序列数据进行波束形成 当我绘制两个波束形成器的波束图时,相位延迟是我所期望的——一个主瓣,然后是周围的副瓣。然而,MVDR波束模式在我试图观察的波束角度没有主瓣 我的MVDR波束形成器代码如下。(注意,相位延迟代码相同,但代码中的“phased.PhaseShiftBeamformer

我正在尝试使用Matlab中的信号处理工具箱进行波束形成,但我的结果并不像我预期的那样

我有一个由8个各向同性天线(近似线性)组成的阵列,接收来自多个方向的信号。然后,我使用相位延迟和MVDR函数在8根天线上对时间序列数据进行波束形成

当我绘制两个波束形成器的波束图时,相位延迟是我所期望的——一个主瓣,然后是周围的副瓣。然而,MVDR波束模式在我试图观察的波束角度没有主瓣

我的MVDR波束形成器代码如下。(注意,相位延迟代码相同,但代码中的“phased.PhaseShiftBeamformer”替换为“phased.MVDRBeamformer”

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 

如果你能把这个问题发到,那将是更有益的。如果你能把这个问题发到,那将是更有益的