关于 matlab-design-digital-filter
面向信号处理任务的 MATLAB 技能,用于设计和验证数字滤波器,涵盖架构选择、代码生成与数值验证。
主要功能
- 01选择 FIR 和 IIR 架构
- 02设计低通、高通、带通、带阻和陷波器
- 03支持流式与离线滤波工作流
- 04比较滤波器并验证响应
适用场景
- 01去除信号中的噪声或干扰
- 02比较候选滤波器设计
- 03设计窄过渡带滤波器
- 04构建实时或批处理滤波流程
MCP 相关
工作流通过 MCP 分析输入数据,包括频谱、信号长度和干扰位置。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-design-digital-filter安装后在 Claude Code 中输入/matlab-design-digital-filter确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
manifest.yamlreferences/best-practices.mdefficient-filtering.mdfilter-analyzer.mdINDEX.mdmultirate.mdmultistage-ifir.mdpatterns.mdreferences/quick-ref/designfilt.mdefficient-filtering.mdfilter-analyzer.mdgeneral-iir-fir.mdmultirate-offline.mdmultirate-streaming.mdmultistage-ifir.md详细介绍
在 MATLAB 中设计数字滤波器
使用 Signal Processing Toolbox 和 DSP System Toolbox 设计、实现并验证数字滤波器。选择合适的架构(单级或高效替代方案),生成正确的代码,并通过图表和数值验证结果。
适用场景
- 设计低通、高通、带通、带阻或陷波滤波器
- 清理含噪信号或消除干扰
- 在 FIR 和 IIR 滤波器架构之间进行选择
- 在 Filter Analyzer 中比较滤波器设计
- 构建流式(实时)或离线(批处理)滤波流水线
- 使用多速率或 IFIR 方法处理窄过渡带
不适用场景
- 自适应滤波(LMS、RLS)——直接使用 Signal Processing Toolbox 文档
- 音频专用处理(均衡、房间校正)——使用 Audio Toolbox
- 图像滤波(二维卷积、形态学运算)——使用 Image Processing Toolbox
- 不涉及滤波的一般频谱分析——FFT/periodogram 文档即可满足需求
关键规则
- 编写任何滤波器设计代码前,先阅读 references/INDEX.md。
- **始终写入 .m 文件。**绝不要将多行 MATLAB 代码直接放入
evaluate_matlab_code。将代码写入.m文件,通过run_matlab_file运行,出错时再进行修改。 - **调用任何 MATLAB 函数前都要进行预检。**在调用 INDEX.md 中列出的任何函数之前,先阅读所需的快速参考。请在回复开头注明
Preflight: [files]。 - **不要猜测关键要求。**如果未说明 Mode(流式还是离线)或 Phase 要求,请先询问。
- **未提供 Fs 时,不得设计 Hz 滤波器。**如果
Fs未知,请停止并询问(除非用户明确要求使用归一化频率)。 - **始终固定采样率。**使用
designfilt(..., SampleRate=Fs)和freqz(d, [], Fs)。 - **IIR 稳定性:**优先使用 SOS/CTF 形式(避免高阶
[b,a]多项式)。
预检流程
- 列出要调用的 MATLAB 函数
- 在
references/INDEX.md中逐一查找(函数级和任务级表格) - 阅读所需的快速参考文件
- 在回复开头注明:
Preflight: quick-ref/filter-analyzer.md, quick-ref/designfilt.md(或Preflight: none required)
工作流
阶段 1:信号分析
- 通过 MCP 分析输入数据(频谱、信号长度、干扰位置)
- 计算
trans_pct并识别干扰特征
阶段 2:明确意图
完成信号分析后,如果未说明,请询问 Mode 和 Phase:
- Mode:streaming(因果)| offline(批处理)
- Phase:zero-phase(零相位)| linear-phase(线性相位)| don't-care(无要求)
收到答复后,再展示任何方案比较或概述。
阶段 3:选择架构
- 如果
trans_pct < 2%,请打开references/efficient-filtering.md - 仅展示符合 Mode 和 Phase 约束的可行候选方案
- 明确列出排除的类型,并用一句话说明原因
- 使用 Filter Analyzer 进行可视化比较
设计需求检查清单
必需的信号与频率规格(缺少时无法继续)
Fs(Hz)- 响应类型:lowpass / highpass / bandpass / bandstop / notch
- 边缘频率(Hz)
如果缺少任何一项,请询问。
架构选择所需的意图信息(未知时请询问)
- Mode:streaming(因果)| offline(批处理)
- Phase:zero-phase(零相位)| linear-phase(线性相位)| don't-care(无要求)
- 幅度约束:
Rp_dB通带纹波(默认 1 dB),Rs_dB阻带衰减(默认 60 dB)
如果 Mode 或 Phase 未知,请提出 1 到 2 个澄清问题,然后停止。
架构检查点
确定方案前,先计算并说明:
trans_bw = Fstop - Fpasstrans_pct = 100 * trans_bw / FsM_max = floor(Fs/(2*Fstop))(仅适用于基于低通的多速率方案)
判定规则:
trans_pct > 5%—— 通常采用单级 FIR 或 IIR 即可2% <= trans_pct <= 5%—— 可以采用单级方案;如果成本或延迟很重要,请提及高效替代方案trans_pct < 2%—— 停止并进行窄过渡带方案比较(参见references/quick-ref/efficient-filtering.md)
设计 + 验证
- 可行性检查 -- 让
designfilt选择最低阶数,然后查询filtord(d)。也可以使用kaiserord/firpmord估算 FIR 长度。 - 设计候选方案 -- 优先使用带显式
Rp/Rs和SampleRate=Fs的designfilt()。对于流式 IIR,使用SystemObject=true。对于离线零相位滤波,可以使用filtfilt(),但要说明它会使幅度响应平方。 - 直观比较 -- 使用
filterAnalyzer()比较 2 个或更多设计。先阅读references/quick-ref/filter-analyzer.md。至少显示:幅度 + 群延迟。 - 用数值验证 -- 检查通带最坏波纹和阻带衰减是否符合规格。对于
filtfilt(),验证有效响应(幅度平方)。 - 交付输出 -- 规格摘要、推导出的指标、所选架构及原因、MATLAB 代码、验证代码片段 + 结果、实现形式。
关键函数
| 函数 | 用途 |
|---|---|
designfilt() | 主要滤波器设计(FIR 和 IIR,所有响应类型) |
filterAnalyzer() | 直观比较 2 个或更多滤波器设计 |
freqz()、grpdelay() | 频率响应和群延迟分析 |
filtfilt() | 离线零相位滤波 |
dsp.SOSFilter | 使用 SystemObject=true 实现流式 IIR |
designMultirateFIR() | 多速率抽取器/插值器设计 |
ifir() | 在速率不变时,用于窄过渡带的插值 FIR |
cost() | DSP System 对象上的 MPIS(每输入样本乘法次数) |
kaiserord()、firpmord() | FIR 阶数估算 |
约定
- 在
designfilt()中始终指定SampleRate=Fs,并使用freqz(d, [], Fs)以 Hz 为单位绘图 - 多滤波器比较使用
filterAnalyzer(),不要绘制自定义的freqz/grpdelay图 - IIR 使用 SOS 形式(阶数 > 8 时避免使用
[b,a]) - 多面板图形使用
tiledlayout/nexttile(不要使用subplot)
Copyright 2026 The MathWorks, Inc.
评论
支持 Markdown