ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

鲸鱼算法优化VMD参数:从人工盲调到自动寻优的MATLAB实践

鲸鱼算法优化VMD参数:从人工盲调到自动寻优的MATLAB实践 简介面向信号处理、故障诊断与Matlab算法研究者这份资料提供鲸鱼优化算法WOA与变分模态分解VMD相结合的Matlab实现方案核心是用WOA自动寻优VMD中的模态数K和惩罚因子alpha避免人工试凑提升分解效果。资源以单个PDF文档形式提供压缩包约600KB文档内包含参数化Matlab主程序、边际谱、频率图、收敛曲线、VMD超参数优化迭代过程图并配有Excel数据替换与main一键运行说明整体代码注释明细、逻辑清晰便于修改和复现。目前已有超过1300人浏览学习适用于计算机、电子信息工程、数学等专业学生的课程设计、期末大作业和毕业设计。由于相关实现使用者较少作为信号分解方向的创新点较具竞争力也可作为进一步研究WOA-VMD原理、对比分解方法或开展故障诊断实验的基础资料。1. 为什么要折腾VMD 的两个参数凭什么要让一条鲸鱼来定把一段轴承振动信号丢进变分模态分解第一件事就是要回答拆成几个模态K惩罚因子 alpha 调到多少这个答案直接决定分解结果能不能看。我见过不少人花一周调 VMD 参数K 从 3 试到 10alpha 从 200 试到 4000每次跑完模态图照样乱七八糟最后只能靠“玄学”定一组看起来顺眼的。所谓 WOA-VMD就是用鲸鱼算法Whale Optimization Algorithm自动搜索 VMD 的最优参数组合把人工盲调变成可复现的寻优问题。它对新手的价值是省心对老手是提供一套能写进论文和报告的调参框架。适合机械故障诊断、电力暂态信号、地震与生物医学等非平稳信号处理场景。下面先把原理和流程走一遍最后给出能直接改着用的 MATLAB 代码和排错清单。2. VMD 变分模态分解K 与 alpha 是台机器的两根旋钮2.1 VMD 到底在干什么把信号拆成有限带宽的模态变分模态分解的核心思路把一段信号拆成 K 个模态每个模态都是具有一定带宽的调频调幅分量同时要求所有模态加起来能精确还原原始信号。它把“分解”形式化为一个变分问题一边是最小化所有模态的估计带宽之和另一边是模态求和等于原始信号的约束。用文字描述这个变分目标就是对每个模态先做希尔伯特变换得到解析信号再乘上一个指数项把该模态的中心频率搬到零频附近最后对这个信号求时间导数并取范数。范数越小意味着这个模态在频域上带得越窄。约束条件是分解出的 K 个模态相加等于原信号 f(t)也就是说分解过程不允许丢失能量。求解用的是拉格朗日乘子法和交替方向乘子法ADMM不断交替更新模态、中心频率和拉格朗日乘子直到收敛。VMD 和早期常用的 EMD经验模态分解有个本质区别EMD 是递归筛选一层一层扒皮结果受包络估计和端点问题影响很大VMD 是一次性求解一个整体优化问题有清晰的数学目标。所以 VMD 在抗模态混叠方面天生比 EMD 稳健但它把 EMD 的“筛参数”问题换成了“K 和 alpha 选多少”的问题后者的棘手程度一点没降。见过不少人把 VMD 当成黑匣子只要设置 K 和 alpha回车就出图。其实 K 和 alpha 才是 VMD 真正的“工作量”。我当时第一次用 VMD 处理某齿轮箱振动数据时K5、alpha3000 分出来的模态图非常漂亮中心频率依次排列换 K6、alpha1000 后原本清晰的啮合频率被切成三段还多出一个纯噪声模态。两者结果判若两个算法跑出来的这就是参数敏感性的直观体现。2.2 K 和 alpha一个管拆几刀一个管带宽紧不紧K 是模态数量属于离散参数。K 太小会出现欠分解两个相邻的谐波分量被并进同一个模态模态频谱看起来像一块宽平台K 太大则出现过分解一个真实分量被拆成几个窄条每个窄条都对应一个物理上不存在的“伪模态”而且相邻模态的中心频率会挤在一起。最让人头疼的是VMD 不会在你 K 设得过大时报错它会老老实实分出 K 个模态那些多余的模态看起来也像那么回事所以光看模态图很难判断是不是拆多了。alpha 是惩罚因子属于连续参数。它控制的是变分目标里“带宽最小化”的权重alpha 越大模态带宽约束越严各模态被压得越窄alpha 越小模态带宽越宽松越容易出现模态之间频率重叠。alpha 设得过低噪声成分会被分进模态里或者两个模态共享同一条频带alpha 设得过高真实分量本该有的边带被削掉冲击信号的包络波形会失真。除了 K 和 alphaVMD 还有 tau时间步长和容差等内部参数。常见做法是 tau 用默认自动值容差保持默认一般不参与优化。把优化范围控制在 K 和 alpha 两个维度上搜索空间小WOA 这类群智能算法跑几十次迭代就能覆盖这也是 WOA-VMD 能落地的关键前提。2.3 拍脑袋与网格搜索的代价为什么人工调参不划算有人会问既然只有两个参数用网格搜索把 K 从 2 到 10 挨个试alpha 从 200 到 4000 每隔 200 试一次总共也就 180 多次组合跑一晚上不就好了理论上是这样但工程上有个现实问题每一次 VMD 分解都是一次完整的 ADMM 迭代求解对一段 8192 点的信号一次分解要几百毫秒到几秒不等180 次组合累计下来就是几十分钟到数小时。而且网格粒度再细一点组合数就上万了。更麻烦的是参数经验迁移性差。在某台电机上很好用的 K4、alpha2000换到另一台采样率或负载工况不同的设备上结果可能是灾难性的。不同信号长度、不同信噪比、不同特征频率密度都会改变最优 K 和 alpha 的位置。所以按固定套路调参本质上是在碰运气。还有一个容易被忽视的成本人工调参时人只能同时看一两张图很难定量比较“这组参数比那组好多少”。WOA-VMD 的价值恰恰在于用包络熵等标量指标把“分解得好不好”量化让算法替人做比较和选择。总量化、可复现这是它区别于手工试参的核心。3. 鲸鱼算法 WOA 为什么会接这单活寻优逻辑与三个关键机制3.1 为什么选 WOA不是因为它炫而是因为它适合二维连续寻优VMD 参数寻优问题有四个特点维度低、连续与离散混合、目标函数非凸、单次评估代价高。目标函数是“参数组合 → VMD 分解 → 包络熵计算”非凸存在大量局部极小点不能用梯度类算法。遗传算法和粒子群也常被用来调 VMD 参数实践中都能收敛但 WOA 在类似场景中更省事一些。对比之下WOA 的优势主要是实现简单和超参数少。遗传算法需要设交叉率、变异率、选择策略粒子群需要设惯性权重、个体和全局学习因子每个超参数都会影响收敛质量调起来相当于套娃。WOA 的核心超参数只有种群规模和迭代次数a 的衰减规律是固定的默认设置就能在大多数问题上给出合理结果。WOA 的寻优机制是先全局探索后局部开发前期 a 值大个体被推着到处跳避免一上来就掉进局部极小后期 a 值小群体收缩到最优解附近精细搜索。这与“先确认参数大致区域再精确定位”的工程直觉一致。对 VMD 这种评估一次就要跑完整 ADMM 的目标函数迭代次数控制在 30 左右就能看到收敛趋势性价比很高。3.2 三个更新机制包围、气泡网、随机搜索WOA 模拟座头鲸捕食行为每个个体代表一组候选解。更新位置时按概率 p 走两条路p 大于等于 0.5 时做螺旋气泡网攻击p 小于 0.5 时根据 |A| 的大小决定是收缩包围还是随机搜索。收缩包围的公式是所有群智能算法里最朴素的一类先算个体到当前最优解的距离 D这里距离带一个随机系数 C作用是让搜索轨迹带一点随机振幅然后按 X_new X_star - A * D 更新位置。A 的计算是 A 2ar - a其中 r 是 0 到 1 的随机数a 从 2 线性衰减到 0。所以迭代前期 A 的绝对值通常大于 1个体偏离最优解迭代后期 A 的绝对值小于 1个体被拉向最优解。螺旋更新则把当前个体与最优解的距离按对数螺线映射X_new D * exp(bl) * cos(2pi*l) X_star其中 b 是螺线常数l 是 -1 到 1 的随机数。这条路径保证了群体不会全部挤向同一个点而是围绕最优解做螺旋逼近。随机搜索发生在 |A| 1 时个体随机取种群中另一个体作为参考点保证全局遍历性。三个机制配合的意义在于WOA 没有显式的变异算子但随机搜索和带随机系数的包围更新提供了等价于变异的能力。对 VMD 参数问题来说K 是整数、alpha 是连续量位置更新后对 K 做取整、对越界做截断就能保持种群始终在合法搜索空间里这一点后面代码里会体现。提示WOA 中 p、r、l 都是均匀随机数不需要额外调参。你只需要决定种群大小和迭代次数。3.3 参数编码与边界设计K 当整数alpha 当连续量别混着一锅炖设计 WOA-VMD 的第一步是把搜索空间定清楚。K 的搜索范围一般取 2 到 10下界必须大于等于 2因为 K1 等于没分解。alpha 的搜索范围常见取 200 到 4000经验上低于 200 时带宽约束过松高于 4000 时模态被压得过窄容易出现数值不稳定。具体取值还要看采样率和信号特征频率范围采样率高的信号可以适当放宽上界。编码规则上K 是整数维度每次迭代更新后用 round 取整alpha 是连续维度直接参与计算。两个维度共用同一个位置更新公式但处理方式不同。如果不做取整WOA 会搜索 K3.7 这种无意义值虽然适应度函数里 round 一下也能跑但显式处理更稳。初始种群用均匀随机分布生成每个个体在 lb 到 ub 之间取随机数。WOA 对初始化位置并不挑剔VMD 参数空间小即使初始种群差一点迭代二十次也能收敛到有意义的区域。关键点是 alpha 维度为了覆盖不同量级可以按线性区间均匀采样不需要做对数变换因为 alpha 的寻优区间通常横跨一到两个数量级线性采样就够用。还有一点设计完搜索空间后建议先随机取 3 到 5 组参数手动跑一遍 VMD确认边界附近 VMD 本身不报错。比如 alpha4000、K10 的组合在某些信号上可能让 ADMM 收敛很慢提前试错比等 WOA 跑完再排查要省时间。4. WOA-VMD 落地包络熵目标函数与可跑通的完整流程4.1 目标函数为什么选包络熵一句话包络熵越小模态越稀疏越有“骨头”WOA 要优化必须有个标量目标函数。VMD 分解结果的评价指标很多最常用于故障诊断场景的是包络熵。先把定义说清楚对每个模态求希尔伯特包络把包络幅值归一化成概率分布再算这个分布的信息熵就是包络熵。包络熵的物理含义是包络的稀疏程度。理想情况下一个好的模态应该结构规整、冲击成分明显包络集中在少数时刻包络熵小相反如果模态里全是噪声或混叠成分包络变得平坦杂乱包络熵就大。所以在轴承、齿轮这类冲击型故障信号上最小化包络熵能引导 WOA 找到让模态最“纯净”的 K 和 alpha。我一般选各模态包络熵的平均值作为适应度而不是取最小值。原因是取最小包络熵会偏向某个偶然被分得很稀疏的模态而平均值能综合反映整体分解质量。当然平均值也有它的毛病K 越大每个模态分到的能量越少包络归一化后熵值有自然变小的趋势这会让算法偷偷偏向更大的 K。这个问题放到第 5 章避坑里细说目标函数设计本身就是 WOA-VMD 最容易翻车的地方。4.2 woaVMD 主函数与适应度函数MATLAB 代码逐段讲透下面代码假设你已经有一段待分解信号并且 MATLAB 里有支持vmd()的信号处理工具箱如果你用的是某个开源 VMD 实现只需要把调用处替换成你自己的函数名。function [bestK, bestAlpha, bestEn, curve] woaVMD(signal, pop, MaxIter, lb, ub) % woaVMD: 鲸鱼算法优化VMD参数(K, alpha) % 输入: % signal : 待分解信号, 行向量 % pop : 鲸鱼种群数, 建议 20~30 % MaxIter : 最大迭代次数, 建议 30~50 % lb : 参数下界, 形如 [Kmin, alphamin] % ub : 参数上界, 形如 [Kmax, alphamax] % 输出: % bestK : 最优模态数 % bestAlpha: 最优惩罚因子 % bestEn : 最小平均包络熵 % curve : 收敛曲线 dim 2; X zeros(pop, dim); % 初始化种群: K 取整, alpha 连续 for i 1:pop X(i,1) round(lb(1) rand*(ub(1)-lb(1))); X(i,2) lb(2) rand*(ub(2)-lb(2)); end fit zeros(pop, 1); for i 1:pop fit(i) vmdFitness(signal, X(i,1), X(i,2)); end [bestEn, idx] min(fit); bestX X(idx, :); curve zeros(MaxIter, 1); for t 1:MaxIter a 2 - 2*t/MaxIter; % a 从 2 线性衰减到 0 for i 1:pop r1 rand; r2 rand; A 2*a*r1 - a; % 决定随机搜索还是包围 C 2*r2; p rand; % 决定螺旋还是收缩 if p 0.5 if abs(A) 1 D abs(C*bestX - X(i,:)); % 包围猎物 X(i,:) bestX - A*D; else k randi(pop); % 随机参考个体 D abs(C*X(k,:) - X(i,:)); X(i,:) X(k,:) - A*D; end else l -1 2*rand; % 螺旋步长因子 D abs(bestX - X(i,:)); % 螺旋气泡网 X(i,:) D*exp(l)*cos(2*pi*l) bestX; end % 越界处理: 边界截断, K 取整 X(i,1) max(lb(1), min(ub(1), round(X(i,1)))); X(i,2) max(lb(2), min(ub(2), X(i,2))); fnew vmdFitness(signal, X(i,1), X(i,2)); if fnew fit(i) fit(i) fnew; end if fnew bestEn bestEn fnew; bestX X(i,:); end end curve(t) bestEn; end bestK bestX(1); bestAlpha bestX(2); end这段代码的关键逻辑初始化时 K 直接取整alpha 在连续区间均匀撒点每轮迭代先更新全局衰减系数 a再对每个个体按 p 和 |A| 分三种情况更新位置。更新后立刻做边界截断K 用 roundalpha 用 min/max 夹住这一步不能省否则 WOA 会跑到 K12 或 alpha5000 这种区间外VMD 分解可能变慢甚至报错。适应度函数的实现如下function [fitness, u] vmdFitness(signal, K, alpha) % vmdFitness: 对一组(K, alpha)执行VMD并返回平均包络熵 % 输入: % signal : 待分解信号, 列向量 % K : 模态数 % alpha : 惩罚因子 % 输出: % fitness: 平均包络熵, 越小越好 % u : 分解得到的模态矩阵, 每列一个模态 [u, ~] vmd(signal, NumIMFs, K, PenaltyFactor, alpha, ... Tau, 0, Tolerance, 1e-7); en zeros(1, K); for k 1:K env abs(hilbert(u(:,k))); % 希尔伯特包络 p env / (sum(env) eps); % 包络归一化 en(k) -sum(p .* log(p eps)); % 包络熵 end fitness mean(en); % 取平均 end这里有必要解释几个容易写错的地方。hilbert返回的是解析信号取绝对值后才是包络直接用实信号算得不到包络。归一化时分母加eps取对数时也加eps都是为了防除零和 log(0) 产生 NaN。只要信号某一段包络值为零不加保护就会让适应度变成 NaNWOA 的 min 比较立刻失效这是新手最容易踩的坑。在调用vmd时Tau0表示让算法自动确定时间步长Tolerance1e-7是收敛精度。若你的信号点数比较大可以把容差放宽到 1e-6 换速度。另一个要注意的是vmd要求输入信号是列向量如果读进来的数据是行向量先做signal signal(:)再传给优化函数。4.3 主脚本与验证环节不要只盯着收敛曲线写一个主脚本把上面两个函数串起来%% WOA-VMD 主脚本 rng(42); % 固定随机种子, 保证结果可复现 load(bearing_data.mat); % 换成你自己的信号, 变量名自定 signal data(1:8192); % 取一段定长数据, 方便FFT signal signal(:); % 强制转列向量 lb [2, 200]; % K 下界 2, alpha 下界 200 ub [10, 4000]; % K 上界 10, alpha 上界 4000 [bestK, bestAlpha, bestEn, curve] ... woaVMD(signal, 20, 30, lb, ub); fprintf(最优 K %d\n, bestK); fprintf(最优 alpha %.1f\n, bestAlpha); fprintf(最小平均包络熵 %.4f\n, bestEn); % 用最优参数重新分解并做重构检验 [u, ~] vmd(signal, NumIMFs, bestK, PenaltyFactor, bestAlpha); rec sum(u, 2); fprintf(重构最大误差 %.3e\n, max(abs(rec - signal))); % 计算各模态中心频率 Fs 12800; % 替换成你自己的采样率 N length(signal); f_center zeros(1, bestK); for k 1:bestK P abs(fft(u(:,k))); [~, idx] max(P(2:floor(N/2)1)); f_center(k) (idx) * Fs / N; end disp(f_center);主脚本里的rng(42)是整条链路的“后悔药”WOA 是随机算法不固定随机种子你换一台电脑或换一次运行结果可能不一样。固定种子后同一条信号在任何机器上都能复现同一组参数论文和报告里也方便别人复核。最优参数确定后一定要用最原始信号重新分解一次做两件事。第一件事是重构误差检查把分解出的 K 个模态全部相加和原始信号相比最大误差应该在 1e-6 量级。如果误差偏大说明某些模态分量在寻优过程中被丢弃或算法没收敛。第二件事是看中心频率把 VMD 输出的模态逐列做 FFT取功率谱峰值对应的频率作为中心频率近似值检查相邻模态中心频率是否明显分开。如果两个频率差值小于各自频谱主瓣宽度大概率是模态混叠。注意这里用 FFT 峰值估算中心频率只是一种工程近似。VMD 内部求出的中心频率更精确但 MATLAB 的vmd并不把每个模态的中心频率直接暴露出来FFT 方法足够用来做验证。5. WOA-VMD 避坑指南5 条血泪经验照着排能少熬三个夜5.1 模态混叠中心频率出现“黏连”怎么办现象分解出的模态图从时域看形态清晰但从频谱看两个模态的功率谱大面积重叠中心频率相差不到主瓣宽度。最典型的表现是同一段轴承故障信号K7 时分出两个中心频率几乎相同的模态分别都带冲击特征。原因K 设得偏大或 alpha 设得太大。K 偏大时VMD 会把一个真实分量拆成两个相邻窄带alpha 太大时每个模态被压得太窄边带丢失后相邻模态容易各自取一小块频谱区域。目标函数里没有对频率分离度做惩罚所以 WOA 不会主动避开这种分布。解决先看中心频率列表如果相邻频差小于最小模态带宽优先减小 K 重跑一次。或者在原目标函数里加一个惩罚项把相邻中心频率的最小间隔乘一个权重并计入适应度让算法自动避开频率重叠解。具体实现时可以在 vmdFitness 里加一段对 VMD 分解后各模态中心频率做排序计算相邻差值的倒数作为惩罚。这个惩罚因子不宜过大否则会强迫模态人为分离一般取 0.01 到 0.1 量级。5.2 适应度函数翻车包络熵对非冲击信号会“失灵”现象把 WOA-VMD 用在平稳谐波信号或电力系统稳态波形上优化结果总是 K2、alpha4000分解后第一个模态是整段信号第二个模态是残余噪声。包络熵很小但分解没有实际物理意义。原因包络熵偏爱稀疏冲击信号。平稳信号的包络本身就平坦熵值变化不大K 越大平均包络熵反而可能越小于是算法被推向边界。这是目标函数与信号类型不匹配造成的不是 WOA 的 bug。解决换目标函数。冲击型故障信号用包络熵没问题对于非平稳但非冲击信号改用能量熵或排列熵更合适。能量熵衡量各频带能量分布均匀程度适合判断分解是否把能量打散排列熵对微弱阻抗变化更敏感。我建议在做 WOA-VMD 前先花半小时用小样本数据把包络熵、能量熵、排列熵各跑一遍看哪张模态图符合你的工程常识再把它定为目标函数。这一步成本低收益却很大。5.3 优化结果不可复现每次跑参数都不一样现象同一条信号、同样的代码第一次跑出 K5、alpha1800第二次跑出 K6、alpha3200模态图差异明显。有人会怀疑算法有 bug其实这是随机优化算法的正常表现。原因初始种群是随机生成的WOA 本身的螺旋、随机搜索也依赖随机数所以不同运行结果的差异天然存在。信号较长或噪声较强时适应度函数表面有大量局部极小随机性更明显。解决主脚本里的rng(42)不是摆设正式实验必须固定随机种子。更稳妥的做法是同一信号重复跑 5 次每次用不同随机种子记录最优参数和适应度如果 5 次结果都在相近区域说明这组参数可信如果波动很大说明目标函数对参数过于敏感需要先检查信号长度和 VMD 参数本身。报告中应写明随机种子、种群数和迭代次数这是工程可复现的底线。5.4 边界效应信号两端被 VMD“撕开”现象分解出的模态在信号起始和结尾处出现大幅波动波形像被强行掰弯中段看着正常两端却完全偏离原信号。模态数量越多两端畸变越明显。原因VMD 的 ADMM 迭代对信号两端处理能力有限频谱估计算法在端点处不可避免地产生误差。短信号尤其严重一段 2048 点的数据端点效应可能污染前 50 个点。解决分解前对信号做镜像延拓。常见做法是在信号两端各拼接一段镜像数据拼接后用 WOA-VMD 分解再截掉延拓部分只保留中间原始区间。延拓不影响 VMD 的 K 和 alpha 语义却显著改善端点质量。实现时可以先写两个小函数一个做延拓一个做截断然后在主脚本里调用。5.5 搜索边界陷阱WOA 给出 K1 或 alpha 顶到上限现象最优参数恰好落在搜索空间边界比如 K1、alpha4000适应度曲线下降得很平稳但分解结果毫无意义。K1 意味着 VMD 根本没分解。原因K1 时所有能量都集中在一个模态包络归一化后熵值可能很低算法把它当成了局部最优点。alpha 同理因为 alpha 越大带宽越小包络熵也可能变小所以算法会死推 alpha 到上界而不愿意回来。解决K 的下界直接设成 2不让算法触碰无意义解同时在目标函数里给 K 加一个小惩罚项比如对 K 大于等于某个值施加 0.01 的线性惩罚抵消“K 越大平均包络熵越小”的趋势。alpha 的上界不建议设太高4000 对大多数信号足够如果发现最优 alpha 总是压在上界附近说明你的信号需要更大带宽应该考虑检查信号本身是否被过度预处理。6. 进阶玩法不是选最小包络熵而是选一个“稳”的目标函数6.1 适应度函数对比在动手之前先选好赛道指标偏向信号类型优点典型坑包络熵冲击型故障信号计算快对稀疏冲击敏感平稳信号下失效K 越大熵越小能量熵一般非平稳信号通用性较好对相邻模态频率重叠不敏感排列熵微弱状态变化信号对非线性、随机扰动敏感需要嵌入维数和时延不同参数结果差异大峭度强瞬态冲击简单直观单点强脉冲会让峭度虚高我的习惯是先用包络熵跑一遍看收敛曲线形状再换排列熵跑一遍对比最优 K 和 alpha。如果两个指标给出的参数差距在一个模态以内说明结果稳定如果差出三个模态说明信号自身特征提取不清晰再往下优化没有意义。选目标函数不是越复杂越好而是越匹配越好。6.2 分解质量的两个硬检验WOA-VMD 收敛后不要急着画模态图先做两个量化检查。重构误差检验已经在主脚本里写了另一个是模态独立检验计算分解后各模态的互相关系数矩阵对角线之外的最大值超过 0.3 时说明模态之间仍有混叠成分。主脚本补一段代码R corrcoef(u); offdiag abs(R); offdiag(1:bestK1:end) 0; % 对角线置零 fprintf(模态互相关最大值 %.3f\n, max(offdiag(:)));这个矩阵读法很直观如果第 2 个模态和第 3 个模态的相关系数到了 0.6说明这两个模态共享了大量相同波形分解不干净。此时优先减小 K 重寻优而不是继续微调 alpha。6.3 批处理与参数固化的习惯工程上很少只处理一段信号。多段工况数据处理时我习惯把 WOA-VMD 封装成一个函数循环读取每段数据输出参数表fileList {case1.mat, case2.mat, case3.mat}; params zeros(length(fileList), 3); for i 1:length(fileList) load(fileList{i}, data); % 每段信号长度保持一致 [bk, ba, be] woaVMD(data(:), 20, 30, lb, ub); params(i,:) [bk, ba, be]; end disp(params);各段信号单独寻优时要注意不要追求用一组 K 和 alpha 处理所有工况。不同工况下特征频率和信噪比不同一组参数打天下是工程陷阱。合理做法是批处理后检查参数表是否有跳变如果相邻工况参数突变明显优先怀疑信号采集问题而不是算法问题。我第一次用 WOA-VMD 是处理某轴承试验台数据连续三天被包络熵带着走换用排列熵后结果才稳定下来。从那以后我给自己立了条规矩任何寻优参数都必须先重构检验、再看频谱图最后才进报告任何新目标函数都要先在旧数据上跑一遍对比再说。这套流程帮我少熬了很多夜希望你也能用得上。本文还有配套的精品资源点击获取
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表