Generated banner for Matlab Design Pcb Filter
Generated logo for Matlab Design Pcb Filter

Matlab Design Pcb Filter

MathWorksOfficialCreated by MathWorks

  • Skill
  • Tool integration
  • Software development
  • BSD-2-Clause
  • No issues found

From the author

Bandpass, lowpass, bandstop filter design — hairpin, coupled-line, combline, stub, SIW for frequency selection and harmonic rejection. TRIGGER: user asks to design, create, or analyze any RF filter (bandpass, lowpass, highpass, bandstop, hairpin, coupled-line, combline, stub, SIW). Invoke BEFORE writing code — filter class names differ from what you would guess. SKIP: EM simulation/S-parameter extraction of an existing filter (use matlab-analyze-em), general PCB layout assembly (use matlab-assemble-pcb-layout), material/stackup setup only (use matlab-manage-pcb-material), optimization sweeps (use matlab-optimize-pcb-design).
— the description by MathWorks

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a comprehensive framework for designing, configuring, and analyzing RF filters within MATLAB. It supports a wide range of filter topologies—such as hairpin, coupled-line, combline, and SIW—allowing users to define filter parameters, perform initial design synthesis, and extract coupling matrices from measured S-parameter data. It serves as a bridge between theoretical filter requirements and physical PCB layout preparation, emphasizing proper mesh estimation and efficient S-parameter extraction workflows.

What it does

  • Synthesizes filter dimensions for various topologies like hairpin, coupled-line, and stepped-impedance filters.
  • Extracts coupling matrices and quality factors from measured or simulated 2-port S-parameter data.
  • Supports multi-layer dielectric configurations for advanced PCB filter designs.
  • Provides tools for estimating memory requirements and mesh density prior to full electromagnetic simulation.
  • Enables manual configuration of specialized filters like combline and interdigital structures.
  • Facilitates the comparison of extracted circuit models against measured performance data.

When to use it

  • When you need to design a specific RF filter topology for frequency selection or harmonic rejection.
  • When you have measured S-parameter data and need to extract a coupled-resonator circuit model.
  • When you are selecting a filter topology based on bandwidth, size, or selectivity requirements.
  • When you need to verify the feasibility of a filter design before committing to a full EM solve.
  • When you are working with multi-layer PCB substrates for RF applications.

Advantages

  • Streamlines the transition from filter synthesis to physical layout.
  • Includes built-in support for common RF filter topologies, reducing manual calculation time.
  • Provides robust tools for diagnosing measured filter performance via coupling matrix extraction.
  • Integrates seamlessly with broader MATLAB PCB design and analysis workflows.
  • Offers clear guidance on mesh management to optimize simulation performance.

Usage examples

“Design a 3 GHz hairpin bandpass filter.”
The agent initializes a filterHairpin object, calls the design function for 3 GHz, and provides the necessary code to visualize the filter and plot its S-parameters.
“How do I extract a coupling matrix from my measured S-parameter file?”
The agent guides the user through creating a measuredFilter object, using the residue method to extract poles, and calculating the canonical coupling matrix.
“Create a 5th order Chebyshev hairpin filter at 2.4 GHz.”
The agent sets the FilterOrder property to 5 and uses the design function with the specified frequency and Chebyshev filter type parameters.
“How can I check if my filter design will exceed memory limits?”
The agent instructs the user to run the memoryEstimate method on the filter object with the RetainMesh flag enabled before proceeding to S-parameter analysis.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/matlab/matlab-design-pcb-filter/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip matlab-design-pcb-filter.zip -d .agents/skills

Documentation by MathWorks

Designing RF Filters

When to Use

  • Designing bandpass filters (coupled-line, hairpin, open-loop, combline, interdigital, SIW)

  • Designing lowpass filters (stepped-impedance)

  • Designing bandstop or notch filters (spurline, stub-based)

  • Extracting coupling matrices from measured S-parameter data (measuredFilter)

  • Selecting a filter topology for a given bandwidth, selectivity, or size requirement

When NOT to Use

  • Designing transmission lines for impedance control — use matlab-design-pcb-transmission-line

  • Designing couplers or splitters — use matlab-design-pcb-coupler

  • Designing passive components (inductors, capacitors, baluns) — use matlab-design-pcb-passive

  • Setting up substrate or conductor materials — use matlab-manage-pcb-material

  • Optimizing filter dimensions after design — use matlab-optimize-pcb-design

Typical Workflow

  1. Before: matlab-manage-pcb-material — set up substrate and conductor

  2. This skill: Design the filter (catalog object or custom geometry)

  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-write-pcb-layout — export Gerber

Quick Reference — Filter Selection

Filter ObjectTypePolesBest For
filterCoupledLineBandpass2–8General microstrip BPF
filterHairpinBandpass2–8Compact BPF, folded resonators
filterOpenLoopBandpass4/6/8Compact quasi-elliptic
filterComblineBandpass2–6Narrow-band, high-Q
filterInterdigitalBandpass2–8Wideband, good stopband
filterStepImpedanceLowPassLowpass3–9Distributed LPF
filterStubLP/HP/BSN stubsFlexible stub topology
filterSpurlineBandstop1–2Compact notch filter
SIWFilterBandpass2–6High-Q waveguide-in-PCB
measuredFilterBandpassNModel extraction from measurements

Bandpass Filters

Coupled-Line Filter
f = filterCoupledLine;
f = design(filterCoupledLine, 3e9);    % Design at 3 GHz
show(f);
sp = sparameters(f, linspace(1e9, 5e9, 101), 'SweepOption', 'interp');
rfplot(sp);

Key properties: FilterOrder, CoupledLineLength, CoupledLineWidth, CoupledLineSpacing, PortLineLength, PortLineWidth.

Hairpin Filter

Folded coupled-line resonators for compact size:

f = design(filterHairpin, 3e9);
show(f);
memoryEstimate(f, 3e9, 'RetainMesh', true);  % Check mesh density before solving
sp = sparameters(f, linspace(1e9, 5e9, 101), 'SweepOption', 'interp');
rfplot(sp);

Key properties: FilterOrder, CoupledLineLength, CoupledLineWidth, CoupledLineSpacing, PortLineLength, PortLineWidth, Spacing, ResonatorOffset, FeedOffset.

Chebyshev Response

Pass FilterType and RippleFactor to design() for equiripple passband response:

f = design(filterHairpin, 1.8e9, FBW=10, FilterType='Chebyshev', RippleFactor=0.5);

FilterType options: 'Butterworth' (default), 'Chebyshev'. FBW sets fractional bandwidth (%). RippleFactor sets passband ripple in dB (default 0.5) — only applies to Chebyshev.

Fifth-Order Hairpin
f = filterHairpin;
f.FilterOrder = 5;
f = design(f, 2.4e9);
show(f);
Open-Loop Filter

Quasi-elliptic response with cross-coupling:

f = filterOpenLoop;
f.NumPoles = 6;
f.FeedOffset = 0.5e-3;
show(f);
sp = sparameters(f, linspace(1e9, 5e9, 101), 'SweepOption', 'interp');
rfplot(sp);

Key Properties: NumPoles (4/6/8), ResonatorLength, ResonatorWidth, SplitGap, GapHorizontal, GapVertical, FeedOffset, CoupledResonatorGap, QuadrupletGap, QuadrupletOffset.

Combline Filter

Short-circuited resonators, excellent for narrow-band. Note: filterCombline does not have a design function — set properties manually:

f = filterCombline;
f.FilterOrder = 3;
f.Height = 1.6e-3;
show(f);

Key Properties: FilterOrder, ResonatorLength (scalar or vector), ResonatorWidth, ResonatorSpacing (scalar or vector), ResonatorOffset, FeedOffset, Capacitor (loading capacitance — distinctive to combline).

Interdigital Filter

Alternating short-circuited resonators, wideband. Note: filterInterdigital does not have a design function — set properties manually:

f = filterInterdigital;
f.FilterOrder = 4;
f.Height = 1.6e-3;
show(f);
sp = sparameters(f, linspace(3e9, 7e9, 101), 'SweepOption', 'interp');
rfplot(sp);

Key Properties: FilterOrder, ResonatorLength (scalar or vector), ResonatorWidth (scalar or vector), ResonatorSpacing (scalar or vector), ResonatorOffset, ViaDiameter (scalar or vector — distinctive to interdigital), FeedOffset, IsShielded, Connector.

Lowpass Filters

Stepped-Impedance Lowpass
f = filterStepImpedanceLowPass;
f = design(filterStepImpedanceLowPass, 2.5e9);
show(f);
sp = sparameters(f, linspace(0.1e9, 5e9, 101), 'SweepOption', 'interp');
rfplot(sp);

Key properties: FilterOrder, HighZLineWidth, LowZLineWidth, HighZLineLength, LowZLineLength.

Bandstop / Notch Filters

Spurline Filter

Compact notch using coupled-line section on one side:

f = filterSpurline;
show(f);
sp = sparameters(f, linspace(1e9, 6e9, 51), 'SweepOption', 'interp');
rfplot(sp);

Double spurline for deeper rejection:

f = filterSpurline;
f.LineType = 'Double';
show(f);

Key Properties: LineType ('Single'/'Double'), CoupledLineLength, CoupledLineWidth, CoupledLineSpacing, LineGap (gap between coupled line and output line — distinctive to spurline), IsShielded, Connector.

Stub Filters (Open/Short)

The filterStub object supports open-circuit stubs (bandstop) and short-circuit stubs (highpass):

f = filterStub;
f.StubLength = [6e-3 6e-3 6e-3];
f.StubWidth = [0.5e-3 0.5e-3 0.5e-3];
f.StubOffsetX = [-6e-3 0 6e-3];
f.StubShort = [0 0 0];         % 0=open (bandstop), 1=short (highpass)
f.StubDirection = [0 0 0];     % 0=below, 1=above trace
f.SeriesLineWidth = 1.8e-3;
f.SeriesLineLength = 12e-3;
show(f);

Key Properties: StubLength (vector), StubWidth (vector), StubFeedOffsetX (vector), StubShort (0=open, 1=short; vector), StubDirection (0=down, 1=up; vector), SeriesLineLength, SeriesLineWidth, IsShielded, Connector.

Radial Stub
rs = stubRadialShunt;
rs = design(stubRadialShunt, 5e9);
show(rs);

SIW Bandpass Filter

SIWFilter uses NumResonators (not FilterOrder), and Substrate is read-only (set via internal resonator objects):

f = SIWFilter;
f.NumResonators = 4;
show(f);
sp = sparameters(f, linspace(8e9, 14e9, 51), 'SweepOption', 'interp');
rfplot(sp);

Measured Filter Extraction

measuredFilter extracts a coupled-resonator circuit model (coupling matrix, external Q, unloaded Q) from measured or simulated 2-port S-parameter data. This enables filter tuning, diagnosis, and comparison against ideal synthesis targets.

Key Properties:

  • Sparameters — 2-port S-parameters data (sparameters object)

  • FilterOrder — Number of resonators in the model

  • CenterFrequency — Passband center frequency (Hz)

  • BandWidth — 3-dB bandwidth (Hz)

  • CouplingMatrix — Extracted N+2 coupling matrix (populated after extraction)

  • QualityFactor — Unloaded quality factor (populated after qualityfactor())

Key Methods:

  • residue(mf) — Extract lowpass admittance residues and poles from S-parameter data

  • transversalMat(mf) — Calculate transversal coupling matrix from residues

  • canonicalCouplingMat(mf) — Rotate transversal matrix to canonical (folded) form

  • optimize(mf) — Isospectral optimization of the coupling matrix

  • sparameters(mf, freq) — Synthesize S-parameters from the extracted circuit model

  • qualityfactor(mf) — Calculate unloaded quality factor

Complete Workflow
% Step 1: Load measured S-parameters and inspect visually
S_meas = sparameters('measured_filter.s2p');
rfplot(S_meas);
% Identify center frequency and bandwidth from the plot

% Step 2: Create measuredFilter with matching initial guess
mf = measuredFilter(Sparameters=S_meas, ...
    FilterOrder=8, ...
    CenterFrequency=2114.6e6, ...
    BandWidth=9.6e6);

% Step 3: Extract residues and poles
residue(mf);

% Step 4: Build transversal matrix, then rotate to canonical form
transversalMat(mf);
M = canonicalCouplingMat(mf);
disp(mf.CouplingMatrix);

% Step 5: Optimize coupling matrix (isospectral flow)
mf = optimize(mf);

% Step 6: Compare extracted model vs measured data
freq = linspace(2.08e9, 2.15e9, 501);
S_model = sparameters(mf, freq);
rfplot(S_meas); hold on;
rfplot(S_model, '--');
legend('Measured', 'Extracted Model');

% Step 7: Quality factor
Q = qualityfactor(mf);
disp(mf.QualityFactor);

Custom Filter Assembly

For topologies not in the catalog, build with pcbComponent:

% Example: custom 2-pole open-loop filter from shape primitives
sub = dielectric("FR4");
sub.Thickness = 1.6e-3;
cond = metal("Copper");

% Build resonator shapes using traceLine, traceRectangular, Boolean ops
% (see matlab-assemble-pcb-layout skill)

pcb = pcbComponent;
pcb.Layers = {filterShape, sub, groundPlane};
pcb.BoardShape = groundPlane;
pcb.BoardThickness = sub.Thickness;
pcb.Conductor = cond;
pcb.FeedDiameter = feedWidth/2;
pcb.FeedLocations = [x1 y1 1 3; x2 y2 1 3];

Multi-Layer Filters

All filter catalog objects support multi-layer dielectrics:

f = design(filterCoupledLine, 3e9);
sub = dielectric("FR4", "Teflon");
sub.Thickness = [0.8e-3 0.4e-3];   % Set Thickness BEFORE assigning to filter
f.Substrate = sub;
f.Height = 1.2e-3;
show(f);

Filter Selection Guide

NeedRecommended FilterNotes
Bandpass, compactfilterHairpinFolded resonators save board area
Bandpass, standardfilterCoupledLineSupports design(), easiest starting point
Bandpass, high selectivityfilterInterdigitalGood stopband rejection, wideband
Bandpass, capacitively loadedfilterComblineNarrow-band, high-Q, short resonators
Bandpass, cross-coupling / TZsfilterOpenLoopQuasi-elliptic, transmission zeros; supports design()
Bandpass, SIW technologySIWFilterHigh-Q waveguide-in-PCB
Lowpass, stepped impedancefilterStepImpedanceLowPassSupports design()
Bandstop, notchfilterSpurlineVery compact, single or double
Bandpass/Bandstop, stub-basedfilterStubFlexible open/short stub topology; no design()
Model extraction from datameasuredFilterCoupling matrix from measurements

Design Adjustments

ProblemAdjustDirection
Passband too wideFilterOrder, SpacingIncrease order, decrease spacing
Insertion loss too highConductor thicknessUse real metal, increase thickness
Rejection too shallowFilterOrderIncrease
Center freq shiftedRe-run design(filt, freq)--
Return loss poorFeedOffset, FeedTypeTune feed position

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 filters 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. FilterOrder vs NumPoles: Some objects use FilterOrder, others use NumPoles. Check the specific object's properties.

  4. PortLineLength affects response: The port feed line length contributes phase and can shift the filter's apparent center frequency. Ensure sufficient length for proper excitation.

  5. design() sets all dimensions: After design(obj, fc), all geometric parameters are overwritten. Customize properties after calling design, not before.

  6. Coupled-line filter bandwidth: Controlled by CouplingSpacing — smaller gaps = tighter coupling = wider bandwidth, but fabrication-limited.

  7. StubShort convention: In filterStub, StubShort=0 means open-ended stub (creates bandstop); StubShort=1 means short-circuited (creates highpass). This is counterintuitive.

  8. No design() for combline/interdigital/stub: filterCombline, filterInterdigital, and filterStub do not support design(). Set dimensions manually based on resonator theory.

  9. SIWFilter Substrate is read-only: You cannot directly set SIWFilter.Substrate. The substrate is controlled through the internal resonator and transmission line element objects.

  10. measuredFilter initial guess matters. The CenterFrequency and BandWidth must closely match the actual passband of the measured data. Poor initial values cause residue() to extract incorrect poles. Inspect the S-parameter data visually first.

  11. ResonatorSpacing vector length = FilterOrder - 1: For combline, interdigital, and hairpin filters, ResonatorSpacing specifies gaps between resonators. An N-th order filter has N resonators but only N-1 gaps. Do NOT pass N elements — pass N-1.

  12. GroundPlaneLength is read-only on most filters: GroundPlaneLength and GroundPlaneWidth are auto-computed from resonator dimensions on filterCombline, filterHairpin, and filterInterdigital. Do NOT attempt to set them.

  • matlab-manage-pcb-material — Substrate selection for filter performance

  • matlab-analyze-em — S-parameter extraction and field visualization

  • matlab-optimize-pcb-design — Optimizing filter dimensions

  • matlab-assemble-pcb-layout — Custom filter topologies via pcbComponent

  • matlab-design-pcb-passive — Resonators, baluns, split-ring structures for filters


Copyright 2026 The MathWorks, Inc.

Files

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-filter · 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-filter.zip