Matlab Design Pcb Coupler
MathWorksOfficialCreated by MathWorks
- Skill
- Tool integration
- Software development
- BSD-2-Clause
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a structured approach to designing and analyzing various RF passive components, including Wilkinson splitters, branchline and ratrace couplers, corporate dividers, and Rotman lenses. It guides users through the selection of appropriate topologies, component sizing, and performance analysis using S-parameters and electromagnetic metrics like coupling, directivity, and isolation. The skill emphasizes a specific workflow: configuring materials, designing the component, estimating memory requirements for electromagnetic simulation, and validating performance.
What it does
- Provides design templates for Wilkinson, branchline, ratrace, and directional couplers.
- Supports creation of N-way corporate power dividers and Rotman lens beam-forming networks.
- Enables analysis of coupling factor, directivity, and isolation for 4-port coupler objects.
- Offers tools to estimate memory usage and mesh density prior to full-wave electromagnetic simulation.
- Facilitates customization of component geometry, such as adding Defected Ground Structures (DGS).
- Integrates with broader PCB design workflows for optimization and circuit cascading.
When to use it
- When you need to design power splitting or combining networks for RF and microwave circuits.
- When creating quadrature or sum/difference networks using hybrid couplers.
- When designing array feed networks or true-time-delay beam-forming systems.
- When you need to verify the performance of a coupler design before committing to physical fabrication.
- When you need to perform signal sampling using directional couplers.
Advantages
- Streamlines the design process for complex RF components using predefined catalog objects.
- Provides built-in analysis functions specifically tailored for coupler performance metrics.
- Helps prevent simulation failures by providing memory estimation tools for dense meshes.
- Ensures consistent design practices by enforcing a strict order of operations for material and geometry setup.
Usage examples
- “Design a 3 GHz Wilkinson power splitter and check its memory requirements.”
- The agent will instantiate a wilkinsonSplitter, call the design function for 3 GHz, and execute memoryEstimate to report the expected mesh density and memory usage.
- “How do I analyze the isolation of a branchline coupler?”
- The agent will explain the use of the isolation function on a branchline coupler object, providing a code snippet to plot the isolation over a specified frequency range.
- “Create a 4-port corporate power divider for a 5 GHz array.”
- The agent will configure a powerDividerCorporate object, set the number of output ports to 4, and call the design function at 5 GHz.
- “How can I improve the directivity of my branchline coupler?”
- The agent will suggest adding a Defected Ground Structure (DGS) using the dgs function and provide the necessary code to apply a dumbbell-shaped DGS to the coupler.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/matlab/matlab-design-pcb-coupler/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip matlab-design-pcb-coupler.zip -d .agents/skills
Documentation by MathWorks
Designing Couplers and Splitters
When to Use
Designing Wilkinson splitters (equal, unequal, wideband) for power division
Creating branchline or ratrace couplers for quadrature or sum/difference networks
Building corporate power dividers for array feed networks
Designing directional couplers for signal sampling
Creating SIW splitters or Rotman lenses for beam-forming
When NOT to Use
Designing transmission lines — use
matlab-design-pcb-transmission-lineDesigning filters — use
matlab-design-pcb-filterDesigning passive components (inductors, capacitors, baluns) — use
matlab-design-pcb-passiveCascading couplers with other components — use
matlab-integrate-pcb-circuitOptimizing coupler performance — use
matlab-optimize-pcb-design
Typical Workflow
Before:
matlab-manage-pcb-material— set up substrate and conductorThis skill: Design the coupler or splitter
Check mesh/memory:
memoryEstimate(obj, fc, 'RetainMesh', true)— inspect auto-mesh density before committing to a full solveAfter:
matlab-analyze-em— validate S-parameters →matlab-optimize-pcb-design— tune dimensions →matlab-integrate-pcb-circuit— cascade into larger network
Quick Reference — Component Selection
| Object | Type | Ports | Best For |
|---|---|---|---|
wilkinsonSplitter | Equal power divider | 3 | Standard 2-way equal split |
wilkinsonSplitterUnequal | Unequal power divider | 3 | Asymmetric power distribution |
wilkinsonSplitterWideband | Wideband equal divider | 3 | Multi-octave equal split |
couplerBranchline | 90° hybrid | 4 | Quadrature combining/splitting |
couplerBranchlineWideband | Wideband 90° hybrid | 4 | Multi-section wideband quadrature |
couplerRatrace | 180° hybrid | 4 | Sum/difference networks |
couplerDirectional | Directional coupler | 4 | Sampling, multi-section symmetric |
splitterTee | T-junction | 3 | Simple reactive split |
powerDividerCorporate | N-way corporate | N+1 | Array feed networks |
SIWSplitter | SIW power divider | 3 | High-freq waveguide split |
rotmanLens | Beam-forming network | N beam + N array | True-time-delay phased arrays |
Wilkinson Splitters
Equal Split
ws = design(wilkinsonSplitter, 3e9);
show(ws);
memoryEstimate(ws, 3e9, 'RetainMesh', true); % Check mesh before solving
sp = sparameters(ws, linspace(1e9, 5e9, 51), 'SweepOption', 'interp');
rfplot(sp);Key properties: SplitLineLength, SplitLineWidth, Resistance, PortLineLength, PortLineWidth, GroundPlaneWidth.
Unequal Split
ws = wilkinsonSplitterUnequal;
ws = design(ws, 3e9);
show(ws);The power division ratio is controlled by the impedance transformation arms.
Property reference (2-element vector properties):
| Property | Description | Default |
|---|---|---|
SplitLineLength | Length of split lines (m) | 0.0279 |
SplitLineWidth | Width of split lines (m) | [0.0014 0.0049] (2-element vector: one per arm) |
MatchLineLength | Length of output matching lines (m) | 0.0277 |
MatchLineWidth | Width of output matching lines (m) | [0.0039 0.0066] (2-element vector: one per arm) |
Resistance | Isolation resistor (ohms) | 106 |
Wideband Wilkinson
Multi-section for extended bandwidth:
ws = wilkinsonSplitterWideband;
ws = design(ws, 5e9);
show(ws);
sp = sparameters(ws, linspace(2e9, 8e9, 51), 'SweepOption', 'interp');
rfplot(sp);Property reference (vector properties scale with NumSections):
| Property | Description | Default (3 sections) |
|---|---|---|
NumSections | Number of cascaded sections | 3 |
Shape | Shape of sections | "Rectangular" ("Circular") |
SplitLineWidth | Width of quarter-wave transformers (m) | [8.55e-04 0.0014 0.0021] (vector, one per section) |
Resistance | Isolation resistor values (ohms) | [100 183.40 141.42] (vector, one per section) |
Multi-Layer Wilkinson
ws = design(wilkinsonSplitter, 5e9);
sub = dielectric("FR4", "Teflon");
sub.Thickness = [1e-3 0.5e-3]; % Set Thickness BEFORE assigning to component
ws.Substrate = sub;
ws.Height = 1.5e-3;
show(ws);Branchline Couplers
Standard (Single-Section)
bl = design(couplerBranchline, 5e9);
show(bl);
freq = linspace(3e9, 7e9, 51);
sp = sparameters(bl, freq, 'SweepOption', 'interp');
rfplot(sp);Key properties: SeriesArmLength, SeriesArmWidth, ShuntArmLength, ShuntArmWidth, PortLineLength, PortLineWidth.
Wideband (Multi-Section)
blw = couplerBranchlineWideband;
blw.NumSections = 3;
blw = design(blw, 5e9);
show(blw);Property reference (vector properties scale with NumSections):
| Property | Description | Default (2 sections) |
|---|---|---|
NumSections | Number of branchline sections | 2 |
SeriesArmWidth | Width of series arms (m) | 0.0051 (scalar or vector) |
ShuntArmWidth | Width of shunt arms (m) | [0.00096 0.0029 0.00096] (vector, NumSections+1 elements) |
IsShielded | Add metal shielding | false |
Branchline with DGS
Adding DGS improves directivity and isolation:
bl = design(couplerBranchline, 5e9);
dgsShape = dumbbell;
dgsShape.SideLength = 3e-3; % Head size (default Type='Square')
dgsShape.ArmLength = 5e-3;
dgsShape.ArmWidth = 0.3e-3;
bl = dgs(bl, {dgsShape}); % Must capture return value
show(bl);Analysis Methods for Couplers
freq = linspace(3e9, 7e9, 51);
% Coupling factor (S31 for branchline)
coupling(bl, freq);
% Directivity
directivity(bl, freq);
% Isolation (S41 for branchline)
isolation(bl, freq);Ratrace Coupler
180° hybrid (sum/difference port):
rr = design(couplerRatrace, 5e9);
show(rr);
freq = linspace(3e9, 7e9, 51);
sp = sparameters(rr, freq, 'SweepOption', 'interp');
rfplot(sp);
% Analysis
coupling(rr, freq);
directivity(rr, freq);
isolation(rr, freq);Key properties: RingRadius, RingWidth, PortLineWidth, PortLineLength.
Charge and Current on Ratrace
figure; current(rr, 5e9);
figure; charge(rr, 5e9);Directional Coupler
Multi-section symmetric directional coupler. Note: couplerDirectional does not have a design function — set properties manually:
dc = couplerDirectional;
dc.NumSections = 3;
dc.Width = [2.8e-3 2.8e-3 2.8e-3]; % One value per section
dc.Spacing = [1.3e-3 1.3e-3 1.3e-3]; % One value per section
dc.GroundPlaneLength = 0.15; % Must accommodate total length
show(dc);
freq = linspace(3e9, 7e9, 51);
coupling(dc, freq);
directivity(dc, freq);Key properties: NumSections, Length (scalar), Width (vector, one per section), Spacing (vector, one per section), PortLineWidth, GroundPlaneLength.
Tee Junction and Corporate Dividers
Splitter Tee
Simple reactive T-junction. The Shape property controls the junction geometry:
| Shape Value | Description |
|---|---|
'RectangularMitered' | Rectangular with mitered bends (default) |
'RectangularCurved' | Rectangular with curved bends |
'Circular' | Circular junction |
st = splitterTee;
st = design(splitterTee, 5e9);
show(st);
sp = sparameters(st, linspace(3e9, 7e9, 51), 'SweepOption', 'interp');
rfplot(sp);
% Circular shape variant
st2 = splitterTee(Shape='Circular');
st2 = design(st2, 5e9);
show(st2);Corporate Power Divider (N-way)
For array feed networks:
cpd = powerDividerCorporate;
cpd.NumOutputPorts = 4; % 1:4 divider
cpd = design(cpd, 5e9);
show(cpd);
sp = sparameters(cpd, linspace(3e9, 7e9, 51), 'SweepOption', 'interp');
rfplot(sp);8-Way Corporate Divider
cpd = powerDividerCorporate;
cpd.NumOutputPorts = 8;
cpd = design(cpd, 2.4e9);
show(cpd);SIW Splitter
siw_s = SIWSplitter;
siw_s = design(siw_s, 10e9);
show(siw_s);The FeedLine property is a traceTapered object controlling the microstrip-to-SIW transition:
siw_s.FeedLine.InputWidth = 1e-3;
siw_s.FeedLine.OutputWidth = 3e-3;
show(siw_s);Design Workflow
Select topology based on requirements (equal/unequal split, bandwidth, isolation)
Design at center frequency:
obj = design(ObjectType, fc)Visualize:
show(obj)Analyze S-parameters:
sparameters(obj, freq, 'SweepOption', 'interp')Check metrics:
coupling,directivity,isolationCustomize: Adjust properties for specific impedance, substrate, dimensions
Optimize if needed (see
matlab-optimize-pcb-design)
Coupler-Specific Analysis Functions
These functions are available on 4-port coupler objects: couplerBranchline, couplerBranchlineWideband, couplerRatrace, couplerDirectional.
| Function | What It Measures | Signature |
|---|---|---|
coupling(obj, freq) | Coupling factor (dB) — power transferred to coupled port | Plots by default; cVal = coupling(obj, freq) returns values |
directivity(obj, freq) | Directivity (dB) — separation of forward vs. backward coupled power | Plots by default; dVal = directivity(obj, freq) returns values |
isolation(obj, freq) | Isolation (dB) — power leakage to the isolated port | Plots by default; iVal = isolation(obj, freq) returns values |
c = design(couplerBranchline, 2.4e9);
freq = linspace(2e9, 3e9, 101);
coupling(c, freq); % plots coupling factor
cVal = coupling(c, freq); % returns numeric values (dB)
directivity(c, freq); % plots directivity
dVal = directivity(c, freq); % returns numeric values (dB)
isolation(c, freq); % plots isolation
iVal = isolation(c, freq); % returns numeric values (dB)Port Numbering Convention
3-Port (Splitters)
| Port | Function |
|---|---|
| 1 | Input |
| 2 | Output (through) |
| 3 | Output (split) |
4-Port (Couplers)
| Port | Branchline | Ratrace |
|---|---|---|
| 1 | Input | Input |
| 2 | Through (-3dB, 0°) | Sum |
| 3 | Coupled (-3dB, -90°) | Difference |
| 4 | Isolated | Through |
Rotman Lens (Beam-Forming Network)
rotmanLens is an N-beam, N-array true-time-delay beam-forming network.
lens = rotmanLens;
lens.NumBeamPorts = 4;
lens.NumArrayPorts = 4;
lens.NumDummyPorts = 4; % Absorb reflected energy at lens edges
lens.BeamPortAngle = 40; % Angular spread of beam ports (degrees)
lens.MaxScanAngle = 30; % Maximum scan angle (degrees)
lens.Height = 5.08e-4;
lens.Conductor = metal("Copper");
show(lens);
layout(lens);Key properties: OnaxisFocalLength, OffaxisFocalLength (auto-computed from scan angle). BeamTaper and ArrayTaper control the tapered feed line shapes (traceTapered objects).
SIW Power Divider
SIWSplitter is a substrate integrated waveguide 1:2 power divider.
s = SIWSplitter;
s.InputLineLength = 0.0155;
s.SplitLineLength = 0.0145;
s.Width = 0.0125;
s.ViaSpacing = [0.0017, 0.011]; % [wall via spacing, split via spacing]
s.ViaDiameter = 5e-4;
s.PostDiameter = 2.54e-4;
s.PostOffsetX = 5.5e-3;
s.Height = 8e-4;
show(s);Custom feed lines via FeedLine property:
s.FeedLine = traceRectangular(Length=3e-3, Width=2e-3);Pitfalls
Use interpolating sweep for S-parameters: Always use
sparameters(obj, freq, 'SweepOption', 'interp')for MoM solves. Direct sweeps solve at every frequency point individually and are significantly slower.Check mesh density before solving: Catalog couplers generate dense auto-meshes that dominate runtime. Always run
memoryEstimate(obj, fc, 'RetainMesh', true)beforesparameters(). If memory is excessive, coarsen:mesh(obj, 'MaxEdgeLength', lambda/6). Seematlab-analyze-emfor full mesh inspection workflow.Resistance in Wilkinson: The isolation resistor value defaults to 100 ohm (2×Z0). For non-50-ohm systems, adjust
Resistanceproperty accordingly.Port numbering varies: Different coupler types number ports differently. Always check with
show(obj)which port is which before interpreting S-parameters.Wideband coupler sections: More sections = wider bandwidth but larger size. Each section adds approximately a quarter-wavelength at center frequency.
Corporate divider symmetry:
powerDividerCorporaterequiresNumOutputPortsto be a power of 2 (2, 4, 8, 16...).Corporate divider substrate:
powerDividerCorporate.Substrateis read-only. Set the substrate oncorp.SplitterElement.Substrateinstead — the corporate divider builds from its unitSplitterElement(awilkinsonSplitter). Note:design()may override the substrate thickness.Corporate dividers have large mesh: Multi-way corporate dividers are physically large structures. Memory requirements can exceed hundreds of GB at high frequencies. Use behavioral S-parameters (
'Behavioral', true) for fast amplitude/phase balance verification when full-wave is infeasible.Set substrate BEFORE design():
design(obj, fc)auto-sizes dimensions based on the current substrate. Setting substrate afterdesign()changes the material but does NOT re-compute dimensions — causing incorrect impedance. Always: setSubstratefirst, then calldesign().DGS coupling: Adding DGS to couplers can improve directivity by 10-15 dB but slightly shifts center frequency. Re-tune after adding DGS.
SplitterTee is reactive: Unlike Wilkinson, the T-junction is a reactive (lossless) split — output ports are not isolated from each other. Use Wilkinson when isolation matters.
No design() for couplerDirectional:
couplerDirectionaldoes not supportdesign(). SetLength,Width,Spacing, andNumSectionsmanually.couplerDirectional multi-section dimensions: When
NumSections > 1,WidthandSpacingmust be vectors with one element per section.Lengthremains scalar. Also increaseGroundPlaneLengthto accommodate the longer structure — the default only fits 1 section.Cascading couplers with stubs/resonators: To physically attach a stub or resonator to a coupler port, use
pcbcascade(pcbComponent(coupler), pcbComponent(stub), portA, portB). MatchHeight,Substrate, andConductorbetween the two objects. The connected ports disappear — verify surviving port count withshow(combined). Seematlab-integrate-pcb-circuitfor cascade details.Catalog couplers are MoM-only: Objects like
couplerBranchlineonly support MoM natively. To use FEM, wrap inpcbComponentand setSolverTypeafter construction (not during):bl = design(couplerBranchline, 5e9); pcb = pcbComponent(bl); pcb.SolverType = 'FEM'; s = solver(pcb); s.BoundaryCondition = 'perfectly-matched-layer';Do NOT pass
SolverTypeas a name-value topcbComponent(). FEM requires the IDMF solver engine (WSL on Windows) — ifidmf_hubis missing, use MoM instead. Seematlab-analyze-emfor FEM prerequisites and troubleshooting.
Related Skills
matlab-manage-pcb-material— Substrate configurationmatlab-analyze-em— S-parameter and field analysismatlab-optimize-pcb-design— Optimizing coupler/splitter performancematlab-integrate-pcb-circuit— Combining splitters with other components
Copyright 2026 The MathWorks, Inc.
Files
- ATTRIBUTION.mdAdded by AutoGineer1.0 KiB
- LICENSELicence file added by AutoGineer1.4 KiB
- SKILL.md15.9 KiB
- manifest.yaml478 B
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- MathWorks
- Publisher
- MathWorks (Official)
- Source
- matlab/matlab-agentic-toolkit · skills-catalog/rf-and-mixed-signal/matlab-design-pcb-coupler · commit 2a7f215
- Licence
- BSD 2-Clause License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE.md)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by MathWorks or MathWorks.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download matlab-design-pcb-coupler.zip