В этом примере показано, как ускорить анализ антенны и решетки с помощью Parallel Computing Toolbox™.
В этом примере требуется следующий продукт:
Панель инструментов для параллельных вычислений
Анализ характеристик антенны в полосе частот является важной частью конструкции антенны. Анализы портов включают импеданс, returnLoss, спараметры, vswr; поверхностный анализ включает ток и заряд; и анализы полей включают в себя шаблон, поля EHfields, коэффициент распределения и ширину луча. В этом примере мы демонстрируем преимущества параллельных вычислений для вычисления осевого отношения и потерь возврата в полосе частот.
Вычислите осевое отношение архимедовой спирали по полосе частот от 0,8 до 2,5 ГГц с шагом 100 МГц. Этот расчет выполняется последовательно, и время, затраченное на выполнение этих вычислений, сохраняется в переменное время 1.
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 для вычисления осевого отношения в той же полосе частот. Время, затраченное на выполнение вычислений, сохраняется в переменном времени 2.
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');

Во время этого анализа структура антенны находится в сетке на каждой частоте, а затем дальние поля вычисляются на этой частоте для вычисления осевого отношения. Одним из способов сокращения времени анализа является создание сетки структуры вручную путем задания максимальной длины кромки.
В предыдущем разделе был выполнен анализ полей. Все вычисления полевого и поверхностного анализа в Toolbox™ антенн принимают только скалярную частоту в качестве входных данных. Тогда как функция returnLoss и все другие функции анализа портов принимают вектор частоты в качестве входного сигнала.
Когда вектор частоты задан в качестве входного сигнала, структура антенны находится в сети на самой высокой частоте. Результирующая сетка используется для выполнения анализа в указанной полосе частот. Время ЦП, необходимое для выполнения вычислений, сохраняется в переменное время 3.
sp = spiralArchimedean('Turns',4,'InnerRadius',5.5e-3,'OuterRadius',50e-3); tic; RL = returnLoss(sp, freq); time3 = toc;
Если мы будем использовать parfor петлю, передавая одну частоту за один раз (как показано в дискуссии о axialRatio), то запутывающее произойдет на каждой частоте. Это ограничит преимущества параллельных вычислений. Лучший вариант - вручную создать сетку структуры, а затем использовать цикл parfor для выполнения сдвига частоты. Простой способ сделать это - сначала выполнить анализ на самой высокой частоте и получить информацию о сетке с помощью mesh функция. Использовать максимальную длину кромки в mesh обеспечивает использование одной и той же сетки для всех вычислений. Время, затраченное на выполнение вычислений, сохраняется в переменное время 4.
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;
В таблице ниже указано время, затрачиваемое на расчет потерь при возврате с помощью панели инструментов Parallel Computing Toolbox и без нее. Сведения о кластере сохраняются в переменных 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);