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