Распараллеливание исследований антенны и массива

В этом примере показано, как ускорить антенну и анализ массивов с помощью Parallel Computing Toolbox™.

Этот пример требует следующего продукта:

  • Parallel Computing Toolbox

Анализ развертки частоты

Анализ эффективности антенны по диапазону частот является важной частью проекта антенны. Исследования порта включают импеданс, returnLoss, sparameters, vswr; поверхностные исследования включают текущий и заряд; и полевые исследования включают шаблон, EHfields, axialRatio, и ширину луча. В этом примере мы демонстрируем преимущества параллельных вычислений для вычислительного коэффициента эллиптичности и возвращаем потерю по диапазону частот.

Расчет коэффициента эллиптичности ни с чем не сравнимое вычисление

Вычислите коэффициент эллиптичности Архимедовой спирали по диапазону частот 0,8 к 2,5 ГГц с шагом 100 МГц. Это вычисление сделано последовательно, и время, потраченное, чтобы выполнить эти расчеты, сохранено в переменной time1.

sp = spiralArchimedean('Turns',4,'InnerRadius',5.5e-3,'OuterRadius',50e-3);
freq = 0.8e9:100e6:2.5e9;
AR = zeros(size(freq));
tic
for m = 1:numel(freq)
    AR(m) = axialRatio(sp, freq(m), 0, 90);
end
time1 = toc;

Расчет коэффициента эллиптичности с параллельными вычислениями

Повторите вычисления с помощью Parallel Computing Toolbox, чтобы уменьшать время вычисления. Используйте функцию parpool, чтобы создать параллельный кластер пула. Затем используйте parfor, чтобы вычислить коэффициент эллиптичности по тому же диапазону частот. Время, потраченное, чтобы выполнить расчет, сохранено в переменной time2.

pardata = parpool;
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
sp = spiralArchimedean('Turns',4,'InnerRadius',5.5e-3,'OuterRadius',50e-3);
ARparfor = zeros(size(freq));
tic;
parfor m = 1:numel(freq)
    ARparfor(m) = axialRatio(sp, freq(m), 0, 90);
end
time2 = toc;

Сравнение времени вычисления коэффициента эллиптичности

Приведенная ниже таблица показывает время, потраченное для анализа коэффициента эллиптичности с и ни с чем не сравнимого Вычислительного Тулбокса. Кластерная информация сохранена в переменной pardata.

cases = {'Without Parallel Computing';'With Parallel Computing'};
time  = [time1; time2];
numWorkers = [1; pardata.NumWorkers];
disp(table(time,numWorkers,'RowNames', cases))
                                   time     numWorkers
                                  ______    __________

    Without Parallel Computing    46.155        1     
    With Parallel Computing       18.382        6     
fprintf('Speed-up due to parallel computing = %g', time1/time2)
Speed-up due to parallel computing = 2.5109

График ниже показов данные о коэффициенте эллиптичности, вычисленные для двух случаев. Результаты идентичны.

plot(freq./1e9, AR,'r+', freq./1e9, ARparfor,'bo');
grid on;
xlabel('Frequency (GHz)');
ylabel('Axial ratio (dB)');
title('Axial ratio of Archimedean spiral antenna at boresight');
legend('Without Parallel Computing','With Parallel Computing',          ...
    'location', 'Best');

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

Возвратите расчет потерь ни с чем не сравнимое вычисление

Предыдущий раздел выполнил полевой аналитический расчет. Все поле и поверхностные аналитические расчеты в Antenna Toolbox™ принимают только скалярную частоту, как введено. Принимая во внимание, что, returnLoss и все другие аналитические функции порта принимают вектор частоты, как введено.

Когда вектор частоты задан как вход, структура антенны поймана в сети на самой высокой частоте. Получившаяся mesh используется для выполнения анализа по заданному диапазону частот. Процессорное время, потраченное, чтобы выполнить расчет, сохранено в переменной time3.

sp = spiralArchimedean('Turns',4,'InnerRadius',5.5e-3,'OuterRadius',50e-3);
tic;
RL = returnLoss(sp, freq);
time3 = toc;

Возвратите расчет потерь с параллельными вычислениями

Если мы будем использовать цикл parfor путем передачи одной частоты за один раз (как показано в дискуссии о axialRatio), запутывающее произойдет на каждой частоте. Это ограничит преимущество параллельных вычислений. Более оптимальный вариант состоит в том, чтобы вручную поймать в сети структуру и затем использовать цикл parfor, чтобы запустить развертку частоты. Простой способ сделать это должно запустить анализ на самой высокой частоте сначала и получить информацию mesh с помощью mesh функция. Используйте максимальную длину ребра в mesh функция, чтобы гарантировать, что та же mesh используется для всех расчетов. Время, потраченное, чтобы выполнить расчет, сохранено в переменной time4.

sp = spiralArchimedean('Turns',4,'InnerRadius',5.5e-3,'OuterRadius',50e-3);
RLparfor = zeros(size(freq));
tic;
temp = returnLoss(sp, freq(end));
meshdata = mesh(sp);
[~] = mesh(sp, 'MaxEdgeLength', meshdata.MaxEdgeLength);
parfor m = 1:numel(freq)
    RLparfor(m) = returnLoss(sp, freq(m)); 
end
time4 = toc;

Возвратите сравнение времени вычисления потерь

Приведенная ниже таблица указала время, потраченное для вычисления потери возврата с и ни с чем не сравнимого Вычислительного Тулбокса. Кластерная информация сохранена в переменной pardata.

cases = {'Without Parallel Computing';'With Parallel Computing'};
time  = [time3; time4];
numWorkers = [1; pardata.NumWorkers];
disp(table(time,numWorkers,'RowNames', cases))
                                   time     numWorkers
                                  ______    __________

    Without Parallel Computing    5.5858        1     
    With Parallel Computing       3.3974        6     
fprintf('Speed-up due to parallel computing = %g', time3/time4);
Speed-up due to parallel computing = 1.64412

График ниже показов данные о возврате потерь, вычисленные для двух случаев. Результаты идентичны.

plot(freq./1e9, RL,'r+', freq./1e9, RLparfor,'bo');
grid on;
xlabel('Frequency (GHz)');
ylabel('Return loss (dB)');
title('Return loss of Archimedean spiral antenna');
legend('Without Parallel Computing','With Parallel Computing',          ...
    'location', 'Best');

Удалите текущий параллельный пул.

delete(gcp);

Смотрите также

|