本文へ移動
cccskills
無料GitHub で公開

matlab-design-pcb-coupler

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).

インストール方法を見る

含まれるファイル(2)

  • SKILL.md15.9 KB
  • manifest.yaml478 B

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

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-line
  • Designing filters — use matlab-design-pcb-filter
  • Designing passive components (inductors, capacitors, baluns) — use matlab-design-pcb-passive
  • Cascading couplers with other components — use matlab-integrate-pcb-circuit
  • Optimizing coupler performance — use matlab-optimize-pcb-design

Typical Workflow

  1. Before: matlab-manage-pcb-material — set up substrate and conductor
  2. This skill: Design the coupler or splitter
  3. Check mesh/memory: memoryEstimate(obj, fc, 'RetainMesh', true) — inspect auto-mesh density before committing to a full solve
  4. After: matlab-analyze-em — validate S-parameters → matlab-optimize-pcb-design — tune dimensions → matlab-integrate-pcb-circuit — cascade into larger network

Quick Reference — Component Selection

ObjectTypePortsBest For
wilkinsonSplitterEqual power divider3Standard 2-way equal split
wilkinsonSplitterUnequalUnequal power divider3Asymmetric power distribution
wilkinsonSplitterWidebandWideband equal divider3Multi-octave equal split
couplerBranchline90° hybrid4Quadrature combining/splitting
couplerBranchlineWidebandWideband 90° hybrid4Multi-section wideband quadrature
couplerRatrace180° hybrid4Sum/difference networks
couplerDirectionalDirectional coupler4Sampling, multi-section symmetric
splitterTeeT-junction3Simple reactive split
powerDividerCorporateN-way corporateN+1Array feed networks
SIWSplitterSIW power divider3High-freq waveguide split
rotmanLensBeam-forming networkN beam + N arrayTrue-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):

PropertyDescriptionDefault
SplitLineLengthLength of split lines (m)0.0279
SplitLineWidthWidth of split lines (m)[0.0014 0.0049] (2-element vector: one per arm)
MatchLineLengthLength of output matching lines (m)0.0277
MatchLineWidthWidth of output matching lines (m)[0.0039 0.0066] (2-element vector: one per arm)
ResistanceIsolation 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):

PropertyDescriptionDefault (3 sections)
NumSectionsNumber of cascaded sections3
ShapeShape of sections"Rectangular" ("Circular")
SplitLineWidthWidth of quarter-wave transformers (m)[8.55e-04 0.0014 0.0021] (vector, one per section)
ResistanceIsolation 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):

PropertyDescriptionDefault (2 sections)
NumSectionsNumber of branchline sections2
SeriesArmWidthWidth of series arms (m)0.0051 (scalar or vector)
ShuntArmWidthWidth of shunt arms (m)[0.00096 0.0029 0.00096] (vector, NumSections+1 elements)
IsShieldedAdd metal shieldingfalse

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 ValueDescription
'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

  1. Select topology based on requirements (equal/unequal split, bandwidth, isolation)
  2. Design at center frequency: obj = design(ObjectType, fc)
  3. Visualize: show(obj)
  4. Analyze S-parameters: sparameters(obj, freq, 'SweepOption', 'interp')
  5. Check metrics: coupling, directivity, isolation
  6. Customize: Adjust properties for specific impedance, substrate, dimensions
  7. 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.

FunctionWhat It MeasuresSignature
coupling(obj, freq)Coupling factor (dB) — power transferred to coupled portPlots by default; cVal = coupling(obj, freq) returns values
directivity(obj, freq)Directivity (dB) — separation of forward vs. backward coupled powerPlots by default; dVal = directivity(obj, freq) returns values
isolation(obj, freq)Isolation (dB) — power leakage to the isolated portPlots 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)

PortFunction
1Input
2Output (through)
3Output (split)

4-Port (Couplers)

PortBranchlineRatrace
1InputInput
2Through (-3dB, 0°)Sum
3Coupled (-3dB, -90°)Difference
4IsolatedThrough

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

  1. 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.

  2. Check mesh density before solving: Catalog couplers generate dense auto-meshes that dominate runtime. Always run 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.

  3. Resistance in Wilkinson: The isolation resistor value defaults to 100 ohm (2×Z0). For non-50-ohm systems, adjust Resistance property accordingly.

  4. Port numbering varies: Different coupler types number ports differently. Always check with show(obj) which port is which before interpreting S-parameters.

  5. Wideband coupler sections: More sections = wider bandwidth but larger size. Each section adds approximately a quarter-wavelength at center frequency.

  6. Corporate divider symmetry: powerDividerCorporate requires NumOutputPorts to be a power of 2 (2, 4, 8, 16...).

  7. Corporate divider substrate: 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.

  8. 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.

  9. Set substrate BEFORE design(): 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.

Related Skills

  • matlab-manage-pcb-material — Substrate configuration
  • matlab-analyze-em — S-parameter and field analysis
  • matlab-optimize-pcb-design — Optimizing coupler/splitter performance
  • matlab-integrate-pcb-circuit — Combining splitters with other components

Copyright 2026 The MathWorks, Inc.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Guide for accessing financial and economic data in MATLAB using the Datafeed Toolbox. Covers Bloomberg (market data via bloomberg/blp/bloombergHypermedia), FRED (Federal Reserve economic data via fredrs), Haver Analytics (economic data via haver/haverdirect/haverview), and LSEG Datastream (historical data via datastreamws). Use when connecting to any of these data providers from MATLAB.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1502026年10月9日 更新

Read BEFORE writing any code that adds Additive White Gaussian Noise (AWGN) to signals and converts between SNR, Eb/No, Es/No, and per-subcarrier SNR for communications simulations, using awgn(), convertSNR(), berawgn(). The default MATLAB patterns for AWGN (e.g., 'measured' option, manual SNR formulas) produce subtly incorrect results. This skill specifies the correct calling conventions, required function usage, and critical anti-patterns that must be avoided.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1502026年10月9日 更新

Analyze AMS waveform data using Mixed-Signal Blockset utilities: phase noise measurement, clock jitter, anti-aliased resampling, timing measurements, lock time, INL/DNL, ADC/DAC calibration, HSpice import. Use when analyzing time-domain voltage from PLL/VCO/clock simulations, measuring phase noise from variable-step solver output, computing jitter, or resampling non-uniform data.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1502026年10月9日 更新

Design and analyze electrically large antenna structures using MATLAB Antenna Toolbox. Covers reflector antennas (parabolic, Cassegrain, Gregorian, offset, corner, cylindrical, spherical, custom STL), reflectarrays and reconfigurable intelligent surfaces (RIS), antennas installed on platforms (vehicles, aircraft, ships, satellites), and radar cross section (RCS) analysis. Includes solver selection (MoM-PO, PO, MoM, FMM), mesh control, and GPU acceleration. Use when the user wants to design a dish/reflector antenna, reflectarray, analyze an antenna on a platform, or compute RCS.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1502026年10月9日 更新

Analyze data using MATLAB. Use when the task involves tables, timetables, time-series data, numeric arrays, sensor matrices, or gridded data — including but not limited to exploring, row filtering, sorting, cleaning, transforming, aggregating, smoothing, padding, trimming, and answering questions about data. MATLAB provides extensive, easy-to-use built-in functions for these workflows with no additional products required.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1502026年10月9日 更新

S-parameters, insertion loss, fields, currents, mesh control, and solver selection for RF PCB performance validation. TRIGGER: user asks to compute S-parameters, analyze insertion/return loss, extract fields or currents, compare MoM vs FEM, or control mesh for any RF PCB component. Invoke BEFORE writing sparameters() or solver code — API is non-obvious. SKIP: designing or creating components (use the specific matlab-design-pcb-* skill), material/stackup setup only (use matlab-manage-pcb-material), optimization sweeps (use matlab-optimize-pcb-design), PDN/IR-drop analysis (use matlab-analyze-pcb-pdn).

日本語の概要は準備中です。原文の説明を表示しています。

matlab/matlab-agentic-toolkit1,1502026年10月9日 更新

matlab のスキルをすべて見る

このスキルの問題を報告する