ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VMD变分模态分解实战:从信号分解到故障诊断与预测

VMD变分模态分解实战:从信号分解到故障诊断与预测 拿到一个做技术的人最常被问到的一句话往往是手里有一堆信号、一堆数据下一步到底该干什么前阵子一个做设备运维的朋友给我看他们产线的振动数据密密麻麻的时域波形就是看不出轴承到底坏没坏。另一个人做房价预测拿着结构化表格直接丢给模型效果一直上不去。这些问题表面不相关背后其实都能用同一个工具先解一波——信号分解。这篇就聊VMD变分模态分解如何作为程序化工具实打实地用在信号分解、故障诊断、数据预测和分类四个方向。文章会按实际项目的推进顺序展开从算法思路到代码实操再到我在真实数据上踩过和填平的坑。适合正在做设备健康管理、时序预测、模式识别的工程师、算法岗同学也包括那些刚接手振动数据还在发愁“波形乱成一团”的研究生。1. VMD是什么为什么值得在项目里程序化落地1.1 从傅里叶到VMD信号分解到底解决了什么学信号处理的时候最先接触的是傅里叶变换把时间信号变成频谱看到底哪些频率成分存在。但傅里叶有个天生缺陷它假设信号是平稳的也就是说频率成分不随时间变化。真实世界里的振动信号、语音、心电、股价波动几乎没有一个是平稳的轴承跑着跑着磨损加剧高频冲击越来越多机器转速一变特征频率跟着漂移。这种非平稳、非线性信号单纯靠傅里叶看频谱会得到一片糊在一起的频率成分。后来有了小波变换能同时在时间和频率两个维度看信号。但小波基函数一旦选定整个分析的分辨率就固定了自适应能力有限。再后来是EMD经验模态分解和它的变体EEMD、CEEMDAN号称能把任意信号分解成若干本征模态函数不需要预先设定基函数。听起来很完美但EMD有一个让工程师头疼的问题模态混叠严重分解结果对噪声极其敏感一个轻微扰动就能让IMF长得完全不一样。VMD是2014年提出来的思路完全不同。它不是照着一堆极值点包络线去“筛”模态而是把信号分解问题转化成一个变分问题寻找K个模态函数让每个模态的估计带宽之和最小同时保证所有模态加起来能重构回原信号。求解过程中有明确的数学目标函数和约束条件结果稳定、可复现这一点在程序化落地里非常关键。调试代码的时候同样的输入必须得到同样的输出VMD就做得到EMD做不到。1.2 VMD的核心维度和参数理解了才能调VMD的目标函数本质上是在做一件这样的事把信号拆成K个调幅调频信号每个信号都有自己的中心频率和有限带宽。数学上写出来是一个带约束的优化问题用交替方向乘子法迭代求解。这里不需要把公式推导全部背下来但几个核心参数必须懂不然调代码全靠猜。K模态数量这是最敏感的参数。K小了欠分解两个频率成分被硬塞进一个模态里K大了过分解一个有效成分被劈成两个假模态。热的词里那些轴承故障诊断项目第一件事永远是选K。alpha惩罚因子控制模态带宽。alpha越大带宽越窄频率分辨率越高但噪声抑制能力会下降alpha太小了模态又可能靠得太近。默认值2000在实际工程里多数情况下够用特殊场景要按采样率和信号复杂度调整。tau噪声容忍度。设为0时等于强制精确重构适合干净信号噪声明显时适当调大让算法允许一定重构误差反而能滤掉部分噪声。init中心频率初始化方式。init1表示均匀分布在整个频带init0是所有模态初始中心频率都为0。还有DC、tol这些参数DC表示是否提取直流分量tol是迭代停止阈值一般不需要动。真正需要花时间调的就是K和alpha两个。参数默认值参考参数常用值说明K3-8根据频谱成分确定需要实验观察alpha2000带宽惩罚因子采样率高时适当调大tau0噪声大时调到0.1-0.5init1统一初始化减少变量tol1e-7收敛阈值DC0不单独提取直流分量1.3 适合程序化落地的应用画像VMD不是万能工具但它在四种场景里优势特别明显信号降噪和成分分离比如同时存在工频干扰、齿轮啮合频率、轴承故障冲击的信号VMD能分开后再做针对性分析。故障特征增强故障特征往往微弱淹没在强背景噪声里分解后故障模态单独拿出来做包络谱特征就明显了。非平稳序列预测把数据分解成趋势、周期、随机成分分别预测再合成比直接用原始序列训练模型精度更高这是热搜里房价预测数据集这类问题的常用套路。特征工程分解后提取各模态的熵、能量、均值、方差等作为特征喂给分类器做故障识别或品类分类。用一句话概括VMD把乱成一团的信号先拆成几个“单项”后面无论是看、是算、还是喂模型都清爽得多。2. VMD信号分解的全流程代码实践2.1 五分钟跑通VMD分解程序化落地第一步是能跑通。Python生态里可以直接用vmdpy这个库封装得很干净。核心代码就几行import numpy as np from vmdpy import VMD # 假设signal是你采集到的原始一维信号float类型长度建议大于100个点 signal np.loadtxt(vibration_data.csv) alpha 2000 # 带宽惩罚因子默认2000 tau 0 # 噪声容忍度0表示精确重构 K 6 # 需要分解的模态数量 DC 0 # 0表示不提取直流分量 init 1 # 初始化方式1为均匀初始化 tol 1e-7 # 收敛停止阈值 u, u_hat, omega VMD(signal, alpha, tau, K, DC, init, tol) # u的形状是 (K, len(signal)) # 每个u[i]是一个模态分量可以单独画图、算特征 for i in range(K): # 对应保存每个IMF np.savetxt(fimf_{i1}.csv, u[i], delimiter,)跑完以后立刻做的事情是把K个IMF画出来和原始信号放一张图里看。一个好分解是每个IMF有明显的窄带特征中心频率从低到高排列而且所有IMF加起来能基本重构回原信号。这一步不是可做可不做的是必须做的。不看图直接拿IMF去算特征跟闭着眼睛开车差不多。我写过一句话常和同事分享VMD的调参过程本质上是“看图说话”的过程程序化不代表自动化关键判断还得到人力。因为K值、alpha值没有万能答案是针对不同数据试出来的。2.2 K值怎么选别迷信单一指标K值选择是VMD工程落地里被问最多的一个问题。有人用中心频率观察法有人用能量损失指标也有人用包络熵。我在项目里最常用的方法是“中心频率观察法”操作非常简单先用一个大的K比如K10运行VMD。把得到的所有模态的中心频率打印出来。观察中心频率序列正常情况下由低到高排列。如果发现相邻两个模态的中心频率非常接近比如差小于采样率的1%说明K设置过大出现了过分解应该降低K值。如果最后一个模态的中心频率还在一个很宽的高频范围内乱跳说明K不够信号里还有没被拆开的成分。比如有一段2000Hz采样率的振动数据试K10之后发现第4和第5个模态中心频率分别是412Hz和418Hz明显靠得太近这就是过分解。把K降到8两个中心频率变成了356Hz和487Hz拉开距离分解结果就合理了。也可以用客观指标辅助判断。我一般在K2到K10之间循环跑VMD对每个K值计算各模态的平均包络熵从vmdpy源码作者的论文里能看到这个指标包络熵越小说明模态的稀疏性越好。K太大会出现虚假模态包络熵反而上升。选包络熵曲线最低点对应的K值八九不离十。2.3 重采样和边界效应两个容易忽略的细节信号进入VMD之前数据质量直接决定分解效果。我见过不止一个项目振动数据变形了直接丢进去分解出来的模态乱七八糟。程序化落地必须把预处理写进流程。第一是重采样。有些采集设备采样率不固定或者中途变了序列长度不一致。VMD对采样率敏感同一段数据在不同采样率下最优K值不一样。处理方法是统一重采样到固定频率工程上常用scipy.signal.resample或者resample_poly。注意重采样前最好做一次抗混叠滤波要不高频成分会在重采样后被折叠到低频分解出来的模态里会多出假成分。第二是边界效应。任何信号分解算法在序列两端都会出现端点发散问题VMD对边界效应有一定抑制能力但信号太短时依然明显。解决办法常见有两种信号两端对称延拓延拓长度取原信号长度的10%左右或者用边界镜像反射让原始信号在首尾形成连续循环。延拓完分解有效部分截取中间原始长度就行。我在处理短数据时习惯直接延拓后再走标准分解流程。from scipy.signal import hilbert # 示例实现最简单的对称延拓 def extend_signal(signal, extend_lenNone): n len(signal) if extend_len is None: extend_len int(n * 0.1) left signal[:extend_len][::-1] right signal[-extend_len:][::-1] return np.concatenate([left, signal, right])2.4 模态混叠问题程序化流程里的防线模态混叠指的是两个不同频率的成分被分到了同一个IMF里或者一个成分被劈到两个IMF。这个问题在EMD里几乎是常态在VMD里依然可能发生尤其是alpha设得不合适或者K没选对。程序化落地的做法是把“混叠检测”写成一个自动化步骤。我的检测逻辑很简单对每个IMF做希尔伯特变换得到瞬时频率曲线如果某一条IMF的瞬时频率在一个时间区间内同时出现两个明显的频率平台就判定发生了模态混叠把这个信息扔出来提示人工调整参数。这个检测不能完全替代人工看图但至少能在批量处理几百条信号时筛出可疑样本把项目推进效率提高一大截。3. 基于VMD的故障诊断从振动信号到轴承故障判断3.1 为什么轴承故障诊断必须先把信号拆开热搜里不少是关于轴承故障诊断、基于数据驱动的工业机器人轴承故障诊断方法数据集。这类问题的本质是正常轴承振动和故障轴承振动在时域波形上区别不明显但频率结构有明显差异。轴承故障会激发周期性冲击在频谱上表现为故障特征频率及其谐波、边频带。问题是这些特征频率往往很微弱被转频、齿轮啮合频率、随机噪声淹没。直接把原始信号拿去做包络谱?当然也可以但效果经常被噪声干扰。先用VMD把信号分解成多个窄带模态找到故障特征最明显的那个模态做包络分析特征信噪比会高很多。这是我实测下来最有效的路径在工业机器人内部轴承数据集上故障识别率明显高于直接包络分析。3.2 故障特征频率的计算得先心里有数做诊断之前要把轴承的结构参数搞清楚否则后面所有分析都是猜。轴承故障特征频率有四个基本公式外圈故障频率BPFO n * fr / 2 * (1 - d/D * cosα)内圈故障频率BPFI n * fr / 2 * (1 d/D * cosα)滚动体故障频率BSF D * fr / (2 * d) * (1 - (d/D * cosα)^2)保持架故障频率FTF fr / 2 * (1 - d/D * cosα)其中n是滚动体数量fr是轴转速频率转每秒d是滚动体直径D是节圆直径α是接触角。拿到这些基础参数计算故障频率不是难事难的是在频谱里找到它们。3.3 完整诊断流程从原始数据到故障判定我拿一个实际案例来说。某产线工业机器人内部轴承数据采样率12kHz转速1500rpm也就是fr25Hz。轴承参数滚动体数9个滚动体直径7.12mm节圆直径38.5mm接触角0度。算下来外圈故障频率理论值大概是106.9Hz内圈故障频率158.1Hz。处理流程分六步每一步都不能糊弄数据读取和异常点剔除。数据里经常有毛刺、断电零值先用中值滤波加阈值判断把坏点处理掉。重采样到统一采样率统一数据长度。用VMD分解K值根据中心频率观察法选择。对这段数据我试过K从4到8最后K6的效果最好频谱分离干净。对每个IMF求包络谱。包络谱就是先对IMF做希尔伯特变换取绝对值得到包络信号再对包络信号做FFT。在包络谱里找故障频率。看峰值是否出现在106.9Hz附近以及它的二倍频、三倍频处。做判断。如果多个谐波处都有明显峰值基本可以确认外圈故障。from scipy.signal import hilbert import numpy as np def envelope_spectrum(signal, fs): analytic hilbert(signal) envelope np.abs(analytic) spectrum np.abs(np.fft.rfft(envelope)) freqs np.fft.rfftfreq(len(envelope), 1/fs) return freqs, spectrum # 对第3个IMF做包络谱分析 freqs, spec envelope_spectrum(u[2], fs12000)为什么是第3个IMF因为振动信号里轴承外圈故障的冲击响应集中在中频段而原始信号里低频有转频成分、高频有噪声成分分解之后中频段的那个IMF自然就是故障信息最集中的地方。这就是VMD的价值不用自己设计和滤波器算法根据信号的频率结构自动划分频带故障模态自己冒出来。3.4 诊断过程的验证避免误报诊断结果出来以后必须验证。我在实际项目里一般做三重验证故障特征频率的谐波验证理论频率处有峰还要看二倍频、三倍频处是不是也有峰值单峰未必可靠谐波齐全才靠谱。时域冲击间隔验证在包络信号的时域上去找冲击间隔看是不是等于1/故障频率这条更直观更可靠。对照验证用同工况正常轴承数据跑一遍相同流程确认正常数据在故障频率位置没有相同峰值。这三步走完才敢给设备维保团队出结论。VMD只是手段诊断结论是要面对真金白银的停机维护决策的宁可多费时间验证不能为了“看起来像”就下结论。4. 基于VMD的数据预测分解-预测-重构小样本也能做4.1 为什么分解之后预测精度会更高预测类项目比如热搜里的房价预测数据集、小样本仿真数据预测很多人拿原始序列直接喂模型效果一般然后怀疑模型不行。实际上很多时候问题不在模型在于原始序列的成分太复杂既有长期趋势又有周期性波动还叠加了随机噪声。让一个模型同时把握这些不同尺度的规律有点强人所难。VMD的思路是把这些成分分开处理趋势成分用一个简单的回归模型就能拟合得很好周期成分用一个带季节性的模型随机成分本身难预测但占比通常小对整体误差影响有限。分别预测之后再相加整体精度就能上去。我用相同的数据对比过直接LSTM预测和VMDLSTM预测后者在长序列上的RMSE能降低20%到40%。这背后的逻辑是每个IMF的谱复杂度低了信号的规律性更强了。模型学起来更容易置信度也更高。4.2 小样本场景高斯过程回归为什么合适小样本预测是工程里非常常见的场景。设备刚运行没有几百条数据或者试验成本高根本拿不到大量样本。深度学习模型在这种场景下几乎无效而高斯过程回归GPR的天然优势就是小样本。GPR的核心思想是在函数空间里建立先验分布通过观测数据更新得到后验分布。因为能给出预测值的置信区间在样本量少的情况下依然能保持较好的泛化能力。数学上它假设函数值服从多元高斯分布用核函数度量输入点之间的相似性预测时利用协方差结构外推。不要把它当成黑盒它本质上是在说你给我几个已知点我根据相似度加权估算未知点的值。配合VMD使用时的流程是每个IMF单独训练一个GPR模型或一个轻量级回归模型分别预测未来若干步最后把各模态的预测结果叠加。每个IMF波形简单GPR能快速稳定收敛而且超参数少手动调整不费事。GPR常用的核函数是RBF核加常数核组合RBF控制局部平滑性常数核控制整体方差from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF, ConstantKernel kernel ConstantKernel(1.0, (1e-3, 1e3)) * RBF(1.0, (1e-2, 1e2)) model GaussianProcessRegressor(kernelkernel, n_restarts_optimizer5) model.fit(X_train, y_train) y_pred, y_std model.predict(X_test, return_stdTrue)有个细节要注意GPR输入特征通常是滞后窗口序列比如用前12个点预测后1个点。窗口长度不是越大越好太大的窗口会让核矩阵变大、训练变慢小样本场景下还容易过拟合。我一般试10、20、30三个窗口长度用小规模验证集选最优。4.3 完整预测流程以房价数据为例用房价月度数据来串一遍全过程。假设有120个月的房价指数结构化时序数据目标是预测后6个月。第一步把原始序列做归一化毕竟VMD对数据尺度敏感。第二步K值选择。对于这种有明显趋势和季节周期的数据K4到5一般就够。我用中心频率观察法看到前3个中心频率分别对应低频趋势、年周期、季度周期高频模态主要是噪声就把K定为4最后一个当成噪声序列预测为近零或是用均值。第三步每个IMF按0.8:0.2划分训练集测试集分别训练GPR模型。第四步每个模型预测后6个点叠加得到最终预测。第五步反归一化画图和真实值对比。这套流程的复现成本很低代码量200行以内。热词里那些“房价预测数据集”、“采用大模型做预测”其实并不需要杀鸡用牛刀VMDGPR在小样本、单变量时间序列上的性价比极高。4.4 预测结果的稳定性评价预测做得好不好不能只看一个指标。我习惯同时看三个RMSE反映误差绝对值MAPE反映相对误差还有一个容易忽略的是“符号命中率”或者叫方向准确率也就是预测值和真实值的增减方向是否一致。对业务方来说涨跌方向有时比涨跌幅度更关键尤其房价这种场景方向错了比幅度错了代价大得多。多次运行取标准差也很必要。VMD本身是确定性的但如果你选了不同K值再训练模型结果会有差异。我建议在做结论前跑一次稳健性测试K取3到6各跑一遍看预测曲线是否保持在同一个范围内。如果K值稍微变动预测结果就面目全非说明数据里噪声太多模型不可靠需要回到预处理阶段处理异常值。5. 基于VMD的分类应用特征提取、模型选择与场景边界5.1 从IMF到特征分类问题的核心是特征工程VMD在分类任务里充当的角色不是直接把IMF丢给分类器。分类器需要的是一组能区分不同类别的特征。常见做法是对每个IMF计算统计特征和熵特征能量占比每个IMF的能量占所有模态总能量的比例反映信号能量分布结构。排列熵衡量模态的复杂度和随机性故障信号的排列熵通常大于正常信号。样本熵检测时间序列的规律性规律性越强样本熵越小。均方根、峰值、峭度经典时域指标区分冲击性故障效果好。中心频率和带宽从VMD结果里直接读能代表频率结构的变化。把这些特征拼成一个特征向量就是每个样本的输入。后面接分类器就随你选了。二分类用XGBoost多分类用随机森林或带softmax的神经网络。5.2 XGBoost二分类轴承故障诊断中的典型用法很多热词里出现的“XGBoost二分类模型”在轴承故障诊断里是这样用的采集正常和故障两类信号每类样本几十到几百段。每段做VMD分解提取特征向量。给故障样本标1正常样本标0。按7:3分训练和测试集。训练XGBoost二分类器调n_estimators、max_depth、learning_rate。用准确率、召回率、F1、混淆矩阵评估。关键点在于特征矩阵的质量。VMD特征能捕捉到频带能量分布这种特征在不同工况、不同转速下相对稳定。我做过一组故障注入实验VMD特征配合XGBoost在中等信噪比下的故障识别准确率能到95%以上。XGBoost在特征不多、样本量几千以内时表现稳健而且自带特征重要性排序能反过来验证哪些特征对分类贡献大。有一个坑类别不平衡故障样本往往远少于正常样本。在XGBoost里设scale_pos_weight参数或者用SMOTE过采样比单纯调阈值更省事。from xgboost import XGBClassifier model XGBClassifier( n_estimators300, max_depth4, learning_rate0.05, scale_pos_weightnormal_count / fault_count, eval_metricauc, use_label_encoderFalse ) model.fit(X_train, y_train)5.3 回归到分类MNIST那类图像分类要不要用VMD热词里还有“mnist手写数字分类pytorch”。这里值得聊一个边界问题VMD是为时间序列信号设计的它处理的是1维振动、声音、生理信号而不是图像。MNIST是2维图像分类主流做法是CNN没有理由把图像拉平了做VMD。这不是VMD的适用边界问题而是工具选型问题。同样的道理适用于结构化表格数据分类。如果特征是身高、年龄、收入、地区这种字段没有时序关系VMD完全没意义直接用XGBoost、LightGBM或者逻辑回归就行。很多初学者容易陷入“手里有锤子看什么都是钉子”的误区。判断是否该用VMD有个简单标准你的数据是否天然具有时间或频率维度没有就别用。VMD能真正发挥优势的分类场景是那些“信号形态分类”任务包括轴承故障分类、语音情感分类、电机噪声分类、连接器插拔力波形分类这类。热词里出现的“fakra连接器分类”、“嘉立创电容分类”如果数据底层是测试曲线、力信号、振动信号那VMD就大有用武之地。把曲线分解提取模态特征再去做分类能显著提升对细微结构差异的敏感度。5.4 分类模型的事后验证别只盯着准确率做过分类项目的都知道准确率高有时候是指标陷阱。数据不均衡时准确率虚高故障样本一个都没识别出来准确率照样能到90%。所以分类模型的评估至少要看混淆矩阵重点关注每类样本的召回率。在VMD分类项目里还有一个更隐蔽的坑VMD是自适应分解同一个样本用不同K值特征向量完全不同会导致分类模型训练好之后上线不稳定。我的习惯是选定K值后在整批训练数据上做一致性验证抽取10个样本用KK0和KK0±1分别提取特征喂给已经训练好的模型看预测类别是否稳定。如果不稳定就说明数据本身的频率结构不稳定需要回到特征工程层解决而不是猛调分类器参数。6. VMD程序化实战常见坑与排查记录6.1 高频模态“尖叫”alpha设置不合理某次处理10000Hz采样率的振动信号K6alpha2000结果最后一个IMF几乎全是高频尖刺噪声完全没有物理意义。排查下来是alpha偏小导致高频模态带宽过大算法为了满足重构条件硬是把噪声也包进来了。把alpha调到5000高频模态的波形立刻变得有规律尖刺成分被压掉了。结论高采样率信号大于5kHz适当增大alpha低采样率信号低于1kHzalpha可以适当减小。这个规律虽然不严格但省去了大量试错时间。6.2 分解出来的IMF数量跟心脏跳动一样多K值过分解有一次处理轴承内圈故障数据拍脑袋设了K10。结果第3和第4个IMF的中心频率分别是213Hz和221Hz几乎肩并肩。做包络谱的时候两个模态都出现故障频率峰值但形态半像不像根本没法用。回头看就是典型的过分解。解决办法是把K从10降到7重新观察中心频率分布。K值选择不能指望一次成功而是在K4到K10之间扫一遍记录每个K值下的中心频率间距和包络熵选整体最合理的那个。6.3 边界效应导致“两头翘”这个坑容易出现在短序列上比如采集了2秒信号喂给VMD以后首尾各出现一段畸变波形。原因在于信号两端不连续算法在迭代时端点处没有足够的局部信息约束模态被强行拉高或压低。我的对策是前面提过的对称延拓法延拓后分解再截取原始长度。还有一个折中对策是分解后直接裁掉每个IMF首尾各5%的采样点虽然损失一点有效数据但能保证中间部分的特征计算不受污染。两个办法我都用过延拓对低频模态效果好裁剪法对高频模态更省事。6.4 预测结果整体滞后滞后窗口和模态噪声的叠加做VMDGPR预测时遇到的问题预测曲线比真实曲线晚半拍形态明明差不多但就是错位。这种滞后感有几个来源。一是输入窗口里的噪声模态没有被抑制噪声模态的预测值在叠加时拖累了整体相位二是GPR的核函数长度尺度偏大预测过于平滑削峰填谷自然就滞后。我的解决思路是分模态看问题对趋势模态用更大的窗口长度因为趋势变化缓慢需要更多历史信息对高频随机模态用较小窗口甚至直接用均值预测因为随机成分本来就不可预测强行预测只是在给模型注入噪声。这个“分而治之”的思路是VMD参与预测最大的优势。问题排查速查表现象可能原因解决动作IMF出现高频尖刺alpha过小噪声被包进模态增大alpha相邻IMF频谱重叠严重K值过大降低K值重新观察模态首尾畸变边界效应对称延拓或裁剪两端低频模态含高频毛刺噪声容忍度过高调小tau预测结果整体滞后噪声模态叠加噪声模态单独用均值预测分类特征不稳定K值不一致统一K值并做一致性验证6.5 运行时间失控的排查还有一个实际项目里经常出现的问题VMD迭代不收敛程序跑了几分钟都没停。排查后发现是tol设得太严格比如1e-9或者信号本身过长且模态过多。工业场景一条振动信号可能上百万个点K8、tol1e-7算下来单条信号十几秒还能忍批量处理几百条就要想优化方案。优化手段有几种信号先降采样到有效频段的3到5倍K值优先取最小可用值tol放宽到1e-6或5e-6迭代次数少一半分解效果肉眼几乎看不出差别。批量处理时这个优化能让整个流程的时间从“小时级”降到“分钟级”。写在后面程序化应用的关键不是算法本身做这些项目给我最大的感受是VMD这类工具真正值钱的不是数学公式有多漂亮而是它能把信号处理工程师脑子里的经验变成一套可复用的程序流程分解、选K、提特征、诊断、预测、分类每一步都可以写进流水线。参数选K和alpha可能永远没有全自动的一天但配合中心频率观察法、包络熵辅助判断已经能解决绝大多数实际数据。最后分享一个小技巧也是我自己用顺手的习惯任何一批数据拿到手不要先急着上VMD先做一次FFT看频谱心里对频率成分有个大致预期再设定K。这个习惯让我少调了一堆冤枉参数。工程问题里往往缺的不是模型而是对数据本身的耐心。VMD给了这份耐心一个趁手的工具剩下的就是用它把问题拆清楚。
返回列表