
1. 先说结论EMD分解到底在特征提取里扮演什么角色做信号特征提取这几年有一个工具我一直绕不开就是EMD分解。尤其是做机械故障诊断和生理信号分析的时候直接拿原始波形提特征往往效果很差而基于EMD分解的IMF分量优选加多尺度熵特征提取这套组合拳实测下来比很多“端到端”的深度学习方案更稳、更省数据也更容易解释。今天这篇内容就是把这套流程从头到尾拆开讲清楚包括为什么要做IMF分量优选、多尺度熵到底在算什么、以及一份可以直接复现的emd分解实例。无论你是刚接触特征提取方法的新手还是已经在用频谱、小波做分析但觉得不够用的人这篇都值得看完。1.1 传统时频分析卡在了哪里先说一个我自己的体会很多刚入门的朋友一上来就用傅里叶变换提取特征结果发现自己处理的信号根本不是平稳信号频谱图怎么看都不对劲。傅里叶变换把整个时间段的信号变成单一频率分量它假设信号是平稳的但真实的振动信号、脑电信号、心电信号、轴承故障信号几乎全是非平稳、非线性的。频率成分会随时间变化局部冲击会瞬间改变波形特征这些在傅里叶变换里都会被平均掉。短时傅里叶变换STFT解决了一部分时间分辨率问题但窗长一旦固定就没办法同时兼顾时间和频率分辨率。窗短了频率分辨率差窗长了时间定位差。小波分析比STFT灵活能用不同尺度分析不同频率但问题是你得先选一个小波基函数不同基函数对结果影响非常大而且选基这件事本身带有强烈的主观性。信号特征一旦和基函数不匹配分析效果立刻打折扣。这也是EMD分解能站住脚的核心原因它不需要预设任何基函数完全根据信号自身的局部时间尺度特征来自适应地分解。你不需要提前知道信号里有哪些频率成分它自己会通过极值包络的迭代过程把频率成分一层一层剥出来。这种自适应性在处理复杂、不可预知、非常规信号时优势非常明显。1.2 一个直观的EMD分解实例信号是怎么被拆开的我觉得直接看一个简单的例子比背任何定义都管用。假设你采集到一段信号里面同时包含一个50Hz的振荡、一个120Hz的振荡还叠加了随机噪声。用EMD分解之后理想情况下它会把这些成分按频率从高到低拆成若干个IMF分量也就是固有模态函数英文是Intrinsic Mode Function。IMF必须满足两个条件第一在整个数据段内极值点个数和过零点个数之差最多为1第二在任意时刻由局部极大值和局部极小值分别拟合出的上下包络线的均值必须接近0。这两个条件保证了IMF是一个“局部的、窄带的”振荡分量不失真、不漂移。所以可以把EMD理解成一把能以信号自身节奏为刻度的尺子。它不像傅里叶那样用固定的正弦波去“凑”信号而是让信号的局部峰和谷自己形成包络把整体的波动一层层抽离出来。这个过程对用户来说是透明的你不必预设任何参数这是它最大的优点也是后面所有特征提取方法能够稳定工作的前提。1.3 为什么它特别适合非线性非平稳信号非线性、非平稳信号里往往藏着最有价值的信息。比如轴承早期故障的冲击成分它在时域里表现为周期性尖峰在频域里可能被噪声淹没了但在EMD分解后这个冲击成分通常会被单独分离到一个IMF里而且这个IMF在包络谱上会出现非常清晰的故障特征频率。这是傅里叶变换和小波分析很难做到的事。另一个例子是脑电信号。脑电是一种典型的非平稳随机信号不同心理状态下alpha波、beta波、theta波混合在一起EMD分解可以把这些节律分离到不同IMF中再对每个IMF提取多尺度熵特征就能很好地区分不同状态。我见过很多论文用这套流程做睡眠分期、癫痫检测、疲劳驾驶识别效果都比我预期的好。当然EMD不是万能的。它没有严格的数学理论基础分解结果存在一定的经验性而且对噪声敏感可能出现模态混叠、端点效应等问题。这些问题我后面会专门用一节省实操和排查技巧先记住一个结论用EMD做特征提取关键不在分解本身而在分解之后的IMF分量优选和特征提取环节。这两步做不好分解得再漂亮都是白搭。2. IMF分量优选这一步不做好后面全是白算很多人在第一次跑通EMD分解后会拿到一堆IMF分量然后习惯性地把全部IMF都拿去做特征提取。我最初也这么干过后来发现这样做既浪费时间又拖累分类效果。这里面的原因我很想展开讲一讲。2.1 如果把所有IMF都拿去提特征会怎样第一个问题是分量数量不确定。EMD分解是数据驱动的不同样本分解出来的IMF个数往往不同。同样一段轴承振动信号正常运行状态下可能分解出8个IMF故障状态下可能分解出10个IMF。如果每个样本都把全部IMF拿去提取特征特征维度在不同样本之间对不上后续分类器根本没法处理。第二个问题是很多IMF根本就是“垃圾分量”。筛分过程中高频噪声、数值拟合误差、端点效应造成的虚假振荡都会被分解到某些IMF里。这些分量和原始信号的相关性极低几乎不携带任何有用信息。把垃圾分量和有效分量混在一起提特征不仅会稀释有效特征还会引入大量噪声直接拉低分类准确率。第三个问题是计算开销成倍增长。每个IMF都要算多尺度熵的话假如每个IMF计算20个尺度10个IMF就是200维特征而且多尺度熵本身是嵌套循环计算的很慢。实测下来同样一段万点级别的信号只对优选后4个IMF提取特征比全量10个IMF提取特征能快2到3倍分类精度反而更高。2.2 主流优选判据有哪些各自适用什么场景做IMF分量优选方法很多我根据自己的使用经验整理了一个对比表格方便大家快速选型判据核心思路优点缺点我推荐的适用场景相关系数法计算每个IMF与原始信号的Pearson相关系数简单直观计算快对弱故障成分不敏感只能反映线性相关作为第一道粗筛方差贡献率各IMF方差占总体方差的比例能反映能量贡献容易归一化对噪声与有效成分区分度不够选择主能量分量互信息衡量IMF与原始信号的非线性相关性能捕捉非线性耦合关系计算慢需要估计概率密度非线性特征明显的信号包络谱特征频率对IMF做Hilbert包络谱看特征频率是否突出在故障诊断里效果直接需要预先知道特征频率轴承、齿轮故障包裹式选择以分类器精度为目标前向/后向搜索直接对准最终任务计算开销大可能过拟合样本量充足时这里面我使用频率最高的还是相关系数法和方差贡献率法。不是因为它们最厉害而是因为它们便宜、快速、稳健。在特征提取流程的早期用这两个方法先砍掉明显没用的分量再用包络谱或分类验证去精挑是一套性价比极高的组合策略。2.3 我实测下来的组合筛选流程我自己的习惯是分三步走第一步计算每个IMF与原始信号的皮尔逊相关系数把相关系数按从大到小排序。画一条柱状图你会发现通常在某个位置之后相关系数会出现“断崖式下降”那个位置之后的分量基本可以放弃。值得提醒的是相关系数阈值没有一个普适的固定值。信噪比高的时候我习惯取0.5以上信噪比低的时候0.2左右也可能保留。我一般不看绝对阈值而是看排序曲线在哪里出现明显拐点。第二步计算每个IMF的方差贡献率做累计贡献率曲线。一般来说前几个IMF的累计方差贡献率会很快达到85%以上。累计贡献率超过85%到90%之后再加IMF对特征信息的增益非常有限这时候就可以截断了。如果某两个分量相关系数都高但它们的方差贡献率差距很大我倾向于只保留方差贡献率高的那一个因为两者可能承载了大量重复信息。第三步如果做的是轴承或齿轮这类有明确故障特征频率的诊断任务我会再额外对初选出的IMF做Hilbert包络谱分析检查包络谱中是否存在已知的故障特征频率以及该频率处的幅值是否显著。这个验证步骤能非常有效地防止把“看起来相关但实际不含故障信息”的分量留下来。最后也是最容易被忽略的一步用下游分类器对优选结果做验证。我踩过不止一次坑相关系数筛选出来的一组IMF在支持向量机里效果很好但换到随机森林里效果就变差了。这说明分量优选不能只看统计指标最终还得为你的下游任务服务。不过这也引出一个调和思路在特征提取阶段并不需要每个样本都严格选同一个IMF集合但为了保证特征维度统一你应该基于整个训练集统计出一个固定的“优选IMF数量区间”然后让每个样本都截取到同样的分量个数。3. 多尺度熵特征提取为什么是它当IMF分量优选完成后下一步就是特征提取。很多人在这一步会陷入选择困难该用能量特征、频谱特征、还是时域统计特征我的经验是如果你面对的是非线性、非平稳信号而且想刻画信号内部结构的复杂度那么多尺度熵几乎是最合适的选择之一。3.1 熵特征与多尺度的意义先说“熵”这个概念。信息熵、样本熵、近似熵这类指标本质上是在衡量一个时间序列的“不规则程度”或者“复杂度”。信号越随机熵值越高信号越规律熵值越低。对于机械设备来说正常状态下的振动信号相对平稳熵值较低发生故障后信号中会出现大量冲击和调制成分复杂度上升熵值也随之升高。用熵值区分状态比直接看幅值或频率特征更稳健因为对噪声不敏感对不同工况的适应力更强。但单一尺度的熵有个问题它只反映了原始信号在最细时间尺度上的复杂度。真实信号往往在不同时间尺度上表现出不同的复杂度特征。比如脑电信号中alpha节律在几十毫秒尺度上可能很规律但在几百毫秒尺度上可能呈现明显的复杂度变化。单一尺度熵完全看不到这种差异。多尺度熵就是为解决这个问题而生的。它先通过粗粒化操作将原始序列在不同时间尺度上重新构建然后对每个粗粒化序列分别计算样本熵最终得到一条“熵随尺度变化”的曲线。这条曲线包含的信息远比单点熵值丰富它既反映了信号在短时间尺度上的复杂度也反映了长时间尺度上的结构规律性。3.2 多尺度熵的计算流程与参数选择多尺度熵的计算流程我可以简化成三步第一步是粗粒化。对于给定的时间序列尺度因子为τ时把序列按每τ个点一个窗口分成若干段并对每个窗口内的点取平均形成一个新的粗粒化序列。尺度1就是原始序列本身尺度2把相邻两个点的平均值作为新点尺度3把相邻三个点的平均值作为新点以此类推。粗粒化相当于对信号做了一次多分辨率平滑剔除掉那些在较大时间尺度上不重要的细节。第二步是对每个粗粒化序列计算样本熵。样本熵的计算思路是对序列中所有长度为m的模板向量进行比对统计在容差r范围内匹配的向量对数再统计长度为m1时的匹配对数最终用负自然对数求比值。这个值越大说明序列越复杂。参数m一般取2r一般取原始序列标准差的0.1到0.25倍我用得最多的是0.15倍。要注意用原始序列的标准差来设定r而不是每个粗粒化序列自己的标准差否则不同尺度之间的熵值就失去可比性了。第三步是重复以上两步把每个尺度下的样本熵值连起来形成多尺度熵特征向量。最大尺度怎么选我的经验是原始序列长度在1000点以下时最大尺度建议控制在10以内长度在5000点以上时可以尝试最大尺度到20。因为随着尺度增大粗粒化序列的长度会变短样本熵的估计方差会变大算出来的熵值就不稳定了。尺度太大只是自欺欺人。3.3 EMD与多尺度熵结合时的坑把EMD分解得到的IMF拿去做多尺度熵思路是顺的但有几个坑我不得不专门提醒。第一个坑是IMF长度衰减。EMD分解之后残差分量和低频IMF会比原始信号短每个IMF的有效长度并不完全一致。而多尺度熵计算对序列长度非常敏感长度太短会直接导致样本熵估计偏差。所以建议对每个样本先设定统一的长度截取规则比如只保留从原始起点开始的固定点数再进入分解和熵计算流程。第二个坑是噪声主导的第一分量。EMD分解出的第一个IMF往往包含最高频成分如果原始信号噪声大这个分量大概率是噪声主导的计算出来的多尺度熵会非常不稳定。我在做轴承信号时前十次实验里IMF1的多尺度熵曲线都是无规律上下乱跳后来发现就是高频噪声在捣乱。处理方法很简单优选分量时直接把IMF1剔除或者用带通滤波先把明显噪声频带做掉。第三个坑是特征维度过高导致的“维度灾难”。假设你优选了5个IMF每个IMF计算20个尺度合并之后就是100维特征。如果你的样本量只有几十个分类器很容易过拟合。我自己一般会把最大尺度降到10到12或者对多尺度熵曲线做一次统计压缩比如提取曲线的均值、标准差、斜率、最大值等几个统计量而不是直接把所有尺度值都扔给分类器。4. 一套能直接复现的emd分解实例从信号到多尺度熵特征理论说了这么多接下来给一份真正可以跑通的emd分解实例。我以Python为例使用PyEMD库计算EMD分解用numpy手写多尺度熵整个流程包含了数据准备、分解、IMF分量优选、特征提取和特征合并代码可以直接复制到你自己的项目里改改用。4.1 环境准备与数据说明我假设你已经装好了Python环境需要安装以下库pip install numpy scipy matplotlib PyEMD scikit-learn其中PyEMD是核心库它提供了EMD、EEMD、CEEMDAN等多种分解方法。我建议优先使用最新版本因为我早期用旧版本时直接调用EMD()对象会自动弹出一个交互式绘图窗口在服务器上没有图形界面时直接报错升级之后行为才正常。我下面用一段合成信号来演示它会模拟一个含有50Hz正弦成分、120Hz正弦成分、0.5Hz慢变趋势和随机噪声的非平稳信号。虽然合成信号比真实工程信号干净但用来演示整个特征提取流程已经完全够了。真实信号只需要把读取数据的部分替换掉即可。4.2 数据预处理与EMD分解实操数据预处理这一步我强烈建议不要跳过。至少要做两件事去均值消除直流偏置检查是否存在明显异常值如果有用中值滤波或线性插值处理。对EMD来说严重的异常值会被当成真实极值参与包络拟合产生大量虚假IMF非常影响后期优选的准确性。下面是分解与可视化的完整代码import numpy as np import matplotlib.pyplot as plt from PyEMD import EMD # 1. 生成演示信号 fs 1000 t np.arange(0, 1, 1 / fs) sig (0.8 * np.sin(2 * np.pi * 50 * t) 0.4 * np.sin(2 * np.pi * 120 * t) 0.1 * np.sin(2 * np.pi * 0.5 * t) 0.15 * np.random.randn(len(t))) # 2. 预处理 sig sig - np.mean(sig) # 去均值 # 3. EMD分解 emd EMD() imfs emd.emd(sig) # 返回形状为 (n_imfs, n_samples) 的数组 residue emd.residue print(IMF数量:, imfs.shape[0]) print(各IMF的方差贡献:, np.round(np.sum(imfs**2, axis1) / np.sum(imfs**2), 4))这段代码里最重要的一行是emd.emd(sig)它返回的是所有IMF分量组成的二维数组。要注意PyEMD在部分版本里调用返回的IMF顺序是从高频到低频也就是IMF1最“尖锐”越往后频率越低最后一个通常接近缓变趋势也就是残差。我建议每次分解后都画一下时域波形看一眼而不是直接闷头算特征。画图代码很简单用plt.plot(imfs[i])逐行画就行。这一眼能帮你发现两个关键问题分解出来的每个IMF是不是基本围绕零均值上下波动有没有哪几个IMF看起来长得非常像波形几乎重叠如果长得太像大概率发生了模态混叠后面要换EEMD或CEEMDAN再试。4.3 IMF分量优选实操分解完之后进入分量优选。我直接给出相关系数、方差贡献率和累计贡献率一起算的代码# 4. 计算每个IMF与原始信号的相关系数 corrs [] for i in range(imfs.shape[0]): corr np.corrcoef(sig, imfs[i])[0, 1] corrs.append(corr) corrs np.array(corrs) print(相关系数:, np.round(corrs, 4)) # 5. 计算方差贡献率和累计贡献率 energies np.sum(imfs**2, axis1) energy_ratio energies / energies.sum() cum_ratio np.cumsum(energy_ratio) print(方差贡献率:, np.round(energy_ratio, 4)) print(累计贡献率:, np.round(cum_ratio, 4)) # 6. 模拟一个非常简单的筛选规则 # 相关系数 0.35 且 累计贡献率 0.95 之前的IMF都保留 selected [] for i in range(len(corrs)): if corrs[i] 0.35 and cum_ratio[i] 0.95: selected.append(i) else: break print(优选出的IMF序号:, selected)这里的阈值纯粹是演示用的你的数据信噪比不同阈值一定要按实际情况调。我自己的经验是把相关系数从大到小排列后如果从第k个分量开始相关系数掉到前面最大值的1/3以下那么第k个及之后的分量大概率是低贡献分量可以直接排除。这个方法比死记一个阈值更通用。还有一个细节如果你最终要拿去给分类器用请务必对每个样本都采用同样的IMF选择规则保持特征维度一致。不要在测试集上重新“因地制宜”选分量那样会把测试集信息泄漏到训练流程里导致评估结果虚高。4.4 多尺度熵计算与特征向量合并多尺度熵我直接给出一个手写版本虽然写得比较朴素但逻辑清晰适合学习。实际工程中你嫌慢的话可以用Numba加速或者直接把内部循环向量化。def sample_entropy(u, m, r): 计算一维时间序列的样本熵 N len(u) if N m 1: return np.nan B 0.0 A 0.0 for i in range(N - m): for j in range(i 1, N - m): # 长度为m的模板匹配 if np.max(np.abs(u[i:im] - u[j:jm])) r: B 1 # 长度为m1的模板匹配 if np.max(np.abs(u[i:im1] - u[j:jm1])) r: A 1 if B 0 or A 0: return np.nan return -np.log(A / B) def multiscale_entropy(x, max_scale10, m2, r_ratio0.15): 多尺度熵r基于原始序列标准差计算 r r_ratio * np.std(x) mse_vals [] for tau in range(1, max_scale 1): n len(x) // tau coarse np.mean(x[: n * tau].reshape(n, tau), axis1) mse_vals.append(sample_entropy(coarse, m, r)) return np.array(mse_vals)然后是特征合并的完整逻辑# 7. 对优选的每个IMF提取多尺度熵特征再拼接成特征向量 max_scale 10 feature_parts [] for idx in selected: mse multiscale_entropy(imfs[idx], max_scalemax_scale) feature_parts.append(mse) feature_vector np.concatenate(feature_parts) if len(feature_parts) 0 else np.array([]) print(特征向量维度:, len(feature_vector))这段代码里我用了np.nan来代表无效样本熵。实际使用时如果某段IMF太短导致样本熵返回nan建议直接将那条样本剔除而不是填0或做插值因为填0会扭曲信号复杂度信息。另外对于训练集所有样本建议把多尺度熵特征做一次标准化再送入分类器。最常见的是Z-score标准化也就是减去均值除以标准差这能避免不同IMF的熵值量纲差异影响分类器。标准化的参数必须在训练集上计算再应用到测试集不要混在一起算。5. 实测中踩过的坑IMF优选和多尺度熵的5个经典问题光看流程跑通还不算完真正的工程难点全在细节里。这节我把这几年在EMD分解、IMF分量优选和多尺度熵特征提取上踩过的典型坑整理出来每一条都是真金白银换来的经验。5.1 端点效应导致IMF边缘失真第一个坑也是EMD最出名的坑端点效应。由于信号两端之外没有数据三次样条在拟合包络时端点处容易发散导致分解出来的IMF在两端出现大幅摆动。这些摆动的幅值甚至比信号本身还大而且在每个IMF里都会出现。如果你直接对这一整段IMF计算多尺度熵边缘失真的部分会严重污染熵值尤其在尺度较小时影响更明显。我的处理办法很朴素分解前先对信号做端点延拓延拓方式一般有镜像延拓、极值延拓、多项式拟合法等。PyEMD里可以通过extrema_detector和spline_kind参数调整但我实测下来最省事的方案是直接把每个IMF两端各砍掉5%到10%的采样点再做后续计算。听起来粗暴但简单有效。如果你对数据长度要求高就用镜像延拓PyEMD也内置了相关选项。5.2 模态混叠同一个IMF里混着多个频率成分模态混叠是指本应分开的多个时间尺度成分被错误地放进了同一个IMF里在时域波形上表现为忽大忽小、频率忽高忽低。出现这种情况通常是因为原始信号里存在间断性事件比如轴承故障时的瞬时冲击。你在故障诊断里会经常遇到这个问题。为了对付模态混叠集合经验模态分解EEMD是常用的升级版它通过在原信号中加入白噪声后反复分解再对结果取平均极大地抑制了模态混叠。在PyEMD里实现EEMD只需要换一行代码from PyEMD import EEMD eemd EEMD() imfs eemd.eemd(sig)EEMD的效果确实比普通EMD稳但计算时间会大幅增加因为要重复分解多次。我的建议是如果原始信号比较干净、没有明显冲击尖峰用普通EMD就够了如果信号里存在脉冲干扰或者你怀疑模态混叠直接上EEMD或CEEMDAN不要浪费时间在普通EMD上反复调参。5.3 多尺度熵计算结果不稳定可复现性差多尺度熵不稳定的原因绝大多数出在序列长度太短或者容差参数选得不合适。如果你发现同一个样本重复计算几次熵值曲线起伏很大先检查两件事第一序列长度是否小于几百个点如果小于500点我建议把最大尺度降到6以下并确认每个粗粒化序列长度至少还有几十个点。第二容差系数是否太小r取0.1倍标准差时样本熵非常敏感r取0.25倍标准差时又太平滑。我的默认值是0.15倍标准差但如果序列很短我会提高到0.2倍标准差。还有一个小细节多尺度熵里的样本熵对嵌入维数m也很敏感m越大需要匹配的模板向量越长要求序列越长。对于短序列我建议m保持为2不要随便增大到3或4否则大量模板匹配不到熵值会出现很多nan或剧烈跳变。5.4 优选结果和最终分类精度对不上这是最让人头疼的问题相关系数、方差贡献率都显示该保留的IMF拿去训练分类器后反而拉低了精度。我遇到过很多次反复对比后总结出一个规律统计指标只反映“分量和原始信号的相似程度”不代表“分量和故障状态的区分程度”。很可能某个IMF和原始信号相关系数很高但它在正常状态和故障状态下几乎没有差异放进去只会增加特征冗余。所以我在优选时会加一道“区分度检查”把训练集中每个样本选出的同一位置IMF分别计算多尺度熵然后看两类样本的熵值分布是否有明显分界。如果两类样本的熵值分布几乎完全重叠说明这个IMF对分类没用果断删掉。这一步虽然朴素但能省掉后面很多弯路。5.5 IMF数量不一致特征维度对不上前面提过不同样本分解出的IMF数量不同这会让特征矩阵很难处理。我用的解决思路是在训练集上把所有样本的IMF数量分布统计出来找到能覆盖绝大多数样本的分量序号范围比如前6个IMF。然后对所有样本统一只取前6个IMF做特征提取。如果某个样本分解出的IMF不足6个说明它本身能量较单一直接用0向量补齐对应特征块也行或者干脆丢弃这个样本看样本量是否充足再定。这个“固定取前k个IMF”的做法虽然粗暴但在工程上非常实用也是很多论文里隐晦提到的操作。为了特征维度统一牺牲一点“自适应”性换取分类流程的稳定这笔买卖非常划算。6. 一点个人体会和后续扩展思路实际操作过一遍之后你会明显感觉到EMD分解和IMF分量优选、多尺度熵特征提取这三件事每一环都有大量可调整的细节整套流程的稳定不在于某一步用了多么高级的算法而在于每一步之间是否匹配。我个人的体会是不要迷信“分解出越多IMF越好”也不要觉得“熵特征越复杂越好”。绝大多数实际项目里几个关键IMF的多尺度熵特征已经足够解决问题。更大的价值往往来自对数据的理解和预处理而不是不断增加特征维度。我以前也试过把IMF能量熵、排列熵、样本熵全部堆进去最后分类精度提升微乎其微反而训练时间翻了两三倍还更容易过拟合。如果你想在这个基础上继续扩展我推荐几个方向。第一个是换用更稳定的分解算法比如CEEMDAN它比EEMD收敛更快完备性也更好。第二个是尝试多变量经验模态分解MEMD遇到多通道同步采集信号时它能把多通道信息联合起来做分解比逐通道单独分解更合理。第三个是在多尺度熵基础上组合其他特征比如每个IMF的瞬时频率均值、包络谱的谱峰位置等形成更丰富的特征向量。第四是如果数据量足够大把它作为深度学习模型的输入特征而不是直接喂原始波形往往会有惊喜。最后分享一个小技巧。如果你每次跑EMD都要花很长时间可以在预处理阶段把采样率降低到有效频带的两到三倍比如轴承故障分析常用几千赫兹采样率但分析频带也就到几千赫兹降到合理范围后分解速度会快很多。做多尺度熵时也一样粗粒化后的序列长度直接决定嵌套循环次数长度减半计算时间大约能减到原来的四分之一左右。这套流程我用在轴承故障诊断、脑电状态分类和结构健康监测上都验证过稳定性和可解释性都让人满意值得你在自己的数据上试一试。