技术文章

从指定方向图合成阵列:优化工作流程

作者 Honglei Chen and Rick Gentile, MathWorks


在那些使用传感器阵列的应用中,例如WLAN、LTE和5G无线通信系统、相控阵雷达和声信号波束成形系统,设计通常从满足某些性能标准的阵列方向图开始。这些标准包括诸如主瓣方向性和宽度、零位置和旁瓣电平之类的参数。 

由于阵列通常包含数百甚至数千个阵元,因此可能需要多次迭代才能在产生期望方向上收敛到一个所需的方向图。迭代需要时间,并且当需要考虑多个参数时难以彻底完成。

优化技术可以极大地提高阵列分析过程的效率。您可以通过一系列权重和阵元位置来评估一种方向图,并且可以通过自动过程的每次迭代来评估已生成的方向图与期望方向图之间的差异。

本文介绍了一种工作流程,该工作流程使用Phased Array System Toolbox™和Optimization Toolbox™和Global Optimization Toolbox的优化技术来提供解决方案。这一工作流程可以适应您自己的应用。

此示例中使用的代码可下载

设计选项和约束

为确保解决方案满足设计指标,我们必须了解设计选项和优化过程中需要考虑的约束条件。

影响阵列形式的参数包括阵列中阵元的数量、阵元的晶格结构和阵列形式。在阵列内,与每个阵元相关联的参数还确定了波束方向图特征,包括应用于每个阵元(幅度或相位)的权重和阵元在阵列内的位置。这些参数可以用作“控制旋钮”,满足您想要的性能目标。

对于多元阵列,设计的自由度将根据最终应用的成本和复杂性而变化。例如,在最基本的系统中,仅幅度权重可用。然而,许多架构支持阵元或子阵列的复数加权,可提供幅度和相位控制。通过这种类型的架构,波束可以通过电子方式转向和成形(图1)。

图1灵活的相控阵架构。

图1灵活的相控阵架构。

设计中的阵列形式通常由终端系统形状因子的约束驱动,但各阵元之间的间距可以是灵活的。然而,这种灵活性通常受到实际制造条件的限制。例如,各阵元不能太靠近,否则将影响阵列的有效性。

为了说明如何将这些选项和约束纳入优化工作流程,我们将提供两个示例。在第一个示例中,我们使用具有均匀间距的8阵元线阵来生成一组阵元权重,重点是匹配已知方向图。在第二个示例中,我们构建了一个面阵,其中阵元权重和阵元位置收敛,以实现一组阵列性能指标。也就是说,我们从权重扩展到阵元位置,展示如何通过将约束条件置于优化问题中,来塑造方向图以满足要求。

示例1:仅优化权重

在这个例子中,我们将完成以下步骤(图2):

  1. 确定期望方向图
  2. 开发一个代价函数,尽可能缩小起始方向图和期望方向图之间的距离
  3. 运行优化
  4. 使用生成的权重查看方向图,并将其与期望方向图进行比较
图2示例1的工作流程步骤。

图2示例1的工作流程步骤。

我们从期望的2D方向图Beam_d开始,该方向图具有一组特定的方位角和仰角。然后构建一个成本函数,缩小期望方向图Beam_d与加权向量weight_o生成的方向图之间的距离。优化的初始条件基于均匀加权。此方向图包含在以下代码的目标函数中。

%% Set up optimization 

objfun = @(w)norm(w'*stvmat-Beam_d);     % Define objective function used in fmincon
                                              % Goal is to minimize the norms between
                                              % the desired pattern and
                                              % resulting pattern

weights_i = ones(N,1);                        % Initial setting for array amplitudes
                                              % Serves as starting point to
                                              % optimization

weights_o = fmincon(objfun,weights_i,[],[],[],[],zeros(N,1),ones(N,1));

                                             % fmincon takes in the objfun,
                                             % the initial weights, and 
                                             % upper and lower bounds of the weights   
                                             % In this example,
                                             % 0 <= weights_o <= 1
                                             % weights_o holds the weights
                                             % which can be used to create
                                             % a beam that matches our
                                             % desired pattern                                        
                                             

因为我们正在尝试确定可以缩小两个波束方向图之间距离的阵元权重,所以我们将使用Optimization Toolbox的fmincon函数,该函数包含目标函数、权重的初始值和约束。初始加权值设置为1。约束是分数加权值的最小值和最大值,我们将其定义为介于0和1之间。

当我们调用fmincon时,我们提供了目标函数的句柄,它可以区分一开始使用的方向图与迭代细化权重时生成的方向图。优化结束时,我们可以得到一组权重,将其应用于数组阵元时会与期望方向图匹配。图3中的曲线显示了方位角上期望方向图和合成方向图的幅度。

图3优化后期望方向图和合成方向图的比较。

图3优化后期望方向图和合成方向图的比较。

示例2:优化权重和阵元位置

在此示例中,我们将完成以下步骤(图4):

  1. 识别方向图属性
  2. 定义约束,确保系统可以实现
  3. -开发一个客观(成本)函数,得到所需“方向”的方向图属性
  4. 运行优化
  5. 将优化的方向图与期望方向图进行比较
图4示例2的工作流程步骤。

图4示例2的工作流程步骤。

请注意,与示例1只控制阵元的幅度权重不同,这种设计更复杂,具有更多的阵列阵元。我们现在要控制每个阵元的幅度、相位和2D位置。我们的优化目标是降低方向图的最大旁瓣电平。

由于此示例具有许多局部最优解且目标非光滑,因此我们将使用Global Optimization Toolbox的patternsearch求解器。当目标光滑时,globalsearch可能是更好的选择。

与前面的示例一样,我们需要确保优化过程计算出的阵元位置间隔不会过于紧密。我们将为幅度和相位设置相同的最小和最大范围。

在此示例中,我们的自由度为100:除了25个幅度值和25个相位值(每个阵元一个)之外,还有50个y-z位置来描述25个阵元位置。每个参数的下限(lb)和上限(ub)值包含在100个阵元的MATLAB®向量中,其中向量元素1至25表示(yz阵列的)初始y位置,而向量元素26至50表示初始z位置。

图5左侧的阵列显示了间隔均匀的阵元的初始位置。对于y-z平面阵元位置的下限和上限,我们使用(±0.24 * λ)均匀矩形阵列起点的间距建立网格(图5,右)。

图5左图:均匀线性阵列(5x5个阵元)。右图:每个阵元周围对应的“约束框”。

图5左图:均匀线性阵列(5x5个阵元)。右图:每个阵元周围对应的“约束框”。

向量元素51至75表示初始幅度值,向量元素76至100表示初始相位值。该向量的每个部分包括25个参数,对应5x5阵列大小。

我们首先使用Phased Array System Toolbox建立一个5x5阵列,从均匀间隔的阵元开始。然后,我们使用ConformalArray构造来更改每个阵元的位置。我们可以随着整个优化过程中位置的变化更新我们的模型。

请注意,我们在此阵列模型中使用了理想的余弦天线阵元。我们也可以使用Antenna Toolbox™中的方向图或外部测量的方向图。

function [Val] = Position_Objective_optim_cost(Position_Taper)

% Define constants

lmbda = physconst('lightspeed')/1.1e9;
azimuth = -180:2:180; 
elevation = -90:2:90; 

% Creating a cosine Antenna Element
handle_Ant =phased.CosineAntennaElement('FrequencyRange',[1.0e9 1.2e9],...
    'CosinePower',[1.5 2.5]);

% Extracting taper avalues from the input vector
Taper_value = Position_Taper(51:75) + 1i.*Position_Taper(76:100);

% Creating a Conformal Array with cosine elements.
% Conformal array will be limited to a single plane
handle_Conf_Array = phased.ConformalArray('Element',handle_Ant,...
    'ElementPosition',[zeros(1,25);Position_Taper(1,1:25);Position_Taper(1,26:50)],...
    'Taper',Taper_value);

建立了阵列后,我们就可以确定方位角和仰角的波束方向图。然后,我们可以使用此数据来提取与方向图相关的关键指标。我们将重点关注旁瓣,但也可以考虑许多其他参数,例如主瓣增益或3dB波瓣宽度。

% Extracting Azimuth and Elevation Patterns
[fieldval_az] = patternAzimuth(handle_Conf_Array,1.1e9,0,'Azimuth',azimuth,'Type','Power');
[fieldval_el] = patternElevation(handle_Conf_Array,1.1e9,0,'Elevation'>,elevation,'Type'>,'Power');

% Replacing any inf and zeros with a very low value
fieldval_az(isinf(fieldval_az)) = -400;
fieldval_az((fieldval_az == 0)) = -400;

% Genarating a polar plot with the extracted data
% the polar plot method "FindLobes" is used to fetch the required 
% information about the beam.

handle_polar_az = polarpattern(azimuth,mag2db(fieldval_az));
lobe_info = findLobes(handle_polar_az);

% Fetching the Sidelobe Magnitude 
% Magnitude of the azimuth beam pattern
SL_Mag_az = lobe_info.sideLobes.magnitude;

建立目标函数

设置优化参数,实现5x5平面阵列的方位角和仰角的性能。构建方向图,减少旁瓣电平的幅度。其他类似的例子可能包括增加主瓣的幅度或减小3dB带宽。

在随后的代码中,我们使用方位角和仰角旁瓣的总和。我们还增加了一个方位角和仰角旁瓣电平之间的绝对差值,以确保它们达到峰值时是接近的。因为优化引擎可以最小化目标函数,所以每次迭代此函数时,Val都为最小值。您可根据特定要求调整这些参数。

% Extracting Azimuth and Elevation Patterns
[fieldval_az] = patternAzimuth(handle_Conf_Array,1.1e9,0,'Azimuth',azimuth,'Type','Power');
[fieldval_el] = patternElevation(handle_Conf_Array,1.1e9,0,'Elevation'>,elevation,'Type'>,'Power');

% Replacing any inf and zeros with a very low value
fieldval_az(isinf(fieldval_az)) = -400;
fieldval_az((fieldval_az == 0)) = -400;

% Genarating a polar plot with the extracted data
% the polar plot method "FindLobes" is used to fetch the required 
% information about the beam.

handle_polar_az = polarpattern(azimuth,mag2db(fieldval_az));
lobe_info = findLobes(handle_polar_az);

% Fetching the Sidelobe Magnitude 
% Magnitude of the azimuth beam pattern
SL_Mag_az = lobe_info.sideLobes.magnitude;

%%
% Summing the azimuth and elevation values
% Adding term to minimize the difference between the Az and El patterns

SL_Mag = SL_Mag_az + SL_Mag_el + abs(SL_Mag_az-SL_Mag_el);

% Computing the function value from the SL_Mag 
Val = SL_Mag;

图6显示了所得到的方位面中的极坐标图。

图6方位面中的极坐标图案显示起点图案(蓝色线)和优化后的图案(橙色线)。

图6方位面中的极坐标图案显示起点图案(蓝色线)和优化后的图案(橙色线)。

图7显示了仰角面的相应视图。

图7仰角面中的极坐标图案显示起点图案(蓝色线)和优化后的图案(橙色线)。

图7仰角面中的极坐标图案显示起点图案(蓝色线)和优化后的图案(橙色线)。

使用通过优化函数的多次迭代返回的权重和阵元位置生成新的方向图。图8显示了得到的阵元位置和波束方向图。

图8优化后得到的阵列和波束方向图。

图8优化后得到的阵列和波束方向图。

扩展示例

在这些示例中,所有分析都在单个频率值下完成。实际上,系统必须在一系列频率上工作。

可以将同样的优化技术应用于各种频率的操作。例如,针对宽带应用,我们可以研究整个频带内等间隔的多个频率。然后决定应用的哪个方面最重要。例如,最好针对特定组合进行优化,并基于该组合选择定位。所有其他场景只需使用加权即可提供“尽力而为”的服务。

如果认为所有频率组合都拥有特定性能要求更重要,则可以相应地调整优化过程。还可以扩展优化过程,在一组导向矢量上构建最佳子阵列架构。

除了扩展优化以覆盖更宽的频率范围外,还可以将相移量化效果添加到Phased Array System Toolbox模型中,确保终端系统的行为与仿真结果的相同。这对优化结果的构建来说非常重要。

可以通过优化技术实现期望的波束性能,并以类似的方法设计构建在多个平面上的共形阵列。

鸣谢

作者在此感谢Jegan Mani对本文的贡献。此外,还要感谢Derya Ozyurt的支持。

2017年发布 - 93102v00

查看文章,了解相关功能

查看文章,了解相关行业