mcpField
M
matlab-prepare-signal-data

matlab-prepare-signal-data

github.com/matlab数据与数据库1.2k62 次安装1 天前更新
代码仓库

关于 matlab-prepare-signal-data

为 MATLAB 信号处理工具箱中的信号清理、标注和训练数据准备提供工作流指引,面向分析或机器学习训练前处理信号的用户。内容涵盖缺失值修复、通道对齐、数据集划分、分帧及交接到 `trainnet`。

主要功能

  1. 01修复缺失样本并处理异常值
  2. 02去趋势、平滑与降噪
  3. 03对齐通道或重采样至统一速率
  4. 04加载数据存储并生成标签
  5. 05分帧、划分数据并交接给 `trainnet`

适用场景

  1. 01清理含缺失值或漂移的信号
  2. 02对齐不同采样速率的多个通道
  3. 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.yaml
references/
fn-countlabels.md
fn-detrend.md
fn-filenames2labels.md
fn-fillgaps.md
fn-fillmissing.md
fn-filloutliers.md
fn-folders2labels.md
fn-framelbl.md
fn-framesig.md
fn-hampel.md
fn-labeledsignalset.md
fn-labelspectrogramoptions.md
fn-medfilt1.md
fn-partition.md
fn-resample.md
fn-retime.md
fn-sgolayfilt.md
fn-signaldatastore.md
fn-signallabeldefinition.md
fn-signalmask-getmask.md
fn-smoothdata.md
fn-splitlabels.md
fn-subset.md
fn-synchronize.md
fn-wdenoise.md
wf-align-channels.md
wf-custom-readfcn.md
wf-denoise.md
wf-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,然后再考虑使用滤波器;多项式去趋势的通带增益为 1references/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 的默认读取器和 SignalVariableNamesreferences/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 Filereferences/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.


评论

支持 Markdown