exponenta event banner

Синтез массива

В этом примере показано, как использовать 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');

Синтез шаблона с помощью оконной функции

Другой частой проблемой при проектировании фазированной матрицы является соответствие желаемой диаграммы направленности спецификации, переданной пользователю. Часто требования выражаются в виде ширины луча и уровня боковины.

Процесс решения такой проблемы часто включает в себя следующие шаги:

  1. Проверьте требуемый массив и определите геометрию массива;

  2. Выберите размер массива на основе требуемой ширины луча;

  3. Проектирование конусов на основе желаемого уровня боковины;

  4. Выполните итерацию при настройке параметра, полученного на этапах 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 размеры вдоль направлений азимута и отметки могут быть получены из требуемой ширины луча вдоль направлений азимута и отметки соответственно. В случае полупериодического разнесения количество элементов вдоль определенного направления может быть аппроксимировано

$$ N \simeq \frac{2}{\sin (\theta_b)} $$

где$\theta_b$ - ширина луча вдоль этого направления. Следовательно, размер апертуры 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-элементном массиве, потребуется попробовать$2^{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