Full Factorial Parametric Sweep
This example shows the process of designing a horn antenna by exploring its design parameters to maximize bandwidth and peak gain while maintaining resonant frequency close to design frequency. A full factorial parametric sweep systematically explores all possible combinations of parameter values within specified ranges. With AI-driven analysis, you can perform a full factorial parametric sweep on the tunable design parameters of a horn antenna to identify optimal configurations that meet specific performance criteria.
Set Up Parameter Sweep
Each tunable parameter, Width, Height, FlareLength, FlareHeight, FeedHeight, can vary within ±15% of its default value. This tolerance defines the sweep space as ranging from 0.85 to 1.15 times the default parameter values.
The objective of this sweep space is to determine the optimal parameter set that provides:
Maximum bandwidth
Maximum gain
A resonant frequency close to the design target of 10 GHz
A beamwidth below 25°
To explore these design possibilities, create an AI-based horn antenna and vary its tunable parameters across the defined sweep space. The following code performs a full factorial parameter sweep and records key performance metrics for each configuration. The combinations function generates all combinations of the input parameter arrays, where each row of the output table represents a unique parameter configuration.
a = 0.85:0.1:1.15; kc = combinations(a,a,a,a,a); k = table2array(kc); f = 10e9; n = size(k,1); pg = zeros(n,1); % peak gain bdw = zeros(n,1); % bandwidth bmwth = zeros(n,1); % beamwidth fres = zeros(n,1); % resonant frequency numNotMatched = 0; tic tsum =0; for i = 1:n ant = horn; antAI = design(ant, f, ForAI=true); antAI.Width = antAI.Width*k(i,1); antAI.Height = antAI.Height*k(i,2); antAI.FlareLength = antAI.FlareLength*k(i,3); antAI.FlareHeight = antAI.FlareHeight*k(i,4); antAI.FeedHeight = antAI.FeedHeight*k(i,5); [~,~,~,matching] = bandwidth(antAI); switch string(matching) case "Matched" fres(i) = resonantFrequency(antAI); [bdw(i),~,~,~] = bandwidth(antAI); case {"Almost","Not Matched"} fres(i) = NaN; bdw(i) = NaN; end pg(i) = peakRadiation(antAI,f); [bm,~,~] = beamwidth(antAI,f); bmwth(i) = bm(1,1); end tAIopt = toc
tAIopt = 676.3438
Create a table with five columns:
Observation number
Resonant frequency
Bandwidth
Peak gain
Beamwidth
t = table(fres,bdw,pg,bmwth)
t=1024×4 table
fres bdw pg bmwth
__________ __________ ______ ______
1.2386e+10 3.5864e+09 14.529 34.017
1.0875e+10 3.1251e+09 14.533 33.987
9.8876e+09 2.4695e+09 14.53 33.983
9.3453e+09 1.0821e+09 14.518 33.992
1.2572e+10 3.7154e+09 15.023 30.455
1.1025e+10 3.4326e+09 15.03 30.425
1.0146e+10 2.7779e+09 15.029 30.409
9.7902e+09 1.432e+09 15.02 30.401
1.2574e+10 3.8472e+09 15.385 26.484
1.1019e+10 3.3804e+09 15.393 26.478
1.0209e+10 2.9068e+09 15.392 26.476
9.9787e+09 1.9197e+09 15.382 26.474
1.2408e+10 3.8747e+09 15.341 23.963
1.0865e+10 3.0492e+09 15.359 23.965
1.0053e+10 2.9298e+09 15.366 23.974
9.8408e+09 2.3154e+09 15.361 23.989
⋮
Filter Antenna Configurations Based on Performance Criteria
Identify the antenna configurations that meet the desired performance specifications by filtering the results according to the following criteria:
Resonant frequency: Between 9.8 GHz and 10.2 GHz (±2% tolerance around the design frequency)
Bandwidth: Greater than 3.8 GHz
Peak gain: Greater than 15.8 dBi
Beamwidth: Between 20° and 25°
ifr = find(t.fres > 9.8e9 & t.fres < 10.2e9); ibw = find(t.bdw >3.8e9); ipg = find(t.pg >15.8); ibmwth = find(t.bmwth >20 & t.bmwth<25);
Identify the common indices that satisfy all the criteria.
it = intersect(intersect(ifr,ibw),ipg); cmn = intersect(intersect(intersect(ifr,ibmwth),ibw),ipg);
This process enables you to perform all four analyses on 1024 horn antenna configurations in a very short time. Among these, based on the ifr, ibw, ipg, and ibmwth index filters, observations 62 and 63 meet the design specifications most closely.
Observation 62 provides the highest bandwidth and gain, but its resonant frequency is 10.9 GHz, which is slightly higher than the target value.
Observation 63 achieves a resonant frequency very close to the 10 GHz design frequency, but with a reduced bandwidth of 2.8 GHz.
Analyze Performance of Selected Configurations
Design the horn antenna at 10 GHz and perform analysis at the design frequency.
d = horn; f = 10e9; dAI = design(d,f,ForAI=true); frAI_design = resonantFrequency(dAI); [bwAI_design,~,~,~] = bandwidth(dAI); pAI_design = peakRadiation(dAI,f); bwthAI = beamwidth(dAI,f); bwthAI_design = bwthAI(1);
Perform the analysis at the design frequency on observation 62.
bestInd = 62; bestId = k(bestInd,:); dAI1 = design(d,f,ForAI=true); dAI1.Width = dAI1.Width*bestId(1); dAI1.Height = dAI1.Height*bestId(2); dAI1.FlareLength = dAI1.FlareLength*bestId(3); dAI1.FlareHeight = dAI1.FlareHeight*bestId(4); dAI1.FeedHeight = dAI1.FeedHeight*bestId(5); frAI_Id1 = resonantFrequency(dAI1); [bwAI_Id1,~,~,~] = bandwidth(dAI1); pAI_Id1 = peakRadiation(dAI1,f); bwthAI = beamwidth(dAI1,f); bwthAI_Id1 = bwthAI(1);
Perform the analysis at the design frequency on observation 63.
bestInd = 63; bestId = k(bestInd,:); dAI2 = design(d,f,ForAI=true); dAI2.Width = dAI2.Width*bestId(1); dAI2.Height = dAI2.Height*bestId(2); dAI2.FlareLength = dAI2.FlareLength*bestId(3); dAI2.FlareHeight = dAI2.FlareHeight*bestId(4); dAI2.FeedHeight = dAI2.FeedHeight*bestId(5); frAI_Id2 = resonantFrequency(dAI2); [bwAI_Id2,~,~,~] = bandwidth(dAI2); pAI_Id2 = peakRadiation(dAI2,f); bwthAI = beamwidth(dAI2,f); bwthAI_Id2 = bwthAI(1);
Create a table of results with design parameters of the designed antenna, observation 62, and observation 63.
atDesignParams = [dAI.Width,dAI.Height,dAI.FlareLength, dAI.FlareHeight,dAI.FeedHeight]'; atInd62Params = [dAI1.Width,dAI1.Height,dAI1.FlareLength, dAI1.FlareHeight,dAI1.FeedHeight]'; atInd63Params = [dAI2.Width,dAI2.Height,dAI2.FlareLength, dAI2.FlareHeight,dAI2.FeedHeight]'; tab_tunableParams = table(atDesignParams,atInd62Params,atInd63Params,... VariableNames=["Atdesign","AtInd62","AtInd63"],RowNames=... ["Width","Height","FlareLength","FlareHeight","FeedHeight"])
tab_tunableParams=5×3 table
Atdesign AtInd62 AtInd63
_________ _________ _________
Width 0.026232 0.022298 0.022298
Height 0.013114 0.011147 0.011147
FlareLength 0.049441 0.056857 0.056857
FlareHeight 0.057925 0.066614 0.066614
FeedHeight 0.0069952 0.0066454 0.0073449
Compare Performance Metrics
Compare the analysis results of the designed antenna, observation 62, and observation 63.
designFreqRes = [frAI_design,bwAI_design,pAI_design,bwthAI_design]'; analysisInd62 = [frAI_Id1,bwAI_Id1,pAI_Id1,bwthAI_Id1]'; analysisInd63 = [frAI_Id2,bwAI_Id2,pAI_Id2,bwthAI_Id2]'; tab_analysis = table(designFreqRes,analysisInd62,analysisInd63,... VariableNames=["DesignFrequencyResults","OptimizedAnalysisInd62","OptimizedAnalysisInd63"],... RowNames=["fres","bandwidth","peakRad","beamwidth"])
tab_analysis=4×3 table
DesignFrequencyResults OptimizedAnalysisInd62 OptimizedAnalysisInd63
______________________ ______________________ ______________________
fres 9.9009e+09 1.0914e+10 1.0054e+10
bandwidth 2.2388e+09 3.9688e+09 2.8766e+09
peakRad 15.51 15.848 15.88
beamwidth 27.503 23.893 23.893
See Also
Objects
Functions
combinations|design|find|table|table2array|bandwidth|beamwidth|peakRadiation|resonantFrequency