Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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), materia
.claude/skills/matlab-matlab-design-pcb-coupler/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 29% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 48% | 0% |
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 |
matlabws = 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.
matlabws = 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:
matlabws = 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) |
matlabws = 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);
matlabbl = 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.
matlabblw = 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:
matlabbl = 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);
matlabfreq = 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):
matlabrr = 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.
matlabfigure; current(rr, 5e9); figure; charge(rr, 5e9);
Multi-section symmetric directional coupler. Note: couplerDirectional does not have a design function — set properties manually:
matlabdc = 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 |
matlabst = 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:
matlabcpd = powerDividerCorporate; cpd.NumOutputPorts = 4; % 1:4 divider cpd = design(cpd, 5e9); show(cpd); sp = sparameters(cpd, linspace(3e9, 7e9, 51), 'SweepOption', 'interp'); rfplot(sp);
matlabcpd = powerDividerCorporate; cpd.NumOutputPorts = 8; cpd = design(cpd, 2.4e9); show(cpd);
matlabsiw_s = SIWSplitter; siw_s = design(siw_s, 10e9); show(siw_s);
The FeedLine property is a traceTapered object controlling the microstrip-to-SIW transition:
matlabsiw_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 |
matlabc = 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.
matlablens = 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.
matlabs = 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:
matlabs.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().couplerDirectional does not support design(). Set Length, Width, Spacing, and NumSections manually.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.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.couplerBranchline only support MoM natively. To use FEM, wrap in pcbComponent and set SolverType after construction (not during):matlab 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 componentsCopyright 2026 The MathWorks, Inc.
Other measured skills in the registry, with their headline benchmark lift.