В этом примере показано, как использовать Toolbox™ системы фазированного массива для решения некоторых задач синтеза массива.
В приложениях фазированного проектирования массива часто необходимо найти способ сужения откликов элементов так, чтобы результирующий массив удовлетворял определенным критериям производительности. Типичные критерии производительности включают расположение основного блока, нулевое расположение и уровни бокового блока.
Общим требованием при синтезировании диаграмм направленности является направление нуля к заданному направлению поступления. Это помогает подавлять помехи из этого направления и улучшает отношение сигнал/помеха. Помехи не всегда являются злонамеренными - радиолокационной системе аэропорта может потребоваться подавить помехи от близлежащей радиостанции. В этом случае положение радиостанции известно, и для устранения помех может быть использован алгоритм гашения боковой зоны.
Отмена сиделобе полезна для подавления помех, которые проникают через боковые обочины массива. В этом случае, поскольку направление помех известно, алгоритм прост. Сформируйте луч, который указывает в направлении интерференции, затем масштабируйте веса луча и вычитайте масштабированные веса из весов для диаграмм направленности, которые указывают в любом другом направлении взгляда. Этот процесс всегда помещает сильный нуль в направлении пересечения.
В следующем примере показано, как проектировать веса радара так, чтобы он сканировал от -30 до 30 градусов, но всегда сохранял нулевое значение 40 градусов. Предположим, что радар использует 10-элементную ULA, которая параллельна земле и что известные радиопомехи поступают от 40 градусов азимута.
c = 3e8; % signal propagation speed fc = 1e9; % signal carrier frequency lambda = c/fc; % wavelength thetaad = -30:5:30; % look directions thetaan = 40; % interference direction ula = phased.ULA(10,lambda/2); ula.Element.BackBaffled = true; % Calculate the steering vector for null directions wn = steervec(getElementPosition(ula)/lambda,thetaan); % Calculate the steering vectors for lookout directions wd = steervec(getElementPosition(ula)/lambda,thetaad); % Compute the response of desired steering at null direction rn = wn'*wd/(wn'*wn); % Sidelobe canceler - remove the response at null direction w = wd-wn*rn; % Plot the pattern pattern(ula,fc,-180:180,0,'PropagationSpeed',c,'Type','powerdb',... 'CoordinateSystem','rectangular','Weights',w); hold on; legend off; plot([40 40],[-100 0],'r--','LineWidth',2) text(40.5,-5,'\leftarrow Interference Direction','Interpreter','tex',... 'Color','r','FontSize',10)

На рисунке выше показаны результирующие диаграммы направленности для направлений взгляда от -30 градусов по азимуту до 30 градусов по азимуту с приращением на 5 градусов. Из увеличенного изображения ниже ясно, что независимо от того, где направление взгляда, диаграмма радиолокационного луча имеет сильное нулевое значение в направлении интерференции.
% Zoom xlim([30 50]) legend(arrayfun(@(k)sprintf('%d degrees',k),thetaad,... 'UniformOutput',false),'Location','SouthEast');

Другой частой проблемой при проектировании фазированной матрицы является соответствие желаемой диаграммы направленности спецификации, переданной пользователю. Часто требования выражаются в виде ширины луча и уровня боковины.
Процесс решения такой проблемы часто включает в себя следующие шаги:
Проверьте требуемый массив и определите геометрию массива;
Выберите размер массива на основе требуемой ширины луча;
Проектирование конусов на основе желаемого уровня боковины;
Выполните итерацию при настройке параметра, полученного на этапах 2 и 3, чтобы получить наилучшее совпадение.
Следующий пример иллюстрирует эти четыре шага. Сначала просмотрите требуемый рисунок, показанный на следующем рисунке.
load desiredSynthesizedAntenna; clf; pattern(mysteryAntenna,fc,'CoordinateSystem','polar','Type','powerdb'); view(50,20); ax = gca; ax.Position = [-0.15 0.1 0.9 0.8]; camva(4.5); campos([520 -250 200]);

Диаграммы направленности 3D показывают некоторые симметрии как по азимуту, так и по отметке. Следовательно, шаблон может быть лучше всего получен с использованием однородной прямоугольной матрицы (URA). Из графика также ясно, что нет энергии, излучаемой в направлении задней части матрицы.
Затем определите размер массива. Чтобы избежать лепестков решетки, расстояние между элементами устанавливают равным половине длины волны. Для URA размеры вдоль направлений азимута и отметки могут быть получены из требуемой ширины луча вдоль направлений азимута и отметки соответственно. В случае полупериодического разнесения количество элементов вдоль определенного направления может быть аппроксимировано

где
- ширина луча вдоль этого направления. Следовательно, размер апертуры URA может быть вычислен как
[azpat,elpat,az,el] = helperExtractSynthesisPattern(mysteryAntenna,fc,c); % Azimuth direction idx = find(azpat>pow2db(1/2)); azco = [az(idx(1)) az(idx(end))]; % azimuth cutoff N_col = round(2/sind(diff(azco))) % Elevation direction idx = find(elpat>pow2db(1/2)); elco = [el(idx(1)) el(idx(end))]; % elevation cutoff N_row = round(2/sind(diff(elco)))
N_col =
19
N_row =
14
Оценка предполагает начать с 14x19 URA.
% form the URA
ura = phased.URA([N_row N_col],[lambda/2 lambda/2]);
ura.Element.BackBaffled = true;
helperArraySynthesisComparison(ura,mysteryAntenna,fc,c)

На рисунке показано, что синтезированная матрица превышает требования к ширине луча желаемого шаблона. Однако боковые лопасти намного больше желаемого рисунка. Можно уменьшить боковые лопатки, применив к массиву операцию оконной обработки. Поскольку URA может рассматриваться как комбинация двух разделяемых однородных линейных матриц (ULA), окно может быть спроектировано независимо как по азимуту, так и по высотам с использованием известных методов проектирования фильтров.
В приведенном ниже коде показано, как получить окна для направлений азимута и отметки.
AzSidelobe = 20; Ap = 0.1; % Passband ripples AzWeights = designfilt('lowpassfir','FilterOrder',N_col-1,... 'CutoffFrequency',azco(2)/90,'PassbandRipple',0.1,... 'StopBandAttenuation',AzSidelobe); azw = AzWeights.Coefficients; ElSidelobe = 30; ElWeights = designfilt('lowpassfir','FilterOrder',N_row-1,... 'CutoffFrequency',elco(2)/90,'PassbandRipple',0.1,... 'StopBandAttenuation',ElSidelobe); elw = ElWeights.Coefficients; % Assign the weights to the array ura.Taper = elw(:)*azw(:).'; % Compare the pattern helperArraySynthesisComparison(ura,mysteryAntenna,fc,c)

На рисунке показано, что результирующий уровень боковины ниже по сравнению с предыдущей конструкцией, но все же не удовлетворяет требованиям. При некоторых испытаниях и ошибках для создания окончательной конструкции используются следующие параметры:
N_row = N_row+2; % trial and error N_col = N_col-3; % trial and error AzSidelobe = 26; ElSidelobe = 35; AzWeights = designfilt('lowpassfir','FilterOrder',N_col-1,... 'CutoffFrequency',azco(2)/90,'PassbandRipple',0.1,... 'StopBandAttenuation',AzSidelobe); azw = AzWeights.Coefficients; ElWeights = designfilt('lowpassfir','FilterOrder',N_row-1,... 'CutoffFrequency',elco(2)/90,'PassbandRipple',0.1,... 'StopBandAttenuation',ElSidelobe); elw = ElWeights.Coefficients; ura = phased.URA([N_row N_col],[lambda/2 lambda/2]); ura.Element.BackBaffled = true; ura.Taper = elw(:)*azw(:).'; helperArraySynthesisComparison(ura,mysteryAntenna,fc,c)

На чертеже показано, что ширина луча и уровни боковых сторон синтезированного шаблона соответствуют требуемым спецификациям. На следующих рисунках показан требуемый 3D массив, синтезированный 3D массив, результирующая геометрия массива и конусность.
helperArraySynthesisComparison(ura,mysteryAntenna,fc,c,'3d')

Многие проблемы синтеза массива можно рассматривать как проблемы оптимизации, особенно для массивов с большими отверстиями или сложной геометрией. В этих ситуациях замкнутого решения формы часто не существует, и пространство решения очень велико. Например, для большой решетки часто необходимо утончить решетку для управления уровнями боковых узлов, чтобы избежать потери мощности, подаваемой на каждый антенный элемент. В этом случае элемент может быть включен или выключен. Если попробовать все возможные решения в 400-элементном массиве, потребуется попробовать
комбинации, что нереально, и 400-элементный массив вообще не считается большой апертурой. В этой ситуации часто применяются методы оптимизации.
Часто используемым методом оптимизации является генетический алгоритм. Генетический алгоритм обеспечивает оптимальное решение путем моделирования процесса естественного отбора. Он начинается со случайно выбранных кандидатов в качестве первого поколения. В каждом цикле эволюции алгоритм сортирует генерацию в соответствии с заранее определенной мерой производительности (в примере с утонченным массивом мерой производительности будет отношение пикового к боковому уровню), а затем отбрасывает те с более низкими показателями производительности. Затем алгоритм мутирует оставшиеся кандидаты для генерации нового поколения и повторяет процесс, пока не достигнет условия остановки, такого как максимальное количество поколений.
В следующем примере показано, как использовать генетический алгоритм для тонкости 40x40 URA. Цель состоит в достижении максимального подавления боковин как по азимуту, так и по высотному разрезу. Сначала показана диаграмма направленности полной матрицы.
Nside = 40; geneticArray = phased.URA(Nside,lambda/2); geneticArray.Element.BackBaffled = true; clf; wplot = helperThinnedArrayComparison(geneticArray,fc,c);

Уровень бокового узла может быть вычислен как
% Compute beam pattern [azpat,elpat,az,el] = helperExtractSynthesisPattern(geneticArray,fc,c); % Compute relative sidelobe level pks_az = findpeaks(azpat,'NPeaks',2,'SortStr','descend'); pks_el = findpeaks(elpat,'NPeaks',2,'SortStr','descend'); % find the smaller sidelobe level between two cuts sllopt = min(pks_az(1)-pks_az(2),pks_el(1)-pks_el(2))
sllopt = 13.2981
Как и ожидалось, уровень боковины составляет около 13dB.
Теперь примените генетический алгоритм. Обратите внимание, что URA имеет симметрию как в строках, так и в столбцах, таким образом, можно воспользоваться этой симметрией так, чтобы каждый возможный коэффициент прореживания применялся только к четверти массива. Это уменьшает пространство поиска алгоритма.
% Set random seed prvS = rng(2013); % Initial generation with 200 candidates. Initially, the elements toward % the center are active and the dummy elements are toward the edge w0 = double(rand(Nside/2,Nside/2,200)>0.5); w0(1:14,1:14,:) = 1; % Pick one candidate, plot the beam pattern, and compute the sidelobe % level wtemp = w0(:,:,100); wo = [fliplr(wtemp) wtemp;rot90(wtemp,2) flipud(wtemp)]; wplot = helperThinnedArrayComparison(geneticArray,fc,c,[wplot wo(:)],... {'Full','Initial'});

На рисунке показана диаграмма направленности, полученная от одного типичного кандидата первого поколения. Уровень боковины ниже по азимуту, но выше по направлению возвышения по сравнению с полной решеткой. Точный уровень сайлоба и коэффициент заполнения массива можно вычислить как
[azpat,elpat] = helperExtractSynthesisPattern(geneticArray,fc,c,wo(:)); % Compute relative sidelobe level pks_az = findpeaks(azpat,'NPeaks',2,'SortStr','descend'); pks_el = findpeaks(elpat,'NPeaks',2,'SortStr','descend'); sllopt = min(pks_az(1)-pks_az(2),pks_el(1)-pks_el(2)) fillrate = sum(wo(:))/Nside^2*100
sllopt =
8.7013
fillrate =
71.7500
Это означает, что 71,75% элементов массива (из них 1148) являются активными, а уровень боковой зоны составляет около 9 дБ. Его нужно подавлять и дальше. Код ниже применяет генетический алгоритм с 30 поколениями.
% Max number of generations Niter = 30; % Number of candidates in each generation numGene = size(w0,3); w = w0; pos = getElementPosition(geneticArray)/lambda; angspan = -90:90; for m = 1:Niter % Compute the beam pattern for the entire generation [azpat,elpat] = helperArraySynthesisBeamPattern(pos,angspan,w); % Compute the sidelobe level for each candidate sll = helperArraySynthesisRelativeSidelobeLevel(azpat,elpat); % Sort the resulting sidelobe level [~,idx] = sort(sll,2,'descend'); % Discard half of the generation that gets the lower score w = w(:,:,[idx(1:numGene/2) idx(1:numGene/2)]); % Mutate rows and columns in the newly generated candidates mutIdx_row = randi(Nside/2,1,1); mutIdx_col = randi(Nside/2,1,1); w(mutIdx_row:end,:,numGene/2+1:numGene) = flipud(... w(mutIdx_row:end,:,numGene/2+1:numGene)); w(mutIdx_col:end,:,numGene/2+1:numGene) = fliplr(... w(mutIdx_col:end,:,numGene/2+1:numGene)); end wopt = w(:,:,1); rng(prvS); wo = [fliplr(wopt) wopt;rot90(wopt,2) flipud(wopt)]; wplot = helperThinnedArrayComparison(geneticArray,fc,c,[wplot wo(:)],... {'Full','Initial','Synthesized'});

sllopt = sll(idx(1)) fillrate = sum(wo(:))/Nside^2*100
sllopt = 17.5380 fillrate = 76.5000
На рисунке показана результирующая картина луча. Можно видеть, что уровень боковой поверхности дополнительно улучшен до приблизительно 17,5 дБ при скорости заполнения 76,5% (1224 активных элемента). По сравнению с кандидатом первого поколения, он использует на 5% больше активных элементов, в то же время достигая дополнительного подавления sidelobe 9 дБ. По сравнению с полным массивом, полученный утонченный массив может сэкономить затраты на внедрение T/R-переключателей за фиктивными элементами, что, в свою очередь, приводит к примерно 25% экономии потребляемой мощности. Также следует отметить, что даже если утонченный массив использует меньше элементов, ширина луча близка к той, что может быть достигнута с полным массивом.
Последний утонченный массив показан ниже черными кругами, представляющими фиктивные элементы.
clf;
geneticArray.Taper = wo;
viewArray(geneticArray,'ShowTaper',true);

Стоит отметить, что генетический алгоритм не всегда приземляется на одно и то же решение в каждом испытании. Однако в целом результирующие диаграммы направленности имеют одинаковый уровень боковин.
Сценарий выше показывает очень простой генетический алгоритм, примененный к проблеме синтеза массива. В реальных приложениях генетический алгоритм, вероятно, будет более сложным. Существуют также другие алгоритмы оптимизации, используемые в синтезе массивов, такие как моделируемый алгоритм отжига. Заинтересованные читатели могут найти как генетический алгоритм, так и моделируемые решатели алгоритма отжига в Toolbox™ глобальной оптимизации.
В этом примере показано несколько подходов к синтезу массива на фазированном массиве. На практике необходимо выбрать подходящий способ синтеза в соответствии с конкретным ограничением применения, таким как размер апертуры матрицы, форма геометрии матрицы и т.д.
[1] Рэнди Л. Хаупт, утонченные массивы с использованием генетических алгоритмов, транзакции IEEE на антеннах и распространение, том 42, № 7, 1994
[2] Рэнди Л. Хаупт, Введение в генетические алгоритмы для электромагнетики, IEEE антенны и журнал распространения, том 37, № 2, 1995
[3] Harry L. Van Trees, оптимальная обработка массива, Wiley-Interscience, 2002