关于 matlab-prepare-signal-data
为 MATLAB 信号处理工具箱中的信号清理、标注和训练数据准备提供工作流指引,面向分析或机器学习训练前处理信号的用户。内容涵盖缺失值修复、通道对齐、数据集划分、分帧及交接到 `trainnet`。
主要功能
- 01修复缺失样本并处理异常值
- 02去趋势、平滑与降噪
- 03对齐通道或重采样至统一速率
- 04加载数据存储并生成标签
- 05分帧、划分数据并交接给 `trainnet`
适用场景
- 01清理含缺失值或漂移的信号
- 02对齐不同采样速率的多个通道
- 03为训练准备已标注的信号数据集
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-prepare-signal-data安装后在 Claude Code 中输入/matlab-prepare-signal-data确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
manifest.yamlreferences/fn-countlabels.mdfn-detrend.mdfn-filenames2labels.mdfn-fillgaps.mdfn-fillmissing.mdfn-filloutliers.mdfn-folders2labels.mdfn-framelbl.mdfn-framesig.mdfn-hampel.mdfn-labeledsignalset.mdfn-labelspectrogramoptions.mdfn-medfilt1.mdfn-partition.mdfn-resample.mdfn-retime.mdfn-sgolayfilt.mdfn-signaldatastore.mdfn-signallabeldefinition.mdfn-signalmask-getmask.mdfn-smoothdata.mdfn-splitlabels.mdfn-subset.mdfn-synchronize.mdfn-wdenoise.mdwf-align-channels.mdwf-custom-readfcn.mdwf-denoise.mdwf-detrend-smooth-deoutlier.md详细介绍
准备信号数据
请先查看 Signal Processing Toolbox。 此处的调理、标注、 拆分、分帧和分区辅助工具都位于 Signal Processing Toolbox 中,而不在 Stats & ML Toolbox 或通用 MATLAB 字符串实用工具中。
流程:对原始信号进行调理(清理)-> 将文件夹加载到
数据存储中 -> 标注 -> 拆分 / 分帧 -> 交接给 trainnet。每个
阶段都对应一个工作流文件;本页会为你指引合适的文件。
适用场景
- 在分析前清理单个信号:填补缺失值、去除漂移、剔除离群值、 降噪、统一时间基准、对齐多个通道。
- 加载 / 准备信号数据以用于 ML 训练:数据存储、根据 文件名或文件夹生成标签、分层拆分、分帧、并行处理。
- 结构化标注:使用
labeledSignalSet进行 Signal Labeler 标注,支持所有标签类型。
不适用场景
- 有 Audio Toolbox 时对原始
.wav音频进行分类。audioDatastore是标准做法(本技能的自定义ReadFcn工作流仅在没有 Audio Toolbox 时处理.wav— references/wf-custom-readfcn.md)。 - 设计频率选择性滤波器(频带隔离、陷波、自定义 FIR/IIR)
— 请参阅
matlab-design-digital-filter技能。本技能中的信号调理是为了清理信号, 而非设计滤波器。 - 从已调理的信号中计算逐帧特征(RMS、峰值因数、频谱 / 带宽、
时频特征)— 请参阅
matlab-extract-signal-features技能。本技能的framesig/framelbl用于手动按窗口标注 / 监督,而非生成特征表;signal*FeatureExtractor对象会在内部进行窗口处理并输出表格。
最佳实践
- 交付内容应为可运行的
.m脚本,用户可以保存、进行版本管理并 重新运行,而不是工作区状态。 - 优先使用能完成任务的最高层级函数。
detrend/smoothdata/fillmissing/resample可读性好,也便于 非专家理解。只有在需要高层调用无法提供的控制,或用户提出要求时, 才使用更底层 / 可配置性更强的方案(designfilt+filtfilt、手动构建的 AR 模型、具名基本函数)。 首先考虑可读性;只有确有必要时才升级到低层级,而非默认如此。- 高层调用通常会提供你认为需要的控制。特别是,
smoothdata(x, "sgolay", fl)会将帧长fl作为参数——它不会隐藏该参数——因此应优先使用它,而不是直接调用sgolayfilt。只有当调度函数确实缺少所需功能时(例如通过dn输出导数,或使用特殊的多项式阶数),才使用sgolayfilt。
- 高层调用通常会提供你认为需要的控制。特别是,
0. 常见惯用做法
如果你的第一反应是下面这些,其中都有一步之遥的标准替代方案。
| 惯用做法 | 标准方案 | 详情 |
|---|---|---|
手动设计高通滤波器或使用 designfilt 去除平滑漂移 | detrend(x, n)——依次将 n 从 1 提升到 2、再到 3,然后再考虑使用滤波器;多项式去趋势的通带增益为 1 | references/fn-detrend.md |
自行编写缺失值填补函数(regularizeNaNs、inpaintn——这些函数并不存在) | 短缺口用 fillmissing(插值);振荡信号中的长缺口用 fillgaps(SPT,AR) | references/wf-repair-missing.md |
手动组合 retime + shift + retime + concat 来对齐通道 | synchronize(A, B, ...)——一次调用即可对齐到共享网格 | references/wf-align-channels.md |
为 .csv 自定义 ReadFcn | 使用 signalDatastore 的默认读取器和 SignalVariableNames | references/fn-signaldatastore.md |
用 cvpartition 拆分数据存储 | 使用 splitlabels + subset(ds, idx{k}) | references/fn-splitlabels.md |
用 regexp / extractBefore / fileparts 从文件名提取标签 | filenames2labels(sds, Extract=...) | references/fn-filenames2labels.md |
用 regexp / 嵌套 fileparts 从子文件夹提取标签 | folders2labels(sds.Files) | references/fn-folders2labels.md |
使用 (i-1)*hop+1 手动编写分帧循环 | framesig(x, fl, OverlapLength=...) | references/wf-frame-and-label.md |
使用 containers.Map 手动将 ROI 投票映射到帧 | framelbl(rois, ...) | references/wf-frame-and-label.md |
用 for 循环执行 load(file) 读取文件中的标签变量 | signalDatastore(folder, SignalVariableNames=["x","label"]) | references/fn-signaldatastore.md |
需要与 Signal Labeler 互操作时使用 signalMask | 使用带 ROI 标签的 labeledSignalSet(signalMask 无法导入) | references/fn-labeledsignalset.md |
signalLabeler(lss)(将集合传入参数) | 直接启动 signalLabeler(不带参数),然后选择 Import -> From Workspace 或 From File | references/wf-label-and-export.md |
SPT 专用函数已经存在——直接使用,不要重复造轮子。
fillgaps(AR 缺口填补)、medfilt1/hampel(脉冲处理)、sgolayfilt/smoothdata(...,"sgolay")(保留特征的平滑)都位于 Signal Processing Toolbox 中。
1. 工作流
每个工作流文件都是入口,其中列出了使用的函数。从这里开始。
| 工作流 | 适用场景 | 参考 |
|---|---|---|
| 修复缺失样本 | 需要填补 NaN 间隙或数据丢失。 | references/wf-repair-missing.md |
| 去趋势、平滑、去异常值 | 单个信号存在漂移、尖峰和/或宽带噪声(平滑/降噪也在此处)。 | references/wf-detrend-smooth-deoutlier.md |
| 对齐多速率/偏移通道 | 将多个通道对齐到共享时间基准。 | references/wf-align-channels.md |
| 将单个通道设为统一速率 | 将单个通道转换到所选速率的统一网格:将抖动的时间戳规整化,或对速率已统一但速率不正确的数据使用 resample。 | references/wf-uniform-rate.md |
| 小波降噪(进阶处理) | 经过调优的 sgolayfilt 无法去除非平稳/多尺度噪声;使用 wdenoise(Wavelet TB)。 | references/wf-denoise.md |
| 包络提取 | 振幅轮廓(AM 解调、峰值包络)——不是清理。 | references/wf-envelope.md |
| 加载 + 标注 + 拆分 | 将文件夹中的文件转换为用于训练的数据存储。 | references/wf-load-and-split.md |
| 长信号分帧 + 逐帧标注 | 长信号、按窗口进行监督。 | references/wf-frame-and-label.md |
| 标注 + 导出(所有标注类型) | 结构化标注(属性/ROI/点/TF-ROI),导出到 Signal Labeler/DL。 | references/wf-label-and-export.md |
| 通过 parpool 并行处理 | 在多个工作进程上处理各个信号。 | references/wf-parallel-process.md |
| 自定义 ReadFcn(仅在需要时) | 格式不是 .mat/.csv,或包含元数据前导部分。 | references/wf-custom-readfcn.md |
移交给 trainnet | 数据存储已就绪;为 trainnet/combine 调整形状。 | references/wf-handoff-to-dl.md |
每个工作流文件都会列出其所用函数对应的
fn-参考页面; 没有单独的函数索引——请从与任务匹配的工作流开始, 或查阅上方的速查表。
2. 信号需要多个调理步骤时的排序
**基本原则(真正的规则):**安排步骤顺序,避免较早的操作破坏后续操作的输入。尖峰会影响最小二乘拟合,也会被滤波器/重采样器扩散;未去除的趋势会被平滑器平均到信号中;大多数操作都无法处理 NaN。据此判断当前信号需要怎样处理——不要盲目遵循固定流程。
默认经验顺序(良好的起点,但并非放之四海而皆准的规则):
异常值 -> 去趋势 -> 平滑,根据上述原则安排填补和对齐步骤。
- 异常值 -> 去趋势 -> 平滑是经过验证的核心顺序:在多项式
detrend之前(尖峰会影响拟合)和在平滑器之前(平滑器会将尖峰扩散到整个窗口)去除尖峰;先去趋势再平滑,避免平滑器对趋势求平均。 - 在任何无法处理缺失数据的步骤(去趋势、滤波器、大多数平滑器)之前,先填补
NaN。 - **对齐/重采样:**将信号放到新网格上(
retime/synchronize)会在时间不重叠处产生NaN,因此应在对齐后填补。但如果信号有尖峰,应在重采样前去除异常值——resample的抗混叠滤波器会扩散尚未去除的尖峰。因此,对齐与去除异常值的先后顺序取决于信号;应由基本原则决定,而不是套用固定顺序。
并非每个信号都需要所有步骤——先判断哪些步骤适用,再按基本原则安排顺序。如果实际问题属于其他类别,每个工作流文件都提供了相应的转用路径。
Copyright 2026 The MathWorks, Inc.