В этом примере показано, как использовать Toolbox™ Phased Array System для решения некоторых задач синтеза массива.
В приложениях проекта фазированных решеток часто необходимо найти способ сужения откликов элемента, чтобы полученный шаблон массива удовлетворял определенным критериям эффективности. Типичные критерии эффективности включают местоположение mainlobe, нулевое (ые) местоположение (я) и уровни sidelobe.
Общим требованием при синтезе диаграмм направленности является указание нуля на заданное направление прибытия. Это помогает подавить помехи с этого направления и улучшает отношение сигнал/помеха. Помехи не всегда являются вредоносными - радиолокационная система аэропорта может потребовать подавления помех от близлежащей радиостанции. В этом случае положение радиостанции известно, и для удаления помех может использоваться алгоритм гашения бокового колеса.
Отмена 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');
Другой частой проблемой при разработке фазированной решетки является соответствие желаемого диаграммы направленности спецификации, которая передается вам. Часто требования выражаются в терминах ширины луча и уровня бокового колеса.
Процесс решения такой проблемы часто включает следующие шаги:
Наблюдайте нужный шаблон и решите геометрию массива;
Выберите размер массива на основе желаемой ширины луча;
Проект конусности на основе требуемого уровня бокового колеса;
Итерация при регулировке полученного параметра шаг 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 элементами вообще не рассматривается как большая апертура. В этой ситуации часто применяются методы оптимизации.
Часто используемый метод оптимизации является генетическим алгоритмом. Генетический алгоритм достигает оптимального решения путем симуляции процесса естественного отбора. Он начинается со случайным образом выбранных кандидатов в качестве первой генерации. В каждом цикле эволюции алгоритм сортирует генерацию согласно заранее определенному показателю эффективности (в примере утонченного массива показателем эффективности будет отношение пикового уровня к боковому), а затем отбрасывает таковые с более низкими счетами эффективности. Затем алгоритм мутирует оставшиеся кандидаты, чтобы сгенерировать новую генерацию и повторяет процесс, пока он не достигает условия остановки, такого как максимальное количество поколений.
В следующем примере показано, как использовать генетический алгоритм для утончения 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