Matlab Design Pcb Filter
MathWorksOfficialCreated by MathWorks
- Skill
- Tool integration
- Software development
- BSD-2-Clause
- No issues found
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
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/matlab/matlab-design-pcb-filter/downloadUnzip 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-lineDesigning couplers or splitters — use
matlab-design-pcb-couplerDesigning passive components (inductors, capacitors, baluns) — use
matlab-design-pcb-passiveSetting up substrate or conductor materials — use
matlab-manage-pcb-materialOptimizing filter dimensions after design — use
matlab-optimize-pcb-design
Typical Workflow
Before:
matlab-manage-pcb-material— set up substrate and conductorThis skill: Design the filter (catalog object or custom geometry)
Check mesh/memory:
memoryEstimate(obj, fc, 'RetainMesh', true)— inspect auto-mesh density before committing to a full solveAfter:
matlab-analyze-em— validate S-parameters →matlab-optimize-pcb-design— tune dimensions →matlab-write-pcb-layout— export Gerber
Quick Reference — Filter Selection
| Filter Object | Type | Poles | Best For |
|---|---|---|---|
filterCoupledLine | Bandpass | 2–8 | General microstrip BPF |
filterHairpin | Bandpass | 2–8 | Compact BPF, folded resonators |
filterOpenLoop | Bandpass | 4/6/8 | Compact quasi-elliptic |
filterCombline | Bandpass | 2–6 | Narrow-band, high-Q |
filterInterdigital | Bandpass | 2–8 | Wideband, good stopband |
filterStepImpedanceLowPass | Lowpass | 3–9 | Distributed LPF |
filterStub | LP/HP/BS | N stubs | Flexible stub topology |
filterSpurline | Bandstop | 1–2 | Compact notch filter |
SIWFilter | Bandpass | 2–6 | High-Q waveguide-in-PCB |
measuredFilter | Bandpass | N | Model 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 (sparametersobject)FilterOrder— Number of resonators in the modelCenterFrequency— Passband center frequency (Hz)BandWidth— 3-dB bandwidth (Hz)CouplingMatrix— Extracted N+2 coupling matrix (populated after extraction)QualityFactor— Unloaded quality factor (populated afterqualityfactor())
Key Methods:
residue(mf)— Extract lowpass admittance residues and poles from S-parameter datatransversalMat(mf)— Calculate transversal coupling matrix from residuescanonicalCouplingMat(mf)— Rotate transversal matrix to canonical (folded) formoptimize(mf)— Isospectral optimization of the coupling matrixsparameters(mf, freq)— Synthesize S-parameters from the extracted circuit modelqualityfactor(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
| Need | Recommended Filter | Notes |
|---|---|---|
| Bandpass, compact | filterHairpin | Folded resonators save board area |
| Bandpass, standard | filterCoupledLine | Supports design(), easiest starting point |
| Bandpass, high selectivity | filterInterdigital | Good stopband rejection, wideband |
| Bandpass, capacitively loaded | filterCombline | Narrow-band, high-Q, short resonators |
| Bandpass, cross-coupling / TZs | filterOpenLoop | Quasi-elliptic, transmission zeros; supports design() |
| Bandpass, SIW technology | SIWFilter | High-Q waveguide-in-PCB |
| Lowpass, stepped impedance | filterStepImpedanceLowPass | Supports design() |
| Bandstop, notch | filterSpurline | Very compact, single or double |
| Bandpass/Bandstop, stub-based | filterStub | Flexible open/short stub topology; no design() |
| Model extraction from data | measuredFilter | Coupling matrix from measurements |
Design Adjustments
| Problem | Adjust | Direction |
|---|---|---|
| Passband too wide | FilterOrder, Spacing | Increase order, decrease spacing |
| Insertion loss too high | Conductor thickness | Use real metal, increase thickness |
| Rejection too shallow | FilterOrder | Increase |
| Center freq shifted | Re-run design(filt, freq) | -- |
| Return loss poor | FeedOffset, FeedType | Tune feed position |
Pitfalls
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.Check mesh density before solving: Catalog filters generate dense auto-meshes that dominate runtime. Always run
memoryEstimate(obj, fc, 'RetainMesh', true)beforesparameters(). If memory is excessive, coarsen:mesh(obj, 'MaxEdgeLength', lambda/6). Seematlab-analyze-emfor full mesh inspection workflow.FilterOrder vs NumPoles: Some objects use
FilterOrder, others useNumPoles. Check the specific object's properties.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.
design() sets all dimensions: After
design(obj, fc), all geometric parameters are overwritten. Customize properties after callingdesign, not before.Coupled-line filter bandwidth: Controlled by
CouplingSpacing— smaller gaps = tighter coupling = wider bandwidth, but fabrication-limited.StubShort convention: In
filterStub,StubShort=0means open-ended stub (creates bandstop);StubShort=1means short-circuited (creates highpass). This is counterintuitive.No design() for combline/interdigital/stub:
filterCombline,filterInterdigital, andfilterStubdo not supportdesign(). Set dimensions manually based on resonator theory.SIWFilter Substrate is read-only: You cannot directly set
SIWFilter.Substrate. The substrate is controlled through the internal resonator and transmission line element objects.measuredFilter initial guess matters. The
CenterFrequencyandBandWidthmust closely match the actual passband of the measured data. Poor initial values causeresidue()to extract incorrect poles. Inspect the S-parameter data visually first.ResonatorSpacing vector length = FilterOrder - 1: For combline, interdigital, and hairpin filters,
ResonatorSpacingspecifies gaps between resonators. An N-th order filter has N resonators but only N-1 gaps. Do NOT pass N elements — pass N-1.GroundPlaneLength is read-only on most filters:
GroundPlaneLengthandGroundPlaneWidthare auto-computed from resonator dimensions onfilterCombline,filterHairpin, andfilterInterdigital. Do NOT attempt to set them.
Related Skills
matlab-manage-pcb-material— Substrate selection for filter performancematlab-analyze-em— S-parameter extraction and field visualizationmatlab-optimize-pcb-design— Optimizing filter dimensionsmatlab-assemble-pcb-layout— Custom filter topologies via pcbComponentmatlab-design-pcb-passive— Resonators, baluns, split-ring structures for filters
Copyright 2026 The MathWorks, Inc.
Files
- ATTRIBUTION.mdAdded by AutoGineer1.0 KiB
- LICENSELicence file added by AutoGineer1.4 KiB
- SKILL.md14.7 KiB
- manifest.yaml489 B
manifest.yaml
# Copyright 2026 The MathWorks, Inc. schema-version: 1 license: https://www.mathworks.com/content/dam/mathworks/license/pmrl/license.md scope: product-specific version: "1.0" human-description: Design bandpass, lowpass, and bandstop RF filters using hairpin, coupled-line, combline, stub, and SIW topologies. matlab-release: ">=R2025a" required-tools: - evaluate_matlab_code - check_matlab_code required-skills: [] required-products: - RF PCB Toolbox toolkit: matlab-agentic-toolkit
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.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download matlab-design-pcb-filter.zip