ARTICLE DETAIL

资讯详情

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

NGO优化VMD与改进小波阈值的气体泄漏声发射信号去噪方法

NGO优化VMD与改进小波阈值的气体泄漏声发射信号去噪方法 做泄漏检测的朋友应该都有过这种经历现场传感器采回来的信号打开波形一看头都是大的——泵的运转噪声、阀门冲击、电磁干扰全混在里面泄漏特征早就被埋得看不见了。尤其是气体泄漏的声发射信号本质是一个瞬态冲击持续时间短、幅值又不大稍一疏忽就被背景噪声完全吞掉。所以降噪这一步根本不是锦上添花而是决定泄漏能否被准确识别的前提。今天想聊的技术路线核心是三个词NGO、VMD、小波阈值。说白了就是用北方苍鹰优化算法NGO自动整定VMD的分解参数再用改进的小波阈值做二次精去噪最终把气体泄漏信号从强噪声里捞出来。这套组合我在气体泄漏信号上反复验证过比单独用VMD或者传统小波去噪的效果要明显高一个档次。适合正在做声发射泄漏检测、管道安全监测、或者各种非平稳信号去噪方法对比研究的同学参考。1. 为什么是NGO、VMD、改进小波阈值这套组合拳1.1 气体泄漏信号到底难在哪儿气体泄漏检测常用的声发射信号有一个很让人头疼的特点泄漏源本身产生的弹性波是典型的非平稳瞬态信号频带往往很宽而且幅值很低。与此同时工业现场的背景噪声极其复杂既有泵和压缩机带来的周期性机械振动低频、强能量也有电磁干扰和流体湍流产生的高频随机噪声。泄漏信号夹杂在中间就像站在嘈杂集市里听一个低声说悄悄话的人直接听是听不清的。更麻烦的是这种泄漏信号往往没有足够长的平稳段可供分析。工程上通常只能截取一小段数据依靠短时能量、包络形态、频带能量分布来判断有没有泄漏。如果这段数据里的噪声没有处理干净后续不管是提取峰峰值、做包络谱还是输入分类器判断结果都会严重失真。所以我一直觉得泄漏检测算法的第一道坎不是分类器选得有多好而是能不能把去噪这一步做到位。1.2 单靠一种方法为什么不够用最早做这类信号处理很多人会先想到带通滤波把感兴趣频带之外的东西一刀切掉。这种做法对平稳环境里的周期性噪声有效但对非平稳的泄漏冲击是灾难——滤波器会把冲击信号的上升沿磨平幅值也压得厉害泄漏特征不完整了。后来常用的是小波变换去噪。小波方法确实比固定滤波器灵活但它依赖选定的基函数和分解层数信号特性一旦变化参数就得重新调。再后来VMD变分模态分解火起来因为它是自适应地把信号分解成若干个窄带模态不用像经验模态分解那样递归剥离理论框架更干净。但VMD有个绕不过去的坎模态个数K和惩罚因子α得预先设定这两个参数对分解结果影响巨大调不好就过分解或欠分解。所以现实情况是一种方法撑不起完整去噪链路。VMD负责把信号按频带切开但参数需要有人给它定小波阈值可以在模态上做精细处理但传统软硬阈值各有缺陷直接套用会损失信号能量或留下震荡毛刺。把这些角色凑在一起各干各擅长的活才是工程上真正能落地的方案。1.3 三条技术路线如何分工我习惯把这条链路理解成一条“分离、筛选、精修”的流水线。先用VMD把混合信号分解成频率上更单纯的分量然后用相关性、峭度这类指标筛选出含有泄漏冲击的模态最后对含噪模态做改进的小波阈值去噪。NGO不直接参与信号处理它只负责解决一个关键问题——VMD的K和α怎么选把这个最耗人工的参数整定工作自动化。环节承担方法要解决的问题频带分离VMD分解把泄漏冲击与背景噪声在频域上切到不同模态参数寻优NGO算法自动确定VMD的模态数K和惩罚因子α精细去噪改进小波阈值抑制残留在模态里的噪声同时保住泄漏瞬态幅值融合重构筛选与相加剔除纯噪声分量保留有效成分后重建干净信号整条流程走下来就是含噪原始信号 → 预处理 → NGO搜索最优VMD参数 → VMD分解 → 计算各模态相关性和峭度 → 筛选有效模态 → 对高噪模态做改进小波阈值去噪 → 叠加重构 → 包络谱分析或特征提取。这套流程跑稳了后面做泄漏定位、类型识别输入质量就有保障了。2. 核心算法原理先把VMD、NGO、改进阈值函数的底摸透2.1 VMD怎么把一个复杂信号“切”成K个模态VMD全称是Variational Mode Decomposition中文叫变分模态分解由Dragomiretskiy在2014年提出。它的核心思路很直白把原始信号分解成K个有限带宽的模态分量每个模态都围绕一个中心频率分布并且全部模态叠加起来能近似还原原始信号。优化目标是让所有模态的估计带宽之和最小。数学上它构造了一个变分约束问题一边要求模态是带限信号中心频率越集中越好另一边要求所有模态加起来等于原始信号。VMD通过引入二次惩罚项α和拉格朗日乘子来处理这个带约束的优化问题再用交替方向乘子法ADMM迭代更新模态、中心频率和乘子。因为整个过程是频域迭代求解所以VMD分解出的模态通常是窄带、准正交的很适合用来分离泄漏冲击与宽带噪声。在落到代码之前有几个参数必须搞清楚它们是VMD性能的关键参数含义经验取值K模态数量3到10之间一般从4、5起步α惩罚因子权衡信号保真度与带宽常用1000到5000tau噪声容忍度控制更新步长一般设为0DC是否单独保留直流分量设为0即可init中心频率初始化方式设为1均匀分布更稳定tol收敛容限1e-6到1e-7这里K和α尤其要注意。K设大了一个真实频带可能被劈成好几个中心频率靠得很近的虚假模态K设小了不同频带的成分会挤在同一个模态里后面想靠阈值去噪也无从下手。α设太大每个模态带宽被压得极窄泄漏冲击的瞬态细节会被“拧”成纯正弦片段α设太小模态带宽过宽频带相互重叠分离意义就没有了。我试过的最舒服的做法是先固定一个合理范围把K和α交给优化算法去搜而不是手动一个个试。2.2 NGO凭什么能给VMD做参数寻优NGO是Northern Goshawk Optimization的缩写中文名是北方苍鹰优化算法由Dehghani等人在2022年提出灵感来自北方苍鹰捕猎时的两个阶段行为。第一阶段是“识别猎物并发起攻击”苍鹰会在搜索空间里随机选定一个猎物位置然后俯冲过去这个阶段对应算法的全局勘探负责在大范围内探索可能有解的区域。第二阶段是“追击猎物”猎物企图逃跑苍鹰会尾随并反复调整追击方向这个阶段对应局部开发负责在已发现的优质解附近精细搜索。算法流程并不复杂。初始化一群候选解之后每轮迭代先对每个个体随机选一个参考猎物按照第一阶段公式更新位置如果新解的适应度更好就替换然后在第二阶段里以猎物位置为圆心做领域搜索同样只接受更优的位置。两个阶段配合下来既不会过早收敛到局部最优也有足够能力在后期精修最优解。我选择NGO而不是粒子群或者遗传算法主要原因是它在参数很少的前提下勘探和开发的平衡做得比较好。实际对比下来NGO在VMD参数寻优这类中等规模优化问题上收敛速度快、实现代码也不容易出错。优化变量只有两个K和α种群设30个个体、迭代50次左右就能稳定得到一个足够好的参数组合这在现场项目里是可以接受的计算量。要让NGO知道“什么样的VMD参数是好的”必须定义适应度函数。我最常用的指标是包络熵对每个模态先求Hilbert包络再计算包络的熵值。包络熵越大说明包络越混乱里面大概率有很多噪声成分包络熵越小说明包络越稀疏、越有冲击特征。把一次VMD分解出来的所有模态包络熵求和作为当前参数的适应度NGO要做的事情就是找到让这个总熵最小的K和α组合。参数搜出来之后VMD分解出的模态里蕴含的泄漏冲击特征就会更集中后续处理也更好做。整个优化过程的伪代码大致是这样的初始化NGO种群每个个体代表一组 [K, alpha] for t 1 to T: for i 1 to N: 阶段1随机选猎物更新位置若新解更优则接受 阶段2围绕猎物领域搜索更新位置若更优则接受 对种群中每个个体 取该个体的 [K, alpha] 运行VMD 计算所有模态的包络熵之和作为适应度 记录全局最优个体 return 最优 [K, alpha]2.3 改进小波阈值比传统软硬阈值强在哪小波阈值去噪的基本逻辑是把含噪信号变换到小波域在分解层上把绝对值小于阈值的小波系数置零或者收缩再把系数反变换回来。传统做法有硬阈值和软阈值两种但都有明显缺陷。硬阈值函数是“过阈值保留原样不过阈值直接置零”。好处是能保留信号细节和幅值坏处是阈值处不连续重构信号容易产生振荡和毛刺。软阈值函数是“过阈值系数向零收缩一个阈值量”连续性好了但所有保留系数都被系统性削减重构信号的幅值会偏低能量被磨掉。对泄漏检测来说幅值偏低会直接影响后续的泄漏强度判断毛刺太多又会影响时域特征提取。我实际用的改进阈值方案核心是构造一条介于软硬之间的可调阈值函数通过一个参数在软阈值和硬阈值之间连续过渡。当参数接近硬阈值端时幅值保留力度强当参数接近软阈值端时信号平滑度更好。这样可以在保留泄漏冲击幅值和抑制重构毛刺之间找到平衡点。同时阈值本身也应该自适应。传统固定阈值λσ√(2lnN)对每层都用一个尺度效果很粗糙。改进做法是用MAD中值绝对偏差来稳健估计噪声标准差σ避免泄漏冲击本身的极端值把噪声方差估计带偏阈值再随分解层数适当衰减让低层细节保留更多有用成分高层细节更积极地抑制噪声。这样每个尺度上的阈值都有各自的合理值去噪后信号既干净又有物理意义。3. 实操全过程从原始信号到干净泄漏特征3.1 信号准备与基础预处理第一步当然是把数据采回来。气体泄漏声发射信号的频率范围比较宽采样率至少要放到100kHz以上才够看如果是做负压波检测采样率可以低不少但处理思路基本一致。我习惯先采集一段背景噪声作为参考再采集包含泄漏工况的信号段后续评价去噪效果时能多一个对比基准。拿到原始数据之后先做几个基础操作去均值、去趋势、缩放到合适量纲然后做一次带通预滤波把明显超出传感器响应范围的极低频和极高频噪声先削掉。这里要注意预滤波的带宽要留足余量不能正好卡在泄漏可能出现的频带边缘否则会把真正有用的瞬态分量切掉一部分。分段也很关键。小波变换对数据长度有要求最好把数据切成2的幂次长度比如4096点或8192点一段。每一段单独走后面的VMD和阈值去噪流程保证整段信号的统计特性不会因为时间太长而变化。实测信号现场环境不稳定长时间记录里噪声分布可能漂移按段处理比整段一口气处理稳得多。3.2 用NGO给VMD调参的具体做法把预处理后的信号交给NGO-VMD之前先要把算法参数设置好。我这里用一个自己常用的配置作为参考算法/参数设置值说明NGO种群数30中等规模兼顾计算速度和解质量最大迭代次数50通常20到30次已经收敛50次是保险K搜索范围3到10常见泄漏声发射信号不会超过这个范围α搜索范围1000到5000覆盖常用惩罚因子区间适应度函数包络熵之和衡量分解模态的稀疏性在工程代码里我会先封装两个函数一个是单次VMD分解函数输入是信号、K、α、tau等参数输出是各模态时域波形和中心频率另一个是包络熵计算函数对每个模态做Hilbert变换、取包络、归一化后算Shannon熵。这两个函数准备好之后NGO的迭代循环只需要反复调用它们。实际跑的时候有个经验不要一开始就在整段长信号上做NGO优化计算量太大。先截取一小段有代表性的数据比如4000点左右在这一小段上把K和α搜出来确定参数后再用同样的参数对剩余所有数据段做VMD。这个做法能把优化阶段的计算时间压缩到原来的几十分之一而且参数一旦选定整段数据的分解特性基本是稳定的。我踩过的一个坑是直接把群体里的每个候选解都跑完VMD再算适应度结果一次迭代就要拆几十轮分解现场电脑卡得没法用。后来改成先对小段数据快速预估再拉长信号复核计算压力小了很多。3.3 模态筛选留下哪些分量丢掉哪些分量VMD分解完不是所有模态都要保留。有些模态里主要是低频趋势和周期机械噪声有些模态里几乎全是随机噪声如果一股脑全加回来去噪效果等于没有。筛选模态我主要看三个指标。第一个指标是相关系数计算每个模态与原始信号之间的Pearson相关系数。能量大且与原始信号轨迹接近的模态通常是主要成分必须保留相关系数极低的小能量模态大概率是噪声尾部可以丢弃。第二个指标是峭度。峭度对冲击型信号特别敏感泄漏声发射的瞬态冲击会让某个模态的峭度明显高于其他模态所以峭度偏高的模态往往是含泄漏特征的目标模态。第三个指标是能量占比防止只留下高峭度但总能量过小的“细枝末节”。指标关注点筛选倾向相关系数与原始信号的相似程度系数高的保留峭度冲击特征强度峭度明显偏高的重点保留能量占比模态对总信号的贡献占比极低且无冲击特征的丢弃实际判断时我会把各模态的中心频率列一张表结合频谱观察。低频模态如果对应工频和机械振动即便能量高也往往不是泄漏主成分而泄漏冲击常常出现在中高频谱段对应的模态峭度高、包络形态呈衰减振荡。找到这类模态就抓住了去噪的主要目标。3.4 改进小波阈值逐模态去噪筛选出来的模态里有些还混着不少噪声需要进一步净化。这个过程我用改进的小波阈值对每个含噪模态单独处理而不是对原始信号直接做小波去噪。因为模态已经是窄带信号小波分解后的系数分布更规整阈值的作用点更精准。具体参数上我常用sym8或db8小波基分解层数设在4到6层。每层细节系数的噪声标准差用MAD法估计即对细节系数取绝对值再求中位数然后除以0.6745。阈值按下式构造λ_j σ_j·√(2lnN_j)/ln(j1)其中j是分解层序号。这样高层细节的阈值更大低层细节的阈值温和一些防止泄漏冲击的高频边沿被过量压缩。阈值函数用改进的可调形式参数a在0和1之间取值。a越接近0函数越像硬阈值幅值保留最完整但可能留少量毛刺a越接近1函数越接近软阈值平滑效果更好但可能削幅值。我的经验是先取a0.2左右跑一遍看包络谱里泄漏频率峰值是否突出再微调方向。这个环节最忌讳的是对所有模态用同一个阈值参数。低频主模态里如果混有一些机械噪声可以直接用温和阈值稍作平滑高频含噪模态里的纯随机噪声成分多阈值要更积极。不同模态分开处理最后相加起来才不会互相污染。3.5 重构信号与评价指标计算处理完各个模态之后把保留下来的模态去噪后的高噪模态 未强处理的低噪模态直接叠加得到重构的干净信号。到这里去噪的两个环节——VMD频带分离和小波阈值精细去噪——就完成了。评价去噪效果不能只靠肉眼盯着波形说“看起来干净多了”。如果有仿真原始纯净信号或者现场能采集到无泄漏工况的参考信号就可以用信噪比SNR、均方根误差RMSE、重构信号与纯净信号的相关系数三个量化指标来对比。SNR越高、RMSE越低、相关系数越接近1说明去噪方法保留有用信息的能力越强。评价指标计算方式判断标准SNR10lg(Ps/Pn)越大越好但过大可能过度平滑RMSE均方误差开方越小说明与纯净信号越接近相关系数Pearson系数取绝值后越接近1越好包络谱峰值对包络做FFT后看泄漏频率幅值峰值越突出越容易辨识泄漏能量熵对重构信号求熵值越低说明结构越清晰仿真验证时我通常构造一个衰减冲击叠加多频噪声和随机白噪声的复合信号把完整链路跑一遍跟经典的小波软阈值、单独VMD、EMD阈值等方法做横向对比。在我的测试条件下组合方案的SNR提升比单用小波软阈值高出3到5dB重构信号的峭度也更接近纯净泄漏冲击的峭度。现场实测信号没有真值参考时我会靠包络谱的峰值突出程度、时域波形冲击形态和能量熵三个维度综合判断三个指标同时变好才敢说这套参数是有效的。4. 实际工程项目里的坑与排查方法4.1 模态数量不对出现过分解或欠分解NGO虽然能搜出最优K但搜索范围设置不合理时仍然会出问题。过分解的表现是有两个或两个以上模态的中心频率非常接近波形形状也相似说明一个真实分量被劈成了几份。欠分解的表现是某个模态频谱很宽里面明显能看出多个频率成分挤在一起。排查手段很简单把VMD输出的中心频率表打出来看。如果相邻中心频率之差小于频率分辨率的几倍基本可以判断是过分解如果某个模态的频谱铺得很开说明K不够。遇到这种情况先检查K的搜索范围是否覆盖了真实模态数再检查α是不是设得过大或过小。我曾遇到一个案例把α搜到8000分解出来的信号出现纯正弦样式的碎片模态把α限制在5000以内后波形恢复正常。4.2 惩罚因子α带来的模态失真α这个参数很阴险它不像K那样直观。α过大的时候VMD为了保证每个模态带宽足够窄会把瞬态冲击的突变细节抹掉分解结果看起来“过度纯净”但丢失了泄漏特征。α过小的时候模态之间频带重叠噪声和信号容易混在一起。如果优化结果里出现中心频率很接近、波形高度正弦化的情况先怀疑α偏高。我习惯的做法是先用固定的K做一次α扫描把α从1000到5000按500步长扫一遍观察包络熵曲线和模态波形。包络熵曲线通常会先降后升低谷附近就是比较可靠的α区间。这样做虽然多花几分钟但比盲目跑完整优化更省时间。4.3 去噪过头泄漏信号被当成噪声干掉小波阈值去噪最常见的翻车现场是阈值太大或者参数a太偏向软阈值结果重构后的信号变得很光滑包络峰值被压平泄漏冲击几乎消失了。比如现场把阈值倍率设到3倍以上很多真实冲击细节会被一起丢掉。我后来加了一个保护措施在重构之前对比去噪前后峭度的变化。泄漏冲击本身峭度很高如果处理后峭度从20掉到5以内大概率削过头了如果峭度变化不大而噪声功率明显下降说明处理是合理的。另一个辅助检查是看包络峰值的下降幅度一般不应该降到原来的70%以下否则泄漏强度判断会严重失真。4.4 NGO优化结果不稳定NGO本身是随机优化算法每次运行结果会有差异。如果种群太小或迭代次数太少搜出来的参数可能每次都变。解决起来不复杂固定随机种子保证结果可复现种群规模至少30同一组数据跑3到5次取多次结果里出现频率最高的K和α或者取适应度最好的一次。实在不行就把NGO搜索范围缩小比如K在[4,8]之间α在[1500,3500]之间搜索空间小了稳定性自然上来。4.5 现场实测信号没有真值参考怎么评估实测信号永远比仿真脏得多而且没有所谓的纯净信号做对照。这时候再纠结SNR没有意义我把评估重心放在三个“能看懂”的指标上一是包络谱在泄漏特征频率处是否出现明显谱峰二是时域包络的冲击衰减形态是否清晰可辨三是背景噪声段在去噪前后的能量是否显著下降。三个条件同时满足就说明去噪流程在真实场景里是有效的。另外可以在现场人为制造一个已知的小泄漏工况用这套流程处理后看能不能稳定识别出泄漏特征。能识别出来说明系统的实际灵敏度没问题识别不出来就要回头检查传感器频响、采样率、模态筛选范围这些前端环节。5. 一点个人体会与扩展示路这套方法在我自己项目里最大的价值不是把某个去噪指标刷到多高而是把耗人耗时的调参环节省下来了。老实说VMD分解效果好不好八成取决于K和α剩下两成才是阈值函数怎么改。NGO把最头疼的“猜参数”环节自动化之后整条链路才真正具备从仿真走向实机的可能。我自己实际操作的体会是不要一上来就在现场数据上跑完整优化。先在仿真信号上把流程跑稳定、把参数范围标定好再迁移到实测信号微调这是最稳妥的顺序。如果后续想把这套方法扩展可以把包络熵适应度改成综合指标或者把筛选出的模态特征直接接进分类器做泄漏类型识别效果还能进一步放大。
返回列表