恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

CEEMDAN结合小波包降噪:非平稳信号处理实战指南

  • 首页
  • 资讯中心
  • /
  • CEEMDAN结合小波包降噪:非平稳信号处理实战指南

相关资讯

冥想五年复盘:如何把冥想变成无需坚持的日课 2026/10/12 16:14:58
两阶段鲁棒优化在微网电源容量配置中的工程实践 2026/10/12 16:14:58
从零实现朴素贝叶斯分类器:高斯与多项式变体源码详解 2026/10/12 16:09:57

最新资讯

基于Triton部署YOLO目标检测:从训练脚本到线上服务
基于U-Net的细胞图像分割源码Demo实战:从训练到预测全流程解析
鸿蒙手机安装hap应用:签名校验与hdc真机部署完整指南
MongoDB查询与聚合:从SQL思维到聚合管道的完整指南
刑事犯罪数据预测实战:特征工程与LightGBM避坑指南
Codex 在 Mac 上运行的从零到一保姆级教程:TaoToken 统一 Key 配置与验证

今日推荐

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析
CAN总线错误处理机制深度解析:从位错误到Bus Off的硬件级调试

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

CEEMDAN结合小波包降噪:非平稳信号处理实战指南

发布时间:2026/10/12 16:14:58
CEEMDAN结合小波包降噪:非平稳信号处理实战指南 简介这份资源面向从事信号处理、振动监测与爆破工程方向的研究者与研究生针对隧道爆破信号中噪声干扰强、传统单一方法去噪效果有限的问题提供了一套基于CEEMDAN与小波包分析相结合的降噪实现方案。资源包共3个文件均为m脚本文件压缩包约9KB分别对应CEEMDAN分解、经验模态分解及小波包阈值降噪等核心环节便于在MATLAB环境中直接运行与二次修改。已有4271人学习下载说明该复现思路在相关领域具有较高的参考价值。读者可据此完整复现论文流程先由CEEMDAN得到多个本征模态分量利用相关系数筛选含噪分量并结合频谱图与方差贡献率进行校核再以小波包阈值降噪处理噪声分量最后将未处理分量与去噪分量重构获得纯净爆破振动信号并通过小波包能量谱验证方法可行性。适合需要快速搭建去噪实验框架、对比不同分解策略或撰写相关论文的研究人员参考使用。1. CEEMDAN 加小波包降噪为什么单用其中一个总差点意思很多做振动信号、声发射或者生理信号的朋友第一次拿到一段噪声很重的采样数据第一反应是直接上小波阈值降噪调半天阈值发现要么削掉了冲击成分要么噪声还挂在那里。换 CEEMDAN 做分解模态混叠是缓解了可 IMF 分量挑到第几层、哪些算噪声哪些算信号又变成新的玄学。CEEMDAN—小波包分析降噪这条路线本质是把两个工具串起来用CEEMDAN 负责把非平稳信号按时间尺度自适应拆开小波包负责对含噪主导的分量做更细的频带切分和阈值收缩最后重构。它解决的是单一方法在低信噪比、强非平稳场景下“分不干净、削不精准”的问题适合手里有实测振动、超声、心电、音频这类一维时序数据、又不想盲调滤波器参数的工程师。下面按我实际落地的顺序把选型理由、参数、代码和翻车点讲清楚。2. CEEMDAN 分解自适应噪声辅助到底比 EMD 强在哪2.1 从 EMD 的模态混叠说起经验模态分解EMD的思路很朴素找出信号所有局部极大值和极小值拟合上下包络减去包络均值反复筛直到满足 IMF 条件。问题在于实测信号里一旦出现间断性冲击或者高频噪声极值点分布会突变同一个 IMF 里混进差异很大的时间尺度这就是模态混叠。EEMD 的做法是加白噪声再做多次平均靠噪声把极值点“铺匀”但加噪次数多、残余噪声大、重构误差不可控。CEEMDANComplete Ensemble EMD with Adaptive Noise在每一阶 IMF 提取时都加入自适应的噪声分量并且把噪声的 EMD 分量也纳入计算使得重构几乎无误差同时需要的集成次数更少。落到工程上就是同样一段 10 秒、采样率 2 kHz 的轴承振动信号EEMD 要跑 100 次集成才勉强稳定CEEMDAN 通常 2050 次就能得到一致的 IMF 分层这对批量处理几百段数据的场景差别很大。2.2 用 Python 跑通 CEEMDAN 的最小代码import numpy as np from PyEMD import CEEMDAN # 假设 signal 是已经读入的一维数组长度 N采样率 fs # 常见做法是先做去均值避免 IMF1 被直流分量污染 signal signal - np.mean(signal) ceemdan CEEMDAN( trials30, # 集成次数工程上 20~50 足够越大越稳但越慢 epsilon0.005, # 噪声标准差相对信号幅值的比例 parallelTrue # 多核并行长信号必开 ) imfs ceemdan(signal) # 返回形状 (n_imfs, N) residue ceemdan.get_imfs_and_residue()[1] print(IMF 层数:, imfs.shape[0])逻辑说明trials控制加噪集成的次数直接决定分解结果的稳定性和耗时epsilon是每阶加入噪声的幅度系数太小起不到铺匀极值点的作用太大则引入额外噪声。parallelTrue在 PyEMD 里走多进程信号超过几万点时不开会明显卡。分解完成后imfs每一行是一个 IMF从高频到低频排列最后加residue才是完整重构。参数上我一般这样定采样率 15 kHz 的振动信号trials取 30epsilon取 0.005如果信号本身信噪比极低噪声幅度接近甚至超过信号epsilon可以提到 0.010.02但集成次数要相应加到 50 以上否则残余噪声会渗进低频 IMF。判断分解是否合理看 IMF1 的频率是不是接近信号最高频成分以及各 IMF 的过零点数是否随阶数单调下降——如果出现反复说明trials不够或者信号里有强间断。2.3 哪些 IMF 该进小波包哪些直接扔分解完不是所有 IMF 都要处理。高频 IMF通常是前 13 层集中了大部分噪声但同时也可能包含冲击特征低频 IMF 基本是趋势项噪声很少。我的做法是算每个 IMF 与原始信号的相关系数再结合其能量占比相关系数低且能量占比小的 IMF 判为纯噪声直接置零相关系数中等、能量占比可观的 IMF 送进小波包做阈值降噪相关系数高、频率低的 IMF 保留原样。这一步没有绝对公式但用相关系数加能量占比双指标比单纯看频率或者凭感觉挑层数靠谱得多。3. 小波包阈值降噪比小波变换多切一刀在哪3.1 小波包为什么适合处理 CEEMDAN 挑出来的分量普通小波变换只对低频部分继续分解高频部分不再细分所以对高频段的分辨率有限。小波包对低频和高频都做递归分解频带划分更均匀。CEEMDAN 挑出来的含噪 IMF 往往噪声和有用成分在频带上挨得很近普通小波阈值一刀切容易误伤小波包能把高频段再切成更细的子带分别设阈值保留有用高频细节的同时压掉噪声。选小波基时振动和冲击类信号常用db4或sym8前者支撑短、计算快后者对称性好、重构失真小。分解层数按采样率和目标频带定采样率 2 kHz、关心 0500 Hz 的话做 45 层分解最底层子带带宽约 3060 Hz足够区分噪声和特征。阈值规则用软阈值比硬阈值平滑虽然会轻微压缩幅值但不会在重构信号里留下硬阈值那种振铃。3.2 小波包降噪的可抄代码import pywt import numpy as np def wp_denoise(imf, waveletdb4, level4, threshold_modesoft): # 小波包分解 wp pywt.WaveletPacket(dataimf, waveletwavelet, modesymmetric, maxlevellevel) nodes [node.path for node in wp.get_level(level, orderfreq)] # 用第一层细节系数的 MAD 估计噪声标准差 sigma np.median(np.abs(imf - np.median(imf))) / 0.6745 # 通用阈值可乘系数微调 thr sigma * np.sqrt(2 * np.log(len(imf))) for path in nodes: node wp[path] coeffs node.data # 软阈值收缩 coeffs pywt.threshold(coeffs, thr, modethreshold_mode) node.data coeffs # 重构 rec wp.reconstruct(updateFalse) return rec[:len(imf)]逻辑说明pywt.WaveletPacket建树后get_level(level, orderfreq)按频率顺序取底层节点保证阈值处理时频带对应关系不乱。噪声标准差用 MAD 估计比直接算标准差抗冲击干扰。阈值thr是通用阈值公式实际用的时候可以乘 0.51.5 的系数系数偏小保留更多细节但噪声残留多偏大则削得狠。软阈值modesoft对幅值有压缩如果后续要做幅值定量分析可以改用modegarrote折中。参数上wavelet选db4起步信号平滑度高的可以试sym8level一般 35层数太多底层子带样本太少阈值估计不稳。modesymmetric是边界延拓方式避免重构时两端出现突变实测信号两端本来就不完整用对称延拓比零填充自然。3.3 重构与验证怎么确认降噪没把信号削坏把所有处理过的 IMF 和保留的 IMF 按行相加再加上 residue得到降噪后的信号。验证不能只看波形好不好看要算两个指标一是降噪前后信噪比变化用一段已知纯净信号加噪做仿真可以量化二是看特征频率处的幅值保持率比如轴承故障特征频率降噪后该频率的包络谱峰值不应下降超过 10%15%。如果峰值掉太多说明阈值偏大或者小波包层数太深把特征当噪声削了。我一般会画降噪前后的包络谱对比肉眼确认特征频率还在再决定是否微调阈值系数。4. 避坑与排查CEEMDAN 加小波包最容易翻车的五个地方4.1 现象分解出来的 IMF 层数每次都不一样原因CEEMDAN 内部有随机加噪trials不够时每次运行结果有差异导致后续挑 IMF 的逻辑不稳定。解决固定随机种子PyEMD 支持传入seed并把trials提到 30 以上如果还飘检查信号长度是不是太短短信号极值点少分解本身就不稳建议先做分段或补零到至少 1024 点。4.2 现象降噪后信号整体幅值明显变小原因软阈值对所有小波包系数做收缩有用成分的低幅值细节也被压了。解决把阈值系数从 1.0 降到 0.50.7或者只对高频子带做阈值低频子带保留原系数也可以改用garrote阈值它对大幅值系数几乎不压缩。4.3 现象重构信号两端出现明显畸变原因小波包分解时的边界延拓方式和小波基支撑长度不匹配信号两端缺乏足够样本。解决把mode从zero改成symmetric或periodization如果信号本身很短先做端点延拓再分解重构后截掉延拓部分。4.4 现象处理一段 10 万点信号跑了十几分钟原因CEEMDAN 的trials大且没开并行小波包又对每个 IMF 单独建树。解决CEEMDAN 开parallelTrue小波包处理前把纯噪声 IMF 直接置零跳过只对 23 个含噪 IMF 做小波包信号太长时先分帧每帧独立处理再拼接注意帧间重叠 10%20% 避免拼接处突变。4.5 现象仿真数据效果很好实测数据一塌糊涂原因仿真噪声通常是高斯白噪声实测噪声有色、有冲击、非平稳CEEMDAN 的噪声假设不成立。解决分解前先做一次简单的预滤波比如去掉工频干扰或者把epsilon调大让 CEEMDAN 对非高斯噪声更鲁棒小波包阈值改用基于子带噪声估计的自适应阈值而不是全局通用阈值。5. 进阶技巧用子带信噪比自适应选阈值少调一半参数前面用的通用阈值sigma * sqrt(2 * ln(N))是全局的对所有子带一视同仁。实际信号里各子带噪声水平不一样全局阈值要么在高噪子带留噪声要么在低噪子带削信号。我后来改成按子带估计噪声对每个小波包底层节点用该节点系数的 MAD 算局部sigma再算局部阈值。这样高频高噪子带阈值自动变大低频低噪子带阈值自动变小省掉了手动调阈值系数的反复试错。def wp_denoise_adaptive(imf, waveletdb4, level4): wp pywt.WaveletPacket(dataimf, waveletwavelet, modesymmetric, maxlevellevel) nodes [node.path for node in wp.get_level(level, orderfreq)] for path in nodes: node wp[path] coeffs node.data # 子带局部噪声估计 local_sigma np.median(np.abs(coeffs - np.median(coeffs))) / 0.6745 local_thr local_sigma * np.sqrt(2 * np.log(len(coeffs))) node.data pywt.threshold(coeffs, local_thr, modesoft) rec wp.reconstruct(updateFalse) return rec[:len(imf)]这段和 3.2 的区别就在local_sigma是按节点算的不是全局一个值。代价是每个子带都要算一次中位数计算量略增但省掉了调阈值系数的时间。实测在轴承振动数据上自适应阈值比全局阈值在特征频率幅值保持率上高 8%12%噪声残余反而更少。还有一个验证习惯每次改完参数不要只看一段数据的结果至少拿 510 段不同工况的数据跑一遍看降噪后特征频率幅值的均值和方差。如果某段数据结果突然变差大概率是那段信号本身有异常传感器松动、削顶、丢包不是算法问题。这个习惯帮我省了很多次“改算法改到怀疑人生”的时间。CEEMDAN 加小波包这条路线参数不算少但把分解稳定性、IMF 挑选逻辑、子带自适应阈值这三件事做扎实剩下的就是工程耐心。希望帮到你。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号