メインコンテンツ

Full Factorial Parametric Sweep

Since R2026a

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:

  1. Observation number

  2. Resonant frequency

  3. Bandwidth

  4. Peak gain

  5. 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