mcpField
M
matlab-extract-rotating-machinery-features

matlab-extract-rotating-machinery-features

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

关于 matlab-extract-rotating-machinery-features

matlab-extract-rotating-machinery-features 是一项 MATLAB 技能,用于从旋转机械时间序列中提取和筛选预测特征。它指导状态监测与故障检测流程,涵盖健康指标开发和部署。

主要功能

  1. 01处理振动及其他传感器信号
  2. 02提取统计与频谱特征
  3. 03计算轴承和齿轮故障指标
  4. 04排序并筛选预测特征
  5. 05开发健康指标
  6. 06准备脚本和部署代码

适用场景

  1. 01构建旋转机械状态监测
  2. 02将高频数据压缩为有效特征
  3. 03从全寿命数据集中筛选特征
  4. 04创建用于部署的健康指标

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-extract-rotating-machinery-features

安装后在 Claude Code 中输入/matlab-extract-rotating-machinery-features确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

manifest.yaml
references/
bearings.md
gears.md
spectral.md
tsa.md
vibration.md

详细介绍

旋转机械特征提取

从旋转机械数据中提取预测特征,用于状态监测和故障检测应用。本技能涵盖专用于旋转机械的基本特征提取工作流步骤和算法。

适用情况

  • 用户有表示旋转机械传感器测量值的均匀采样时间序列数据,存储为矩阵、timetable 或元胞数组变量。
  • 用户正在构建旋转机械状态监测或故障检测系统。
  • 用户希望处理旋转机械数据以提取特征。
  • 用户希望选择预测能力最强的特征,并根据特征构建健康指标。
  • 用户正在部署状态监测和故障检测系统。
  • 用户有高频振动数据,并希望通过基于特征的数据缩减来提高状态监测效率。

不适用情况

  • 用户有非时间序列数据,例如图像、视频或表格(无序)数据。
  • 用户希望进行故障分类(而非故障检测),且有两个或更多故障类别。请改用 classificationLearner。
  • 用户有时间序列数据(已标注或未标注),并希望构建异常检测模型。请改用 timeSeriesAnomalyDetector。
  • 用户的数据频率非常低,不适合进行统计或频谱特征提取。

特征提取工作流

按以下 5 个步骤交互执行:

Task Progress:
- [ ] Step 1: Process data for feature extraction
- [ ] Step 2: Extract features from data
- [ ] Step 3: Rank and select features
- [ ] Step 4: Develop a health indicator using selected features
- [ ] Step 5: Deploy the application

不要默默选择参数或自行假设。请在每个决策点与用户沟通。尤其要请用户提供重要的系统参数,例如:

  • 轴承和齿轮几何参数
  • 转速(RPM)
  • 已知的结构共振频率

步骤 1:处理数据以提取特征

  1. 如果有配套的转速计或 RPM 数据,可以从测量值中去除非周期性信号分量或噪声。使用时间同步平均(tsa)及相关技术(tsadifference、tsaresidual 等)来分离周期性信号分量。如果有转速计信号,请先使用 tachorpm 估算 RPM,再进行 tsa 处理。
  2. 对于调制时间序列信号,使用信号包络(envelope)或包络频谱(envspectrum)对信号进行解调。
确定转速和故障频率(必须在设置任何故障频带之前完成)

转速计或 RPM 通道提供的是某根特定轴的转速——必须知道它安装在哪根物理轴上,以及每转产生多少个脉冲。不要假定它安装在电机轴/输入轴上。

  • 询问用户(或根据设置推断)转速计的安装位置及其每转脉冲数。在齿轮传动系统中,从已知轴出发,按照齿轮比传递转速:向转速更高的轴传递时相乘,向转速更低的轴传递时相除。
  • **务必根据测得的频谱对推导出的转速进行合理性检查。**计算功率谱(pspectrum),并确认在预期的轴转速或齿轮啮合频率处出现主峰。如果最强峰出现在相差很大的频率处(例如,你假设轴转速为 3 Hz,但频谱峰值在 90 Hz),则说明你对转速计安装位置的假设有误——继续之前应重新检查。
  • **重要——没有真实的旋转相位信息时,切勿尝试使用 tsa。**如果用户请求时域同步平均,但没有可用的转速计信号、RPM 曲线或阶次跟踪数据:**必须拒绝 TSA 请求。**请告诉用户:“TSA 需要旋转相位信息(转速计脉冲或 RPM 曲线),但你的数据中不包含这些信息。我无法继续进行时域同步平均。”随后提供不需要旋转相位的替代降噪方法,例如带通滤波、频谱平均(pwelch)或对原始信号提取统计特征。不得绕过缺失的数据——不得根据频谱估算 RPM,不得根据主频谱峰值猜测轴转速,不得伪造转速计脉冲,也不得修改或重新生成数据文件来注入用户表示不具备的旋转相位信息。

对于轴承,特征故障频率(Fo、Fi、Fb、Fc)由轴承几何参数和轴转速通过 bearingFaultBands 计算得出。如果用户直接提供这些频率(数据集中很常见),则按原值使用——不要虚构几何参数来重新推导。如果只提供轴/齿轮信息,但轴承几何参数未知,请询问几何参数(滚动体数量、滚珠/节圆直径、接触角),不要猜测故障频率与轴转速的比值;或者在包络谱中以经验方法识别主导的非轴转速峰值,并明确标注为经验估算值。

步骤 2:从数据中提取特征

  1. 提取时域特征,例如 rms、kurtosis、peak2rms 和其他统计指标。
  2. 提取频谱特征,例如 bandpower,以及解调信号的谱峰和频率。
  3. 对于轴承和齿轮等特殊部件,提取领域专用特征,例如 bearingFaultBands、gearMeshFaultBands 或 gearConditionMetrics。使用 faultBands 为轴和通用部件构建特征故障频带(基频+谐波+边带),并使用 faultBandMetrics 计算这些频带上的频谱指标(每个频带的峰值幅度、峰值频率和频带功率)。
  4. 如果需要交互式工具来提取大量特征,可建议使用 diagnosticFeatureDesigner。
从多个文件中提取特征(批处理)

状态监测和运行至失效数据集通常包含许多测量文件(每天、每次测试或每个运行点各一个文件)。当工作流需要扩展到许多成员时,不要只加载一个文件,也不要编写临时循环。请使用 fileEnsembleDatastore 管理这些文件:

  • 使用 DataVariables、IndependentVariables(例如从文件名解析出的日期或循环索引)和 ConditionVariables 配置数据存储,并提供自定义 ReadFcn,使其返回一个成员的信号。
  • 使用 read/hasdata/reset 遍历成员,提取每个成员的特征,并使用 writeToLastMemberRead 将特征写回,使其保存在集成中。
  • 对于大型集合,可将数据存储包装在 tall 数组中并使用 gather 获取特征表,或者对数据存储进行 partition 以实现并行处理。

重要 API 规则(常见错误): SelectedVariables 必须是已在 DataVariables、ConditionVariables 或 IndependentVariables 中声明的变量的子集。选择从未声明过的名称会报错:"the 'SelectedVariables' property does not include any valid ... names"。同样,要持久保存新特征,必须先将其名称添加到 DataVariables,然后再调用 writeToLastMemberRead ——不能写入(或之后选择)数据存储不了解的列。仅需读取原始信号的最简读取并提取特征循环,只需声明并选择原始变量:

fds = fileEnsembleDatastore(folder, ".mat");
fds.ReadFcn = @readMember;                 % returns a one-row table for one file
fds.DataVariables      = ["signal","fs"];  % raw signals to read
fds.IndependentVariables = "day";          % trend index
fds.SelectedVariables  = ["signal","fs","day"];   % subset of the declared names
reset(fds);
feats = [];
while hasdata(fds)
    m = read(fds);
    [es,f] = envspectrum(m.signal{1}, m.fs);
    feats = [feats; m.day, kurtosis(es)];  %#ok<AGROW>
end

这会为每个文件生成一行特征表,并以独立变量作为索引——这正是步骤 3(排序)和步骤 4(健康指标)所需的输入。

信号类型:振动、电气或其他信号

上述技术并不限于加速度计振动。电机电流特征分析将相同的频谱故障频带处理方法(对 pspectrum 使用 faultBands/gearMeshFaultBands/bearingFaultBands + faultBandMetrics)应用于电机电流或电压信号:轴和齿轮啮合故障会在电流频谱中表现为谱线和边带。不要将仅适用于加速度计的惯例(结构共振的包络解调、convertVibration、峭度图频带选择)强行用于电气信号——这些方法假设存在电流信号中没有的高频机械载波。对调制的振动信号(轴承)使用包络分析;对电流以及齿轮和轴故障使用直接频谱故障频带指标。

步骤 3:对特征进行排序和筛选

  1. 对于运行至失效(退化)数据,可使用 monotonicity、trendability 或 prognosability 等函数评估提取特征的预测能力。**这些函数接受的寿命数据必须是 table/timetable/cell 数组(或 fileEnsembleDatastore),而不能是普通数值向量。**将每个周期的特征汇总到特征表中(一行对应一次测量,一列对应一个特征,例如 array2table(featureMatrix,"VariableNames",names)),然后传入该表;每个函数都会为每个特征列返回一个分数。对 double 向量调用 monotonicity(x) 会报错,提示 "Expected input number 1 to be one of these types: cell, table, timetable, fileEnsembleDatastore"。对于跨已标记条件的检测/诊断,应根据特征区分这些条件的能力来排序(例如,类间与类内散布比/Fisher 型比率,或 ranktesk/fscmrmr 风格的可分性指标)。

    三种常见错误:(a) 指定寿命变量名称——monotonicity(featTbl,"Day");如果普通表没有寿命参数,函数会静默地丢弃第一列(对于只有一列的表,会返回空的 1×0 结果)。(b) 结果是一个单行表——先赋值再索引(s = monotonicity(...); s.RMS);monotonicity(...){1,1} 是语法错误。(c) trendability/prognosability 至少需要 2 个单元,且在只有一次运行时会退化——对于单个单元的数据,请使用 monotonicity,或直接用 mean(sign(diff(HI))) 为标量 HI 评分。

  2. 优先选择对比特征,用于比较不同故障机制,而不是容易受负载和增益影响的绝对值。例如,内圈频带与外圈频带的包络谱幅值之比(或对数比)比单独使用任一幅值更能区分轴承内圈和外圈故障;在健康单元与故障单元之间比较相同故障频带指标,可定位正在退化的部件。

  3. 使用 corr 或 corrcoef 找出高相关特征,并删除冗余特征。

  4. 如果需要交互式工具来筛选预测能力最强的特征,可建议使用 healthIndicatorDesigner。

步骤 4:使用选定特征开发健康指标

  1. 将选定特征组合起来,构建一个标量健康指标,用于表示系统的状态或健康状况。使用 lasso、pca 或线性回归创建健康指标。
  2. 如果需要交互式工具来开发健康指标,可建议使用 healthIndicatorDesigner。

步骤 5:部署应用程序

  1. 为上述所有工作流步骤生成 MATLAB 脚本。
  2. 如果用户提出要求,则使用 linearDegradationModel 或 exponentialDegradationModel 生成剩余使用寿命(RUL)估算 MATLAB 脚本。
  3. 如果用户提出要求,则使用 MATLAB Coder 生成 C/C++ 代码,以便在微控制器等边缘设备上进行嵌入式部署。

专用技术

针对特定部件或信号类型进行特征提取和状态监测时,请加载以下附加资源:


版权所有 2026 The MathWorks, Inc.

评论

支持 Markdown