Skip to content
cccskills
FreePublished on GitHub

matlab-design-pcb-passive

Spiral inductors, interdigital capacitors, baluns, resonators, phase shifters for impedance matching, DC blocking, and bias tees. TRIGGER: user asks to design or create a spiral inductor, interdigital capacitor, balun, resonator, phase shifter, or other passive RF component. Invoke BEFORE writing code — class names and property patterns are non-obvious. SKIP: filter design (use matlab-design-pcb-filter), coupler/splitter design (use matlab-design-pcb-coupler), transmission line design (use matlab-design-pcb-transmission-line), EM analysis (use matlab-analyze-em), material setup only (use matlab-manage-pcb-material).

The English summary is being prepared. Showing the original description.

See how to install

Files included (3)

  • SKILL.md13.4 KB
  • manifest.yaml480 B
  • references/resonators-detail.md3.5 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Designing Passive Components

When to Use

  • Designing spiral inductors or interdigital capacitors for RF circuits
  • Extracting inductance, capacitance, or self-resonant frequency from passive components
  • Creating ring or split-ring resonators for filtering or metamaterial applications
  • Designing coupled-line or Marchand baluns for balanced-to-unbalanced conversion
  • Building Schiffman phase shifters or radial stubs

When NOT to Use

  • Designing transmission lines (microstrip, stripline, CPW) — use matlab-design-pcb-transmission-line
  • Designing filters (bandpass, lowpass, bandstop) — use matlab-design-pcb-filter
  • Designing couplers or splitters — use matlab-design-pcb-coupler
  • Setting up substrate materials — use matlab-manage-pcb-material
  • Running EM analysis after design — use matlab-analyze-em

Typical Workflow

  1. Before: matlab-manage-pcb-material — set up substrate and conductor
  2. This skill: Design the passive component (inductor, capacitor, balun, resonator)
  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 circuit

Quick Reference

TaskCode
Spiral inductorind = spiralInductor
Interdigital capacitorcap = interdigitalCapacitor
Extract inductanceL = inductance(ind, freq)
Extract capacitanceC = capacitance(cap, freq, DeEmbed=true)
Behavioral S-paramsS = sparameters(obj, freq, Behavioral=true)
Ring resonatorr = design(resonatorRing, freq)
Split-ring (custom)r = resonatorSplitRingCustom
Split-ring (square)r = resonatorSplitRingSquare
Coupled-line balunb = balunCoupledLine
Marchand balunb = balunMarchand
Phase shifterps = design(phaseShifter, freq, PhaseShift=90)
Radial stubstub = stubRadialShunt
Optimizeoptimize(obj, freq, ...)

Spiral Inductors

Creating and Configuring

ind = spiralInductor;
ind.SpiralShape    = 'Square';      % 'Square' | 'Circle' | 'Hexagon' | 'Octagon'
ind.InnerDiameter  = 5e-4;
ind.Width          = 2.5e-4;
ind.Spacing        = 2.5e-4;
ind.NumTurns       = 4;
ind.Height         = 1.016e-3;      % Must be a cumulative substrate layer boundary
ind.GroundPlaneLength = 5.6e-3;
ind.GroundPlaneWidth  = 5.6e-3;

RFIC Substrates (Silicon/SiO2)

ind = spiralInductor;
ind.Substrate = dielectric('Name', {'Silicon','SiO2'}, ...
    'EpsilonR', [11.9, 4.1], 'LossTangent', [0.005, 0], ...
    'Thickness', [300e-6, 3e-6]);
ind.Height = 303e-6;              % Signal trace at top of stack

Spiral Shape and Q-Factor Tradeoffs

ShapeQ-FactorNotes
'Circle'HighestBest electrical performance
'Octagon'HighClose to circular; easier to fabricate
'Hexagon'ModerateCompromise
'Square'LowestEasiest to manufacture; current crowding at corners

Ground Plane Proximity Effect

Smaller Height increases capacitive coupling to ground, reducing inductance, Q-factor, and self-resonant frequency. Account for this when the PCB stackup constrains Height.

Inductance Extraction

L = inductance(ind, 600e6);                        % Scalar frequency → scalar (H)
L = inductance(ind, linspace(100e6, 1e9, 30));     % Vector → vector

Self-Resonant Frequency (SRF)

At SRF, parasitic capacitance resonates with inductance — impedance peaks, then the inductor behaves as a capacitor. Design so the operating band stays below SRF/3 to SRF/2.

freq = linspace(100e6, 10e9, 201);
L = inductance(ind, freq);
% Sign change: L > 0 (inductive) → L < 0 (capacitive) at SRF

Visualization

show(ind)
current(ind, 600e6)
charge(ind, 600e6)
[E, H] = EHfields(ind, 4e9, [0; 0; 1]);

Interdigital Capacitors

Creating and Configuring

cap = interdigitalCapacitor;
cap.NumFingers         = 4;
cap.FingerLength       = 0.0137;
cap.FingerWidth        = 3.16e-4;
cap.FingerSpacing      = 3e-4;
cap.FingerEdgeGap      = 3.41e-4;
cap.TerminalStripWidth = 5e-4;
cap.PortLineWidth      = 1.9e-3;
cap.PortLineLength     = 3e-3;
cap.Height             = 7.87e-4;

Capacitance Extraction

C = capacitance(cap, 5e9);                                          % Raw
C = capacitance(cap, 5e9, DeEmbed=true);                            % De-embedded
C = capacitance(cap, 5e9, DeEmbed=true, IncludeParasitics=true);    % With parasitics
  • DeEmbed removes feed line effects to isolate the capacitor.
  • IncludeParasitics adds parasitic inductance/resistance from the finger structure.

Behavioral S-Parameters

Both spiralInductor and interdigitalCapacitor support fast behavioral models:

S = sparameters(ind, freq, Behavioral=true);     % ~instant
S = sparameters(cap, freq, Behavioral=true);

Use for initial exploration; switch to full-wave (Behavioral=false, the default) for validation. Before a full-wave solve, always check mesh density:

memoryEstimate(ind, fc, 'RetainMesh', true);  % Check auto-mesh before full-wave
sp = sparameters(ind, freq, 'SweepOption', 'interp');

Ring Resonators

resonatorRing is a microstrip ring resonator coupled to two feed lines via a gap.

r = resonatorRing;
r.RingRadiusOuter = 0.01;
r.RingWidth       = 4e-3;
r.CouplingGap     = 1e-3;
r.PortLineLength  = 0.01;
r.PortLineWidth   = 5e-3;
r.Height          = 1.6e-3;
r.GroundPlaneWidth = 0.04;

Frequency-Based Design

r = design(resonatorRing, 1.8e9);                  % 50 Ω default
r = design(resonatorRing, 2.5e9, Z0=75);            % 75 Ω

Split-Ring Resonators

Two object types: resonatorSplitRingCustom (pluggable shape) and resonatorSplitRingSquare (pre-configured square).

Custom Split-Ring Resonator

r = resonatorSplitRingCustom;
sr = splitRing(Type="Hexagon", NumRings=3);
sr.SplitSide = [2 3 5];
r.Resonator = sr;
r.FeedType  = 'Tapped';         % 'Tapped' (default) or 'Coupled'
r.PortLineLength = 0.01;
r.PortLineWidth  = 7.5e-4;
r.Height = 8.13e-4;

Square Split-Ring Resonator

r = resonatorSplitRingSquare;
r.RingLengthInner   = 3.6e-3;
r.RingWidth          = 5e-4;
r.RingSpacing        = 3e-4;
r.SplitGap           = 5e-4;
r.CouplingGap        = 2.5e-4;
r.NumResonator       = 5;
r.ResonatorSpacing   = 4e-3;

For the full splitRing shape property table, CSRR ground-plane etching, and SIW integration patterns, see references/resonators-detail.md.

Coupled-Line Baluns

balunCoupledLine is a 3-section coupled-line balun (balanced-to-unbalanced converter).

b = balunCoupledLine;
b.NumCoupledLineSection = 3;
b.CoupledLineLength     = 0.0153;
b.CoupledLineWidth      = 4e-4;
b.CoupledLineSpacing    = 1.4e-4;
b.OutputLineLength      = 0.0124;
b.OutputLineWidth       = 1.53e-4;
b.OutputLineSpacing     = 0.011;
b.Height                = 1.3e-3;

balunCoupledLine has no design() method. Use designCoupledLine, designOutputLine, designUncoupledLine for section-by-section sizing from impedance targets. See references/resonators-detail.md for the full API.

Marchand Baluns

balunMarchand is a broadband balun using λ/4 coupled-line sections.

bm = balunMarchand;
bm.CoupledLineLength  = 0.0178;
bm.CoupledLineWidth   = 3e-3;
bm.CoupledLineSpacing = 1.5e-4;
bm.OutputLineLength   = 0.016;
bm.OutputLineWidth    = 2.9e-4;
bm.Height             = 1.6e-3;

No design() method. Set dimensions manually or use optimize().

Phase Shifters

phaseShifter is a Schiffman-type phase shifter using coupled-line sections.

ps = design(phaseShifter, 1.8e9);                    % Default phase shift
ps = design(phaseShifter, 1.8e9, PhaseShift=90);      % 90° phase shift

Properties

ps.NumSections  = 1;
ps.PortLineLength = 0.01;
ps.PortLineWidth  = 5e-3;
ps.Height         = 1.6e-3;
ps.SectionShape   = ubendRightAngle;     % Default U-bend shape

Radial Stubs

stubRadialShunt creates a single- or double-radial stub shunt. Radial stubs provide wideband short-circuit behavior compared to rectangular stubs.

stub = stubRadialShunt;
stub.StubType       = "Single";     % "Single" (default) or "Double"
stub.OuterRadius    = 8.5e-3;
stub.InnerRadius    = 1.2e-3;
stub.Angle          = 90;           % Range [5, 175] degrees
stub.PortLineWidth  = 2.5e-3;
stub.PortLineLength = 0.0137;
stub.Height         = 1.6e-3;

For double-stub vector property configuration, see references/resonators-detail.md.

Circuit Integration

Wrap passive components in pcbElement for RF Toolbox circuit assembly:

ckt = circuit;
c1 = interdigitalCapacitor;
c2 = interdigitalCapacitor(NumFingers=3);
p = pcbElement(c2, 'Behavioral', false);
add(ckt, [1 2 0 0], c1);
add(ckt, [2 3 0 0], p);
setports(ckt, [1 0], [3 0]);
S = sparameters(ckt, 8e9);

Optimization

All objects in this skill support optimize():

ind = spiralInductor(NumTurns=3);
optimize(ind, linspace(1e9, 3e9, 11), ...
    'Properties', {'Width', 'Spacing', 'InnerDiameter'}, ...
    'LowerBound', [1e-4, 1e-4, 3e-4], ...
    'UpperBound', [5e-4, 5e-4, 1e-3], ...
    'Objective', 'maximizeBandwidth');

Multilayer Dielectric Pattern

All objects follow the same pattern — set Thickness before assigning to the component:

sub = dielectric('FR4', 'Teflon');
sub.Thickness = [1.6e-3, 0.8e-3];
obj.Substrate = sub;
obj.Height = 0.8e-3;    % Must match a cumulative layer boundary

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: Spiral inductors and interdigital capacitors generate dense auto-meshes. 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. No design() for inductors/capacitors. spiralInductor and interdigitalCapacitor have no design() method. Set dimensions manually or use optimize().

  4. Inductance/capacitance are frequency-dependent. Both require a frequency argument — no DC extraction. Parasitic effects shift the value at high frequencies.

  5. DeEmbed matters for capacitance. Without DeEmbed=true, extracted capacitance includes feed line contributions.

  6. SpiralShape is case-sensitive. Use 'Square', 'Circle', 'Hexagon', 'Octagon'.

  7. Behavioral vs full-wave accuracy. Behavioral S-parameters diverge near SRF (inductors) or finger resonances (capacitors).

  8. Height must be a cumulative substrate boundary. For Thickness=[t1, t2], valid Heights are t1, t1+t2. Applies to all objects in this skill.

  9. spiralInductor requires multi-layer substrate. The underpass feed routing needs ≥ 2 dielectric layers. A single layer errors with "More than one substrate is required."

  10. GroundPlane dimensions. Keep ground plane ≥ 2× the component footprint to avoid truncating fringing fields.

  11. No design() for baluns. balunCoupledLine and balunMarchand have no design() method. Use section-design functions or optimize().

  12. No design() for split-ring resonators. Only resonatorRing supports design().

  13. splitRing is a shape, not a component. Cannot be analyzed directly — attach to resonatorSplitRingCustom or embed in a pcbComponent.

  14. PhaseShift units are degrees. The PhaseShift parameter in design(phaseShifter, ...) is degrees, not radians.

  15. stubRadialShunt has no design() method. Set dimensions manually or use optimize().

  16. Polygonal SplitSide defaults may be invalid. Hexagons require SplitSide from {2, 3, 5, 6}. Always set explicitly for polygonal types with multiple rings.

Related Skills

  • matlab-manage-pcb-material — Substrate and conductor setup
  • matlab-analyze-em — S-parameters, fields, mesh control
  • matlab-optimize-pcb-design — optimize() syntax, objectives, solvers
  • matlab-integrate-pcb-circuit — pcbElement circuit integration
  • matlab-design-pcb-filter — SIW filters can embed split-ring resonators
  • matlab-assemble-pcb-layout — Custom CSRR structures via pcbComponent + Boolean ops
  • matlab-design-pcb-coupler — Related coupled-line structures

Copyright 2026 The MathWorks, Inc.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

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.

The English summary is being prepared. Showing the original description.

matlab/matlab-agentic-toolkit1.2KUpdated Oct 14, 2026

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.

The English summary is being prepared. Showing the original description.

matlab/matlab-agentic-toolkit1.2KUpdated Oct 14, 2026

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.

The English summary is being prepared. Showing the original description.

matlab/matlab-agentic-toolkit1.2KUpdated Oct 14, 2026

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.

The English summary is being prepared. Showing the original description.

matlab/matlab-agentic-toolkit1.2KUpdated Oct 14, 2026

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.

The English summary is being prepared. Showing the original description.

matlab/matlab-agentic-toolkit1.2KUpdated Oct 14, 2026

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

The English summary is being prepared. Showing the original description.

matlab/matlab-agentic-toolkit1.2KUpdated Oct 14, 2026

See all skills by matlab

Report a problem with this skill