主要内容

数组模式合成第三部分:深入学习

这个例子展示了如何设计和训练一个卷积神经网络(CNN)来计算元素权重产生所需的模式。

介绍

模式合成阵列处理的是一个重要的话题。数组权重帮助塑造传感器阵列的光束模式匹配所需的模式。传统上,模式合成算法往往借用滤波器设计技术由于空间信号处理之间的相似性和频域信号处理。许多这样的天线阵综合算法都包含在我们的第一部分的例子。不幸的是,这些算法往往不是很灵活,以适应不同类型的约束。因此,作为一个更一般的解决方案,各种优化技术用于生产所需的模式。一些常用的解决优化天线阵综合介绍了第二部分的例子。虽然文中针对算法是非常灵活的,对于大型阵列,它需要一段时间收敛到最优解。这陷阱很难给定梁形式实时模式。

深度学习在计算机视觉技术已经看过很多成功和自然语言处理。尽管深入学习网络需要训练有素的脱机;一次训练,由此产生的网络可以用来实现实时性能。因此,深入学习网络可以提供一个解决方案实时模式合成,建议[1]。

数组的定义

考虑一个圆形平面阵列半径3米。元素与元素位于一个矩形网格间距0.5米。

r = 3;δ= 0.5;λ= 1;[pos N] = getCircularPlanarArrayPositions (rδλ);

下面的阵列孔径的样子。数组与侧向- z平面与x轴。

蚂蚁= phased.ConformalArray (“ElementPosition”、pos);viewArray(蚂蚁,“标题”,圆形平面阵列孔径的)


               

合成模式与优化

天线阵综合解释的第二部分的示例中,优化技术可用于推导模式合成权重。假设我们想要有一个模式的主瓣是方位角和仰角0度。模式也应该满足以下约束条件:

  • 最大化的方向性

  • 抑制干扰30 dB mainlobe以下

  • 使旁瓣水平在-20年和20度方位或海拔17 dB mainlobe以下

%定义主瓣方向ang_d = (0, 0);%定义干扰方向和相应的预期的反应ang_i = [12 10; 13 10];r_i = (-30 - -30);%定义区域旁瓣水平低于期望水平ang_c_az_grid = [20:0.5: -10 10:0.5:20] + ang_d (1);ang_c_el_grid = [20:0.5: -10 10:0.5:20] + ang_d (2);[ang_c_az, ang_c_el] = meshgrid (ang_c_az_grid ang_c_el_grid);ang_c = [ang_c_az (:)。”; ang_c_el (:)。”);ang_c = setdiff (ang_c。”、ang_i。”“行”)”。;r_c_th = -17;r_c = r_c_th *的(1、大小(ang_c 2));

约束定义,我们可以使用优化解算器导出权重数组可以提供我们所需的模式。在优化求解的详细信息,请参阅阵列模式合成第二部分例子。

%计算权重使用优化解决抽搐;[w_op, Rn] = helperPatternSynthesis (pos、ang_d [], [], [ang_i ang_c], [r_i r_c]);
找到最优解。
t = toc;

结果显示模式

az_plot = 90:0.25:90;el_plot = 90:0.25:90;w = w_op (1: N) + 1我* w_op (N + 1:2 * N);pat_opt = computePattern (pos, az_plot el_plot w);plotPattern (az_plot el_plot pat_opt,“优化”);

我们可以测量这个模式通过测量的质量是否产生的模式匹配的要求。

[d intdb sllpct] = measurePattern (pat_opt、ang_d ang_i, ang_c, az_plot, el_plot, r_c_th, Rn, w);d_max = pow2db(4 *π* N ^ 2 / abs(总和(Rn,“所有”)));指标= [“方向性(dBi)”;“干扰抑制(dB)”;“旁瓣要求比例”];测量= {d; intdb; sllpct};要求= {d_max; r_i; 0};metrictab =表(指标、测量要求)
metrictab =3×3表指标测量要求______________________________________ _____________________ ___________”指向性(dBi)”{[ 22.2814]} {[22.1824]} "Interference Suppression (dB)" {[-29.3295 -30.6141]} {[-30 -30]} "Sidelobe Over Requirement Percentage" {[ 0]} {[ 0]}

               

我们可以看到,结果指标非常好。然而,它确实需要一些时间来计算权重。

流(的权重计算时间:% f秒。\ n 't);
权重计算时间:14.607490秒。

深入学习网络

执行模式合成使用深度学习,我们创建一个卷积神经网络(CNN)[1]中概述。光束模式定义一系列的方位角和高度角。因此,这种模式可以表示成一个形象和我们的输入层图像作为输入。输出权重产生这样一个模式。

层= [imageInputLayer (721 721),“归一化”,“zerocenter”)convolution2dLayer ([64], 1) batchNormalizationLayer reluLayer convolution2dLayer ([64128], 1) batchNormalizationLayer reluLayer convolution2dLayer ([128128], 1) batchNormalizationLayer reluLayer convolution2dLayer ([128128], 1) batchNormalizationLayer reluLayer convolution2dLayer ([128128], 1) batchNormalizationLayer reluLayer fullyConnectedLayer (2000) batchNormalizationLayer reluLayer fullyConnectedLayer (2000) batchNormalizationLayer reluLayer fullyConnectedLayer (224) regressionLayer ()];analyzeNetwork(层);

helperPatternSynthesisDLAnalysis.PNG

训练和测试数据合成

训练和测试网络,我们可以生成模式和随机mainlobe干涉位置。我们将通过优化求解得到最优权重,然后使用派生模式作为输入来计算权重通过网络和希望得到的权重匹配最优权重。

dataURL =“https://ssd.mathworks.com/supportfiles/phased/data/ArraySynthesisDLData.zip”;saveFolder = tempdir;dataDir =“datasetSmallE”;zipFile = fullfile (saveFolder,“ArraySynthesisDLData.zip”);如果~存在(zipFile“文件”)websave (zipFile dataURL);%解压数据解压缩(zipFile tempdir)结束signalDs = signalDatastore (fullfile (saveFolder dataDir),“ReadFcn”,@readTrainAndValFile);signalDs = shuffle (signalDs);

将数据集分为训练和验证集

[trainInd, valInd testInd] = dividerand(1:元素个数(signalDs.Files), 0.8, 0.1, 0.1);trainDs =子集(signalDs trainInd);validDs =子集(signalDs valInd);testDs =子集(signalDs testInd);testDs。ReadFcn = @readTestFile;%的文件数量用于培训、验证和测试流(数量的训练、验证和测试数据% d % d % d,分别。,元素个数(trainDs.Files),元素个数(validDs.Files),元素个数(testDs.Files));
数量的训练、验证和测试数据是778年,97年和97年,分别。

列车网络的

现在我们可以训练网络

trainNetworkNow = false;如果trainNetworkNow选项= trainingOptions (“亚当”,“MaxEpochs”30岁的“GradientDecayFactor”,0.9,“SquaredGradientDecayFactor”,0.999,“InitialLearnRate”1 e - 3,“详细”假的,“阴谋”,“训练进步”,“LearnRateSchedule”,“没有”,“ValidationData”validDs,“ValidationFrequency”3);% #好< UNRCH >网= trainNetwork (trainDs层,选项);其他的负载(fullfile (saveFolder“helperPatternSynthesisDL.mat”),“净”);结束

测试训练网络

早期使用模式派生的部分,让我们看看如果经过训练的网络可以提供一个sastifying模式

抽搐;w_dl =双(预测(净,(pat_opt,“int8”)));t_dl = toc;w = w_dl (1: N) + 1我* w_dl (N + 1:2 * N);w = w /规范(arrayfactor (pos ang_d w));pat_dl = computePattern (pos, az_plot el_plot w);plotPattern (az_plot el_plot pat_dl,“深度学习”);

[d intdb sllpct] = measurePattern (pat_dl、ang_d ang_i, ang_c, az_plot, el_plot, r_c_th, Rn, w);d_max = pow2db(4 *π* N ^ 2 / abs(总和(Rn,“所有”)));指标= [“方向性(dBi)”;“干扰抑制(dB)”;“旁瓣要求比例”];测量= {d; intdb; sllpct};要求= {d_max; r_i; 0};metrictab =表(指标、测量要求)
metrictab =3×3表指标测量要求______________________________________ _____________________ ___________”指向性(dBi)”{[ 22.1074]} {[22.1824]} "Interference Suppression (dB)" {[-20.5114 -20.8268]} {[-30 -30]} "Sidelobe Over Requirement Percentage" {[ 0]} {[ 0]}
流(的权重计算时间:% f秒。\ n ',t_dl);
权重计算时间:5.339215秒。

我们可以看到预测模式提供了良好的方向性和旁瓣抑制的结果。这不是实现干扰抑制。我们可以改善这种更多的培训数据。

结论

这个例子展示了如何创建和火车CNN执行模式合成对于一个给定的数组。虽然深学习网络可以生成模式合成权重的速度快得多,它有自己的缺点。例如,网络需要大量的训练数据。此外,网络是特定于一个特定的阵列几何。因此,如果数组形成变化,需要重新训练网络。

引用

[1]比安科,西蒙,莫里吉奥Feo说,保罗·那波里塔诺,阿尔贝托Raimondi, Pietro Vinetti乔凡尼•佩崔格利亚。“AESA使用深度学习的自适应波束形成。”学报2020年IEEE雷达会议,2020年。

支持文件

定义数组

函数[pos N] = getCircularPlanarArrayPositions(半径、δλ)N =圆(半径/δ* 2);htemp =分阶段。(n,三角洲,“格子”,“矩形”);pos = getElementPosition (htemp) /λ;elemToRemove =总和(pos。^ 2) >半径^ 2;pos (:, elemToRemove) = [];N =大小(pos、2);结束

计算模式

函数帕特= computePattern (pos、az_plot el_plot, w)帕特= 0(元素个数(el_plot),元素个数(az_plot));m = 1:元素个数(el_plot)帕特(m:) = mag2db (abs (arrayfactor (pos, [az_plot; el_plot (m) *的(大小(az_plot))], w)));结束结束

情节模式

函数plotPattern (az_plot el_plot,帕特,algstr)冲浪(az_plot el_plot,帕特,“EdgeColor”,“没有”);colorbar;视图(0,90);包含(的方位(度));ylabel (的海拔(度));标题(sprintf (“梁通过% s模式”algstr));轴结束

测量模式

函数[d intdb sllpct] = measurePattern (pat, ang_d ang_i, ang_c, az_plot, el_plot, sllbar, Rn, w) az_step =意味着(diff (az_plot));el_step =意味着(diff (el_plot));d =帕特(sub2ind(大小(pat), (ang_d (1) -az_plot (1)) / az_step + 1, (ang_d (2) -el_plot (1)) / el_step + 1)) +pow2db(4 *π)-pow2db (abs (w * Rn * w));intdb =帕特(sub2ind(大小(pat), (ang_i (: 1) -az_plot (1)) / az_step + 1, (ang_i (2:) -el_plot (1)) / el_step + 1)) -麦克斯(pat, [],“所有”);slldb =帕特(sub2ind(大小(pat), (ang_c (: 1) -az_plot (1)) / az_step + 1, (ang_c (2:) -el_plot (1)) / el_step + 1)) -麦克斯(pat, [],“所有”);sllpct = (slldb > sllbar)之和/元素个数(slldb);结束

读取数据文件

函数dataOut = readTrainAndValFile(文件名)数据= struct2cell(负载(文件名));数据={1}的数据;dataOut{1} ={1}数据;dataOut{2} =正常化(数据{2})';结束函数dataOut = readTestFile(文件名)数据= struct2cell(负载(文件名));数据={1}的数据;dataOut =数据;结束
Baidu
map