Full Factorial Parametric Sweep
R2026bThis 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
1.2386e+10 3.5864e+09 14.5287 34.0172
1.0875e+10 3.1251e+09 14.5333 33.9872
9.8876e+09 2.4695e+09 14.5296 33.9827
9.3453e+09 1.0821e+09 14.5182 33.9921
1.2572e+10 3.7154e+09 15.0229 30.4549
1.1025e+10 3.4326e+09 15.0301 30.4250
1.0146e+10 2.7779e+09 15.0294 30.4093
9.7902e+09 1.4320e+09 15.0205 30.4011
1.2574e+10 3.8472e+09 15.3851 26.4837
1.1019e+10 3.3804e+09 15.3934 26.4779
1.0209e+10 2.9068e+09 15.3925 26.4756
9.9787e+09 1.9197e+09 15.3822 26.4744
1.2408e+10 3.8747e+09 15.3410 23.9634
1.0865e+10 3.0492e+09 15.3594 23.9655
⋮
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
0.0262 0.0223 0.0223
0.0131 0.0111 0.0111
0.0494 0.0569 0.0569
0.0579 0.0666 0.0666
0.0070 0.0066 0.0073
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
9.9009e+09 1.0914e+10 1.0054e+10
2.2388e+09 3.9688e+09 2.8766e+09
15.5100 15.8477 15.8798
27.5029 23.8932 23.8930
See Also
Objects
Functions
combinations|design|find|table|table2array|bandwidth|beamwidth|peakRadiation|resonantFrequency