Contenuto principale

Full Factorial Parametric Sweep

R2026b
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
    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