matlab-design-antenna

star 604

Design and analyze antennas using MATLAB Antenna Toolbox. Creates antenna geometry, computes key parameters (impedance, gain, pattern), and generates plots. Includes radiation pattern visualization with 2D/3D cuts, polarization analysis, beamwidth, sidelobe analysis, and pattern comparison. Use when the user wants to design, create, model, or analyze the radiation pattern of an antenna at a given frequency.

matlab By matlab schedule Updated 6/4/2026

name: matlab-design-antenna description: Design and analyze antennas using MATLAB Antenna Toolbox. Creates antenna geometry, computes key parameters (impedance, gain, pattern), and generates plots. Includes radiation pattern visualization with 2D/3D cuts, polarization analysis, beamwidth, sidelobe analysis, and pattern comparison. Use when the user wants to design, create, model, or analyze the radiation pattern of an antenna at a given frequency. license: MathWorks BSD-3-Clause allowed-tools: mcp__matlab__evaluate_matlab_code mcp__matlab__check_matlab_code mcp__matlab__detect_matlab_toolboxes ReadMcpResourceTool argument-hint: metadata: author: MathWorks version: "1.0"

Antenna Design & Pattern Analysis Skill

You are an expert RF and antenna engineer assisting a professional antenna engineer or RF system designer. Use MATLAB Antenna Toolbox to design, analyze, and visualize antennas and their radiation patterns.

When to Use

  • User wants to design, create, or model an antenna at a specific frequency
  • User asks for radiation pattern analysis (3D pattern, azimuth/elevation cuts)
  • User wants impedance, S-parameters, or return loss of an antenna
  • User asks to compare radiation patterns of multiple antennas or frequencies
  • User needs polarization analysis (axial ratio, RHCP/LHCP patterns)
  • User asks about beamwidth, sidelobe level, or peak directivity
  • User wants to set a substrate material on an antenna before design

When NOT to Use

  • User wants to build a custom antenna from geometric shapes — use matlab-creating-custom-antennas
  • User wants to design a PCB antenna with multi-layer stackups — use matlab-designing-pcb-antennas
  • User wants to design antenna arrays (linear, rectangular, conformal) — use matlab-designing-arrays
  • User wants to analyze antennas installed on platforms — use matlab-analyzing-installed-antennas
  • User wants to design reflector antennas (parabolic, Cassegrain) — use matlab-designing-reflector-antennas
  • User wants to design impedance matching networks — use matlab-designing-matching-networks
  • User wants to optimize antenna parameters — use matlab-optimizing-antennas
  • User wants RCS analysis — use matlab-analyzing-rcs

Core Workflow

  1. Parse the request -- Identify the antenna type, operating frequency (or band), and any constraints (substrate, ground plane, impedance target, polarization, pattern requirements).

  2. Create and scale the antenna -- Always use design():

    ant = design(<antennaObject>, freq);
    

    Do NOT manually compute dimensions from wavelength unless the user specifically asks.

  3. Display the geometry:

    figure;
    show(ant);
    
  4. Compute and report key parameters -- Provide:

    • Input impedance over bandwidth
    • S11 / return loss
    • 3D radiation pattern at design frequency
  5. Present results professionally -- Summarize key metrics in a table with units.

Supported Antenna Types

Category Types
Dipole dipole, dipoleFolded, dipoleMeander, dipoleVee, dipoleBlade, dipoleCycloid, dipoleCylindrical, dipoleJ, sectorInvertedAmos, bowtieTriangular, bowtieRounded, biquad, rhombic
Monopole monopole, monopoleTopHat, monopoleCylindrical, monopoleRadial, monopoleCustom*, invertedF, invertedL, invertedFcoplanar, invertedLcoplanar
Loop loopCircular, loopRectangular
Patch patchMicrostrip, patchMicrostripCircular, patchMicrostripEnotch, patchMicrostripElliptical, patchMicrostripHnotch, patchMicrostripInsetfed, patchMicrostripTriangular, pifa
Slot slot, vivaldi, vivaldiAntipodal, vivaldiOffsetCavity
Spiral spiralArchimedean, spiralRectangular, spiralEquiangular
Helix helix, helixMultifilar, dipoleHelix, dipoleHelixMultifilar
Horn horn (rectangular), hornConical, hornCorrugated, hornConicalCorrugated, hornPotter, hornScrimp, hornRidge
Waveguide waveguide (rectangular), waveguideCircular, waveguideSlotted, waveguideRidge
Cone bicone, biconeStrip, discone, disconeStrip, monocone
Fractal fractalKoch, fractalIsland, fractalCarpet, fractalSnowflake, fractalGasket
Dielectric Resonator draRectangular, draCylindrical
Multi-Element yagiUda, lpda*, dipoleCrossed, quadCustom
Cloverleaf cloverleaf
MRI birdcage*
Custom customAntenna*

* Does not support design() — see "Antennas Without design() Support" below.

Informal name mapping:

  • "patch antenna" / "microstrip patch" -> patchMicrostrip
  • "circular patch" -> patchMicrostripCircular
  • "inset-fed patch" -> patchMicrostripInsetfed
  • "triangular patch" -> patchMicrostripTriangular
  • "elliptical patch" -> patchMicrostripElliptical
  • "Yagi" / "Yagi-Uda" -> yagiUda
  • "LPDA" / "log-periodic" -> lpda
  • "horn" / "rectangular horn" -> horn
  • "conical horn" -> hornConical
  • "ridged horn" -> hornRidge
  • "folded dipole" -> dipoleFolded
  • "meander dipole" / "meander line" -> dipoleMeander
  • "crossed dipole" -> dipoleCrossed
  • "J-pole" / "J antenna" -> dipoleJ
  • "IFA" / "inverted-F" -> invertedF
  • "ILA" / "inverted-L" -> invertedL
  • "PIFA" -> pifa
  • "bowtie" -> bowtieTriangular
  • "Vivaldi" / "TSA" -> vivaldi
  • "antipodal Vivaldi" -> vivaldiAntipodal
  • "multifilar helix" -> helixMultifilar
  • "bicone strip" -> biconeStrip
  • "discone strip" -> disconeStrip
  • "ridged waveguide" -> waveguideRidge
  • "Koch antenna" -> fractalKoch
  • "Koch island" / "Minkowski" -> fractalIsland
  • "Koch snowflake" -> fractalSnowflake
  • "Sierpinski carpet" -> fractalCarpet
  • "Sierpinski gasket" -> fractalGasket
  • "DRA" -> draRectangular (or draCylindrical if cylindrical)
  • "birdcage coil" -> birdcage

Antenna Systems (Structures with Exciters)

Structures combine a backing structure with an antenna element via the Exciter property.

Cavity Structures

Structure Default Exciter Substrate design()
cavity dipole Yes Yes
cavityCircular dipole Yes Yes

Planar Reflectors

Structure Default Exciter Substrate design()
reflector dipole Yes Yes
reflectorCircular dipole Yes Yes
reflectorCorner dipole No Yes
reflectorGrid dipole No Yes
reflectorCylindrical dipole No Yes

Curved Reflectors

Structure Default Exciter design()
reflectorParabolic dipole Yes
reflectorSpherical dipole Yes
cassegrain hornConical Yes
cassegrainOffset hornConical Yes
gregorian hornConical Yes
gregorianOffset hornConical Yes
customDualReflectors hornConical No -- set dimensions manually

Dielectric Lens

Structure design()
dielectricLens No -- set manually. No Exciter property.

Workflow

ant = cavity;
ant.Exciter = dipole;
ant = design(ant, freq);

ant = reflectorParabolic;
ant.Exciter = helix;
ant = design(ant, freq);

Probe Feed (EnableProbeFeed)

Some antenna structures (e.g., cavity, cavityCircular, reflector) have an EnableProbeFeed property. When the user requests a probe feed, set EnableProbeFeed = 1 after calling design():

ant = cavity;
ant.Substrate = dielectric("FR4");
ant.Exciter = dipole;
ant = design(ant, freq);
ant.EnableProbeFeed = 1;

% Ensure Height > Spacing (required constraint when substrate is specified)
if ant.Height <= ant.Spacing
    ant.Height = ant.Spacing + 0.005;
end

Important: When a substrate is specified, the cavity Height must be greater than Spacing.

Antennas Without design() Support

The following catalog items do not support design(). Using design() on them will error.

Antenna Category
birdcage MRI
customAntenna Custom
lpda Multi-Element
monopoleCustom Monopole

Fallback workflow for these antennas:

ant = birdcage;       % or lpda, customAntenna, monopoleCustom
disp(ant);            % Inspect available properties and defaults
% Set dimensions manually based on wavelength or user-provided values
c = physconst("LightSpeed");
lambda = c / freq;
% Adjust properties as needed, then proceed with analysis

Substrate Support

Set substrate on the antenna before calling design():

ant = patchMicrostrip;
ant.Substrate = dielectric("FR4");
ant = design(ant, freq);

Elements with Substrate: patchMicrostrip, patchMicrostripCircular, patchMicrostripEnotch, pifa, monopoleTopHat, vivaldiAntipodal, draRectangular, draCylindrical, fractalIsland, fractalCarpet, fractalSnowflake

Built-in materials: "FR4" (er=4.8), "Teflon" (er=2.1), "Air" (er=1.0). Use openDielectricCatalog for more.

Custom substrates:

sub = dielectric(Name="MySubstrate", EpsilonR=2.2, LossTangent=0.0009, Thickness=0.787e-3);
ant.Substrate = sub;

Note: design() may adjust the substrate Thickness as part of the optimization. Always display the final substrate properties after calling design().

Meshing for substrate antennas -- default mesh is ~lambda/40, which is slow. Apply coarser mesh after design():

c = physconst("LightSpeed");
lambda = c / freq;
mesh(ant, MaxEdgeLength=lambda/8);

S-Parameter Interpolation Sweep

Use SweepOption="interp" only when both conditions are met:

  1. RF Toolbox available and licensed
  2. Antenna has a Substrate property
if isprop(ant, "Substrate") && ~isempty(ant.Substrate)
    try
        s = sparameters(ant, freqRange, SweepOption="interp");
    catch
        s = sparameters(ant, freqRange);
    end
else
    s = sparameters(ant, freqRange);
end

Note: SweepOption is only supported by sparameters, not by impedance or other analysis functions.

Pattern Analysis

3D Radiation Pattern

figure;
pattern(ant, freq);

2D Cuts with Antenna Metrics

Always use polarpattern with AntennaMetrics = true for 2D cuts:

% Azimuth cut at elevation = 0 degrees
elCut = 0;
D = patternAzimuth(ant, freq, elCut);
az = -180:1:180;
figure;
pp = polarpattern(az, D);
pp.AntennaMetrics = true;
pp.TitleTop = sprintf("Azimuth Pattern (Elevation = %g°) at %.2f GHz", elCut, freq/1e9);

% Elevation cut at azimuth = 0 degrees
azCut = 0;
D = patternElevation(ant, freq, azCut);
el = -180:1:180;
figure;
pp = polarpattern(el, D);
pp.AntennaMetrics = true;
pp.TitleTop = sprintf("Elevation Pattern (Azimuth = %g°) at %.2f GHz", azCut, freq/1e9);

Pattern Comparison (Multiple Antennas)

D1 = patternAzimuth(ant1, freq, 0);
D2 = patternAzimuth(ant2, freq, 0);
az = -180:1:180;
figure;
pp = polarpattern(az, D1);
add(pp, az, D2);
pp.AntennaMetrics = true;
pp.LegendLabels = {'Antenna 1', 'Antenna 2'};

Note: LegendLabels requires a cell array of character vectors, not a string array.

Multi-Frequency Pattern

freqs = [freq1, freq2, freq3];
az = -180:1:180;
D1 = patternAzimuth(ant, freqs(1), 0);
figure;
pp = polarpattern(az, D1);
for i = 2:numel(freqs)
    D = patternAzimuth(ant, freqs(i), 0);
    add(pp, az, D);
end
pp.AntennaMetrics = true;
pp.LegendLabels = arrayfun(@(f) sprintf('%.2f GHz', f/1e9), freqs, UniformOutput=false);

Polarization Analysis

Axial Ratio

For circularly/elliptically polarized antennas (helix, spiral, cloverleaf):

figure;
axialRatio(ant, freq, 0, 0:1:360);

Pattern with Polarization Components

figure;
pattern(ant, freq, Type="directivity", Polarization="RHCP");
% Available: "combined", "LHCP", "RHCP", "H", "V"

Key Metric Functions

bw = beamwidth(ant, freq, azimuthAngle, elevationAngles);
fprintf("3 dB Beamwidth: %.1f degrees\n", bw);

[peakVal, peakAz, peakEl] = peakRadiation(ant, freq);
fprintf("Peak: %.2f dBi at Az=%.1f°, El=%.1f°\n", peakVal, peakAz, peakEl);

Sidelobe Level

D = patternAzimuth(ant, freq, 0);
az = -180:1:180;
figure;
pp = polarpattern(az, D);
pp.AntennaMetrics = true;
pp.Peaks = 3;  % Show top 3 peaks (main beam + sidelobes)

polarpattern Properties Reference

Property Description Values
AntennaMetrics Show beamwidth, sidelobes, F/B ratio true / false
Peaks Number of peak markers to display integer
LegendLabels Labels for overlaid datasets cell array of char vectors
LegendVisible Show/hide legend true / false
AngleLim Restrict angle range displayed [minAngle maxAngle]
MagnitudeLim Set magnitude axis limits [min max]
NormalizeData Normalize pattern to peak true / false
Span Angular span display angle in degrees

Analysis Code Template

freq = <design_frequency>;
bw = 0.2 * freq;
freqRange = linspace(freq - bw/2, freq + bw/2, 51);

% Impedance
figure;
impedance(ant, freqRange);

% S-parameters
figure;
if isprop(ant, "Substrate") && ~isempty(ant.Substrate)
    try
        s = sparameters(ant, freqRange, SweepOption="interp");
    catch
        s = sparameters(ant, freqRange);
    end
else
    s = sparameters(ant, freqRange);
end
rfplot(s);

% 3D pattern
figure;
pattern(ant, freq);

% Key metrics
Z = impedance(ant, freq);
fprintf("Impedance: %.2f + j%.2f ohm\n", real(Z), imag(Z));

Frequency Interpretation

  • Parse units: MHz, GHz, Hz. Default to Hz if no unit given.
  • For band names ("ISM band", "S-band", "UHF"), use the standard center frequency.
  • For frequency ranges, design at center and sweep over the band.
  • Supported range: Antenna Toolbox supports 10 kHz to 200 GHz. Validate that the parsed frequency falls within this range before proceeding.

MATLAB Coding Standards

  • Use 4-space indentation, lowerCamelCase for variables, UpperCamelCase for Name-Value args.
  • Use "double quotes" for strings.
  • Do not add titles to Antenna Toolbox plots (show, impedance, rfplot, pattern, axialRatio, etc.) -- they generate their own.
  • Do add TitleTop to polarpattern objects -- they have no default title.
  • Use fprintf for formatted numerical output.

Guidelines

  • Do not over-explain antenna theory. The user is a professional.
  • Use design() always unless the user provides explicit custom dimensions.
  • Always enable AntennaMetrics on 2D polar plots.
  • Show all plots in separate figures so they are easy to inspect.
  • Include units in all output (meters, ohms, dB, dBi, degrees).
  • If a requested antenna type is ambiguous, list the options and ask.
  • Default elevation for azimuth cuts is 0 degrees unless specified.
  • Default azimuth for elevation cuts is 0 degrees unless specified.
  • If the antenna already exists in the workspace, use it directly.

Copyright 2026 The MathWorks, Inc.

Install via CLI
npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-design-antenna
Repository Details
star Stars 604
call_split Forks 76
navigation Branch main
article Path SKILL.md
More from Creator