Wilkinson, branchline, ratrace, directional couplers, corporate dividers, Rotman lenses for power splitting and beam-forming. TRIGGER: user asks to design, create, or analyze any coupler, splitter, power divider, combiner, or Rotman lens. Invoke BEFORE writing code — class names and design() availability vary per coupler type. SKIP: EM simulation/S-parameter extraction of an existing component (use matlab-analyze-em), building custom non-catalog geometry (use matlab-assemble-pcb-layout), material/stackup setup only (use matlab-manage-pcb-material), cascading multiple components (use matlab-integrate-pcb-circuit).
npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-design-pcb-coupler
matlab-design-pcb-txlinematlab-design-pcb-filtermatlab-design-pcb-passivematlab-integrate-pcb-circuitmatlab-optimize-pcb-designmatlab-manage-pcb-material — set up substrate and conductormemoryEstimate(obj, fc, 'RetainMesh', true) — inspect auto-mesh density before committing to a full solvematlab-analyze-em — validate S-parameters → matlab-optimize-pcb-design — tune dimensions → matlab-integrate-pcb-circuit — cascade into larger network| 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 |
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.
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 |
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) |
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);
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.
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 |
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);
freq = linspace(3e9, 7e9, 51);
% Coupling factor (S31 for branchline)
coupling(bl, freq);
% Directivity
directivity(bl, freq);
% Isolation (S41 for branchline)
isolation(bl, freq);
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.
figure; current(rr, 5e9);
figure; charge(rr, 5e9);
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.
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);
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);
cpd = powerDividerCorporate;
cpd.NumOutputPorts = 8;
cpd = design(cpd, 2.4e9);
show(cpd);
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);
obj = design(ObjectType, fc)show(obj)sparameters(obj, freq, 'SweepOption', 'interp')coupling, directivity, isolationmatlab-optimize-pcb-design)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 | Function |
|------|----------|
| 1 | Input |
| 2 | Output (through) |
| 3 | Output (split) |
| Port | Branchline | Ratrace |
|------|-----------|---------|
| 1 | Input | Input |
| 2 | Through (-3dB, 0°) | Sum |
| 3 | Coupled (-3dB, -90°) | Difference |
| 4 | Isolated | Through |
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).
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);
sparameters(obj, freq, 'SweepOption', 'interp') for MoM solves. Direct sweeps solve at every frequency point individually and are significantly slower.memoryEstimate(obj, fc, 'RetainMesh', true) before sparameters(). If memory is excessive, coarsen: mesh(obj, 'MaxEdgeLength', lambda/6). See matlab-analyze-em for full mesh inspection workflow.Resistance property accordingly.show(obj) which port is which before interpreting S-parameters.powerDividerCorporate requires NumOutputPorts to be a power of 2 (2, 4, 8, 16...).powerDividerCorporate.Substrate is read-only. Set the substrate on corp.SplitterElement.Substrate instead — the corporate divider builds from its unit SplitterElement (a wilkinsonSplitter). Note: design() may override the substrate thickness.'Behavioral', true) for fast amplitude/phase balance verification when full-wave is infeasible.design(obj, fc) auto-sizes dimensions based on the current substrate. Setting substrate after design() changes the material but does NOT re-compute dimensions — causing incorrect impedance. Always: set Substrate first, then call design().10. DGS coupling: Adding DGS to couplers can improve directivity by 10-15 dB but slightly shifts center frequency. Re-tune after adding DGS.
11. 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.
12. No design() for couplerDirectional: couplerDirectional does not support design(). Set Length, Width, Spacing, and NumSections manually.
13. couplerDirectional multi-section dimensions: When NumSections > 1, Width and Spacing must be vectors with one element per section. Length remains scalar. Also increase GroundPlaneLength to accommodate the longer structure — the default only fits 1 section.
14. Cascading couplers with stubs/resonators: To physically attach a stub or resonator to a coupler port, use pcbcascade(pcbComponent(coupler), pcbComponent(stub), portA, portB). Match Height, Substrate, and Conductor between the two objects. The connected ports disappear — verify surviving port count with show(combined). See matlab-integrate-pcb-circuit for cascade details.
15. Catalog couplers are MoM-only: Objects like couplerBranchline only support MoM natively. To use FEM, wrap in pcbComponent and set SolverType after construction (not during):
bl = design(couplerBranchline, 5e9);
pcb = pcbComponent(bl);
pcb.SolverType = 'FEM';
s = solver(pcb);
s.BoundaryCondition = 'perfectly-matched-layer';
Do NOT pass SolverType as a name-value to pcbComponent(). FEM requires the IDMF solver engine (WSL on Windows) — if idmf_hub is missing, use MoM instead. See matlab-analyze-em for FEM prerequisites and troubleshooting.
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.
Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use for complex artifacts requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX artifacts.
Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use for complex artifacts requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX artifacts.
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
Set up Tailwind CSS v4 in Expo with react-native-css and NativeWind v5 for universal styling
Use Expo DOM components to run web code in a webview on native and as-is on web. Migrate web code to native incrementally.
Take matlab/matlab-design-pcb-coupler from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.