Оптимизация на основе прямого поиска шестиэлементной антенны Яги-Уды

Этот пример оптимизирует 6-элементную антенну Yagi-Uda как для направленности, так и для 300Ω входной параметр совпадает с использованием метода глобальной оптимизации. Диаграммы направленности излучения и входное сопротивление антенн чувствительны к параметрам, которые определяют их формы. Многомерная поверхность, над которой должны быть выполнены такие оптимизации, имеет несколько локальных оптимумов. Это делает задачу нахождения правильного набора параметров, удовлетворяющих целям оптимизации, особенно сложной и требует использования методов глобальной оптимизации. Одним из таких методов является поиск шаблона, метод оптимизации на основе прямого поиска, который дал впечатляющие результаты для оптимизации проекта антенны.

Антенна Яги-Уда является широко используемой излучающей структурой для различных применений в коммерческих и военных секторах. Эта антенна была популярна для приема телевизионных сигналов в УКВ-УВЧ области значений частот [1]. Yagi - направленная антенна бегущей волны с одним ведомым элементом, обычно сложенным диполем или стандартным диполем, который окружён несколькими пассивными диполями. Пассивные элементы образуют отражатель и директор. Эти имена идентифицируют положения относительно управляемого элемента. Диполь отражателя находится позади ведомого элемента в направлении заднего лепестка излучения антенны, в то время как директор находится перед ведомым элементом, в направлении, где образуется основной луч.

Расчётные параметры

Выберите исходные расчётные параметры в центре полосы УКВ [2]. Лист таблиц данных перечисляет 50Ω входной импеданс после учета балуна. Наша модель не учитывает наличие балуна и поэтому будет соответствовать типичному складному диполю входа импедансу 300Ω.

fc = 165e6;
wirediameter = 12.7e-3;
c = physconst('lightspeed');
lambda = c/fc;
Z0 = 300;
BW = 0.05*fc;
fmin = fc - 2*(BW);
fmax = fc + 2*(BW);
Nf = 101;
freq = linspace(fmin,fmax,Nf);

Создайте антенну Яги-Уда

Ведомым элементом для антенны Яги-Уда является сложенный диполь. Это стандартный возбудитель для такой антенны. Отрегулируйте параметры длины и ширины сложенного диполя. Поскольку мы моделируем цилиндрические структуры как эквивалентные металлические полосы, ширина вычисляется с помощью служебной функции, доступной в Antenna Toolbox™. Длина выбрана такой, чтобы λ/2 на проект частоте.

d = dipoleFolded;
d.Length = lambda/2;
d.Width = cylinder2strip(wirediameter/2);
d.Spacing = d.Length/60;

Создайте антенну Яги-Уда с возбудителем в качестве сложенного диполя. Выберите отражатель и направляющую длину, которая будет λ/2. Установите количество директоров равным четырем. Выберите интервалы между отражателем и директором 0.3λ, 0.25λ соответственно. Эти варианты являются начальным предположением и будут служить отправной точкой для процедуры оптимизации. Показать начальный проект.

Numdirs = 4;
refLength = 0.5;
dirLength = 0.5*ones(1,Numdirs);
refSpacing = 0.3;
dirSpacing = 0.25*ones(1,Numdirs);
exLength = d.Length/lambda;
exSpacing = d.Spacing/lambda;
initialdesign = [refLength dirLength refSpacing dirSpacing exLength exSpacing].*lambda;
yagidesign = yagiUda;
yagidesign.Exciter = d;
yagidesign.NumDirectors = Numdirs;
yagidesign.ReflectorLength = refLength*lambda;
yagidesign.DirectorLength = dirLength.*lambda;
yagidesign.ReflectorSpacing = refSpacing*lambda;
yagidesign.DirectorSpacing = dirSpacing*lambda;
show(yagidesign)

График диаграммы направленности излучения на расчетной частоте

Перед выполнением процесса оптимизации постройте график диаграммы направленности излучения для начального предположения в 3D.

fig1 = figure;
pattern(yagidesign,fc);

Эта исходная антенна Яги-Уда не имеет более высокой направленности в предпочтительном направлении, что означает в зените (повышение = 90 o), и поэтому является плохо спроектированным излучателем.

Настройка оптимизации

Используйте следующие переменные в качестве управляющих переменных для оптимизации:

  • Длина отражателя (1 переменная)

  • Длины директора (4 переменные)

  • Интервал между рефлекторами (1 переменная)

  • Интервалы директора (4 переменные)

  • Длина возбудителя (1 переменная)

  • Интервал между возбудителями (1 переменная)

В терминах одного векторного параметра controlVals, set

  • Длина отражателя = controlVals(1)

  • Длины директоров = controlVals(2:5)

  • Интервал между рефлекторами = controlVals(6)

  • Интервалы между директорами = controlVals(7:10)

  • Длина возбудителя = controlVals(11)

  • Интервал между возбудителями = controlVals(12)

С точки зрения controlVals, установите целевую функцию, которая стремится иметь большое значение направленности в направлении 90 степеней, маленькое значение в направлении -90 степеней и большое значение максимальной степени между границами угла луча по повышению. В дополнение к цели направленности в качестве ограничения также включено условие соответствия импеданса. Любые нарушения ограничений влекут за собой наказание за достижение этой цели.

type yagi_objective_function_direct.m
function objectivevalue = yagi_objective_function_direct(y,controlVals,fc,BW,ang,Z0,constraints)
% YAGI_OBJECTIVE_FUNCTION_DIRECT returns the objective for a 6 element Yagi
% OBJECTIVE_VALUE =
% YAGI_OBJECTIVE_FUNCTION_DIRECT(Y,CONTROLVALS,FREQ,ANG,Z0,constraints), assigns
% the appropriate parasitic dimensions, CONTROLVALS to the Yagi antenna Y,
% and uses the frequency FREQ, angle pair,ANG, reference impedance Z0 and
% the constraints to calculate the objective function value.

% The YAGI_OBJECTIVE_FUNCTION_DIRECT function is used for an internal example.
% Its behavior may change in subsequent releases, so it should not be
% relied upon for programming purposes.

% Copyright 2018 The MathWorks, Inc.

y.ReflectorLength = controlVals(1);
y.DirectorLength  = controlVals(2:y.NumDirectors+1);
y.ReflectorSpacing = controlVals(y.NumDirectors+2);
y.DirectorSpacing = controlVals(y.NumDirectors+3:end-2);
y.Exciter.Length  = controlVals(end-1);
y.Exciter.Spacing = controlVals(end);


% Unpack constraints
Gmin = constraints.Gmin;
Gdev = constraints.Gdeviation;
FBmin = constraints.FBmin;
S11min = constraints.S11min;
K = constraints.Penalty;

% Calculate antenna port and field parameters
output = analyzeAntenna(y,fc,BW,ang,Z0);

% Form objective function
output1 = output.MaxDirectivity+output.MismatchLoss;    % Directivity/Gain at zenith

% Gain constraint, e.g. G > 10
c1 = 0;
if output1<Gmin
    c1 = Gmin-output1;
end

% Gain deviation constraint, abs(G-Gmin)<0.1;
c1_dev = 0;
if abs(output1-Gmin)>Gdev
    c1_dev = -Gdev + abs(output1-Gmin);
end

% Front to Back Ratio constraint, e.g. F/B > 15
c2 = 0;
if output.FB < FBmin
    c2 = FBmin-output.FB;
end

% Reflection Coefficient, S11 < -10
c3 = 0;
if output.S11 > S11min
   c3 = -S11min + output.S11; 
end

% Form the objective + constraints
objectivevalue = -output1 + max(0,(c1+c1_dev+c2+c3))*K;
end

function output = analyzeAntenna(ant,fc,BW,ang,Z0)
%ANALYZEANTENNA calculate the objective function
% OUTPUT = ANALYZEANTENNA(Y,FREQ,BW,ANG,Z0) performs analysis on the
% antenna ANT at the frequency, FC, and calculates the directivity at the
% angles specified by ANG and the front-to-back ratio. The reflection
% coefficient relative to reference impedance Z0, and impedance are
% computed over the bandwidth BW around FC.

fmin = fc - (BW/2);
fmax = fc + (BW/2);
Nf = 5;
freq = unique([fc,linspace(fmin,fmax,Nf)]);
fcIdx = freq==fc;
s = sparameters(ant,freq,Z0);
Z = impedance(ant,fc);
az = ang(1,:);
el = ang(2,:);
Dmax = pattern(ant,fc,az(1),el(1));
Dback = pattern(ant,fc,az(2),el(2));

% Calculate F/B
F_by_B = Dmax-Dback;

% Compute S11 and mismatch loss
s11 = rfparam(s,1,1);
S11 = max(20*log10(abs(s11)));
T = mean(10*log10(1 - (abs(s11)).^2));

% Form the output structure
output.MaxDirectivity= Dmax;
output.BackLobeLevel = Dback;
output.FB = F_by_B;
output.S11 = S11;
output.MismatchLoss = T;
output.Z = Z;
end

Установите ограничения на переменные управления.

refLengthBounds = [0.3;                         % lower bound on reflector length
                   0.9];                        % upper bound on reflector spacing
dirLengthBounds = [0.3 0.3 0.3 0.3;             % lower bound on director length
                   0.7 0.7 0.7 0.7];            % upper bound on director length
refSpacingBounds = [0.05;                       % lower bound on reflector spacing
                    0.35];                      % upper bound on reflector spacing
dirSpacingBounds = [0.05 0.05 0.05 0.05;        % lower bound on director spacing
                    0.2 0.2 0.3 0.3];           % upper bound on director spacing
exciterLengthBounds = [0.45;                    % lower bound on exciter length
                       0.6];                    % upper bound on exciter length
exciterSpacingBounds = [.004;
                        .009];
                
LB = [refLengthBounds(1),dirLengthBounds(1,:) refSpacingBounds(1) dirSpacingBounds(1,:) exciterLengthBounds(1) exciterSpacingBounds(1)  ].*lambda;
UB = [refLengthBounds(2),dirLengthBounds(2,:) refSpacingBounds(2) dirSpacingBounds(2,:) exciterLengthBounds(2) exciterSpacingBounds(2) ].*lambda;
parameterBounds.LB = LB;
parameterBounds.UB = UB;
ang = [0 0;90 -90];                   % azimuth,elevation angles for main lobe and back lobe [az;el]

Оптимизация на основе прямого поиска

Этот Global Optimization Toolbox™ предоставляет основанную на прямом поиске оптимизационную функцию, называемую patternsearch. Мы используем эту функцию с опциями, заданными в psoptimset функция. На каждой итерации постройте график наилучшего значения целевой функции и ограничьте общее количество итераций 300. Передайте целевую функцию в функцию patternsearch с помощью анонимной функции вместе с границами и структурой опций. Целевая функция, используемая в процессе оптимизации patternsearch доступно в файле yagi_objective_function.

Оценка направленности в различных направлениях, соответствующих угловой области, заданной для максимального излучения, а также максимального бокового элемента и уровня задней области, приведена в функции calculate_objectives доступно в yagi_objective function.

% Optimizer options
optimizerparams = optimoptions(@patternsearch);
optimizerparams.UseCompletePoll = true;    
optimizerparams.PlotFcns = @psplotbestf;
optimizerparams.UseParallel = true;
optimizerparams.Cache = 'on';
optimizerparams.MaxIter = 100;
optimizerparams.FunctionTolerance = 1e-2;

% Antenna design parameters
designparams.Antenna = yagidesign;
designparams.Bounds = parameterBounds;

% Analysis parameters
analysisparams.CenterFrequency = fc;
analysisparams.Bandwidth = BW;
analysisparams.ReferenceImpedance = Z0;
analysisparams.MainLobeDirection = ang(:,1);
analysisparams.BackLobeDirection = ang(:,2);

% Set constraints
constraints.S11min = -10;
constraints.Gmin = 10.5;
constraints.Gdeviation = 0.1;
constraints.FBmin = 15;
constraints.Penalty = 50;
optimdesign = optimizeAntennaDirect(designparams,analysisparams,constraints,optimizerparams); 
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
Optimization terminated: mesh size less than options.MeshTolerance.

Оптимизированный шаблон графика

Постройте график оптимизированного шаблона антенны на проект частоте.

yagidesign.ReflectorLength = optimdesign(1);
yagidesign.DirectorLength = optimdesign(2:5);
yagidesign.ReflectorSpacing = optimdesign(6);
yagidesign.DirectorSpacing = optimdesign(7:10);
yagidesign.Exciter.Length = optimdesign(11);
yagidesign.Exciter.Spacing = optimdesign(12);
fig2 = figure;
pattern(yagidesign,fc)

Вырезы шаблона E и H-плоскости

Чтобы получить лучшее представление о поведении в двух ортогональных плоскостях, постройте график нормированной величины электрического поля в E и H-плоскостях, то есть азимут = 0 и 90 o соответственно. Включите метрики антенны на графиках полярного шаблона, чтобы установить направленность в зените, соотношение Фронт-Назад и ширину луча в E и H-плоскостях.

% fig3 = figure;
% patternElevation(yagidesign,fc,0,'Elevation',0:1:359);
% pE = polarpattern('gco');
% pE.AntennaMetrics = 1;

% fig4 = figure;
% patternElevation(yagidesign,fc,90,'Elevation',0:1:359);
% pH = polarpattern('gco');
% pH.AntennaMetrics = 1;

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

Входной коэффициент отражения оптимизированной антенны

Входной коэффициент отражения для оптимизированной антенны Яги-Уды вычисляется и строится относительно опорного импеданса 50Ω. Значение -10 дБ или ниже рассматривается как хорошее соответствие импедансу.

s = sparameters(yagidesign,freq,Z0);
fig5 = figure;
rfplot(s);

Сравнение с таблицей данных производителя

Оптимизированная антенна Яги-Уды достигает прямой направленности, большей 10 дБи, что переводится к значению, большему 8 дБд (относительно диполя). Это близко к значению усиления, сообщаемому таблицей данных (8,5 дБд). Отношение F/B превышает 15 дБ. Оптимизированная антенна Яги-Уды имеет диаграммы направленности E-плоскости и H-плоскости, которые выгодно отличаются от перечисленных значений таблицы данных 54 степеней и 63 степеней соответственно. Этот проект достигает хорошего импеданса, совпадающего с 300Ω, и имеет пропускную способность -10 дБ приблизительно 8%.

datasheetparam = {'Gain (dBi)';'F/B';'E-plane Beamwidth (deg.)';'H-plane Beamwidth (deg.)';'Impedance Bandwidth (%)'};
datasheetvals = [10.5,16,54,63,10]';
optimdesignvals = [10.59,15.6,50,62,12.1]';
Tdatasheet = table(datasheetvals,optimdesignvals,'RowNames',datasheetparam)
Tdatasheet=5×2 table
                                datasheetvals    optimdesignvals
                                _____________    _______________

    Gain (dBi)                      10.5              10.59     
    F/B                               16               15.6     
    E-plane Beamwidth (deg.)          54                 50     
    H-plane Beamwidth (deg.)          63                 62     
    Impedance Bandwidth (%)           10               12.1     

Табуляция начального и оптимизированного проекта

Сведите в таблицу начальные догадки проекта и окончательные оптимизированные проектные значения.

yagiparam=  {'Reflector Length';
             'Director Length - 1'; 'Director Length - 2';
             'Director Length - 3'; 'Director Length - 4';
             'Reflector Spacing';   'Director Spacing - 1';
             'Director Spacing - 2';'Director Spacing - 3';
             'Director Spacing - 4';'Exciter Length';
             'Exciter Spacing'};         
initialdesign = initialdesign';
optimdesign = optimdesign';
Tgeometry = table(initialdesign,optimdesign,'RowNames',yagiparam)
Tgeometry=12×2 table
                            initialdesign    optimdesign
                            _____________    ___________

    Reflector Length           0.90846         0.90846  
    Director Length - 1        0.90846         0.78346  
    Director Length - 2        0.90846         0.65846  
    Director Length - 3        0.90846         0.78346  
    Director Length - 4        0.90846         0.78346  
    Reflector Spacing          0.54508          0.4786  
    Director Spacing - 1       0.45423         0.23838  
    Director Spacing - 2       0.45423         0.19151  
    Director Spacing - 3       0.45423          0.3876  
    Director Spacing - 4       0.45423         0.39173  
    Exciter Length             0.90846         0.84596  
    Exciter Spacing           0.015141        0.016118  

Ссылка

[1] C. A. Balanis, Antenna Theory. Анализ и проект, стр. 514, Уайли, Нью-Йорк, 3-е издание, 2005

[2] Онлайн в: S.6Y-165

См. также

Для просмотра документации необходимо авторизоваться на сайте