Синтез шаблона массива

В этом примере показано, как использовать Toolbox™ Phased Array System для решения некоторых задач синтеза массива.

В приложениях проекта фазированных решеток часто необходимо найти способ сужения откликов элемента, чтобы полученный шаблон массива удовлетворял определенным критериям эффективности. Типичные критерии эффективности включают местоположение mainlobe, нулевое (ые) местоположение (я) и уровни sidelobe.

Удаление помех с помощью Sidelobe Canceller

Общим требованием при синтезе диаграмм направленности является указание нуля на заданное направление прибытия. Это помогает подавить помехи с этого направления и улучшает отношение сигнал/помеха. Помехи не всегда являются вредоносными - радиолокационная система аэропорта может потребовать подавления помех от близлежащей радиостанции. В этом случае положение радиостанции известно, и для удаления помех может использоваться алгоритм гашения бокового колеса.

Отмена Sidelobe полезна для подавления пересечений, входящих через боковые панели массива. В этом случае, поскольку направление интерференции известно, алгоритм прост. Сформируйте пучок, который указывает в направлении интерференции, затем масштабируйте веса пучка и вычитайте масштабированные веса из весов для диаграмм направленности, которые указывают в направлении любого другого направления взгляда. Этот процесс всегда помещает сильное ядро в направлении интерференции.

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

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

В следующем примере показано, как использовать генетический алгоритм для утончения URA 40x40. Цель состоит в том, чтобы достичь максимального подавления бокового шва как в азимуте, так и повышении разрезе. Сначала показана диаграмма направленности полного массива.

Nside = 40;
geneticArray = phased.URA(Nside,lambda/2);
geneticArray.Element.BackBaffled = true;

clf;
wplot = helperThinnedArrayComparison(geneticArray,fc,c);

Уровень бокового elobe может быть вычислен как

% 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'});

Рисунок показывает диаграмму направленности, полученную из одного типичного кандидата первой генерации. Уровень бокового элемента ниже по азимутальному направлению, но выше по повышению направлению по сравнению с полным массивом. Точный уровень бокового elobe и скорость заполнения массива могут быть вычислены как

[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% больше активных элементов, достигая дополнительного подавления бокового элемента на 9 дБ. По сравнению с полным массивом полученный утонченный массив может сэкономить на реализации T/R-переключателей за фиктивными элементами, что, в свою очередь, приводит к примерно 25% сохранения потребляемой степени. Также обратите внимание, что, хотя утонченный массив использует меньше элементов, ширина луча близка к тому, что может быть достигнуто с полным массивом.

Конечный утонченный массив показан ниже с черными кругами, представляющими фиктивные элементы.

clf;
geneticArray.Taper = wo;
viewArray(geneticArray,'ShowTaper',true);

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

Скрипт выше показывает очень простой генетический алгоритм, примененный к задаче синтеза массива. В реальных приложениях генетический алгоритм, вероятно, будет более комплексным. Существуют также другие алгоритмы оптимизации, используемые в синтезе массива, такие как моделируемый алгоритм отжига. Заинтересованные читатели могут найти как генетический алгоритм, так и моделируемые решатели алгоритма отжига в Global Optimization Toolbox™.

Сводные данные

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

Ссылка

[1] Рэнди Л. Хауп, утонченные массивы с использованием генетических алгоритмов, транзакции IEEE по антеннам и распространению, том 42, № 7, 1994

[2] Рэнди Л. Хауп, введение в генетические алгоритмы для электромагнитики, антенн IEEE и журнала распространения, том 37, № 2, 1995

[3] Harry L. Van Trees, Optimum Array Processing, Wiley-Interscience, 2002