news 2026/3/6 23:00:30

CEEMD降噪 CEEMD降噪程序,程序运行结果包含原信号图,原信号频谱图,分解信号图,分解信...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CEEMD降噪 CEEMD降噪程序,程序运行结果包含原信号图,原信号频谱图,分解信号图,分解信...

CEEMD降噪 CEEMD降噪程序,程序运行结果包含原信号图,原信号频谱图,分解信号图,分解信号频谱图,降噪后信号图,均方根误差,信噪比。

最近在信号处理中遇到了一个头疼的问题——如何从强噪声背景里提取有效信号。试了一圈方法发现CEEMD(互补集合经验模态分解)降噪效果挺有意思,今天带大家用Python撸个完整的降噪流程。

先上效果图镇楼:左边是原始含噪信号,右边是降噪后的信号。肉眼可见毛刺少了一大半,信噪比从15dB提升到22dB,均方根误差降了60%。这可不是美图秀秀的滤镜,是实打实的算法力量。

搞个模拟信号当小白鼠:

import numpy as np import matplotlib.pyplot as plt t = np.linspace(0, 1, 1000) signal = 2 * np.sin(2 * np.pi * 15 * t) + 0.5 * np.cos(2 * np.pi * 40 * t) noise = 0.8 * np.random.randn(len(t)) noisy_signal = signal + noise

这里故意混了高频(40Hz)和低频(15Hz)成分,加上随机噪声模拟真实场景。注意噪声幅度调得比较狠,这样才能看出算法实力。

上硬菜CEEMD分解:

from PyEMD import CEEMD ceemd = CEEMD() imfs = ceemd(noisy_signal)

PyEMD库的CEEMD类真香,三行代码完成分解。imfs变量里存着从高频到低频的各阶本征模态函数(IMF)。别被术语吓到,其实就是把信号像剥洋葱一样一层层拆开。

重点来了——筛选有效分量:

valid_imfs = [] for imf in imfs: corr = np.corrcoef(signal, imf)[0,1] if abs(corr) > 0.1: # 相关系数阈值 valid_imfs.append(imf) denoised = sum(valid_imfs)

这里用了个小技巧:计算每个IMF与原始干净信号的相关系数。实际应用时如果不知道干净信号,可以用能量占比法或者频谱分析代替。保留相关性高的分量,相当于把"不像噪声"的部分留下。

频谱分析才是照妖镜:

def plot_spectrum(y, fs=1000): n = len(y) Y = np.fft.fft(y)[:n//2] freqs = np.fft.fftfreq(n, 1/fs)[:n//2] plt.plot(freqs, np.abs(Y)/n) plt.figure() plot_spectrum(noisy_signal) plot_spectrum(denoised)

对比频谱图一目了然:40Hz附近的噪声尖峰被削平,15Hz的主成分完好无损。这说明算法不是无脑砍高频,而是精准打击异常频率。

最后上硬指标:

def RMSE(clean, denoised): return np.sqrt(np.mean((clean - denoised)**2)) def SNR(clean, noise): return 10*np.log10(np.var(clean)/np.var(noise)) print(f"RMSE: {RMSE(signal, denoised):.4f}") print(f"SNR提升: {SNR(signal, denoised-signal) - SNR(signal, noise):.1f} dB")

这两个指标就像考试的分数,RMSE看误差绝对值,SNR看信号纯净度。注意计算SNR提升时要用降噪前后的噪声分量对比,这样更准确。

踩过的坑提醒:CEEMD对参数敏感,噪声幅度、集成次数这些要反复调试。有个邪门现象——有时候多保留一个IMF反而效果更好,可能是算法把部分有用信息误判成高频了。建议用滑动窗口分段处理,尤其对非平稳信号效果拔群。

完整代码已打包扔GitHub上了,记得换自己的信号做实验。下期可能写写CEEMD和深度学习的组合拳,最近发现用LSTM预测IMF分量挺有意思...

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/3 22:52:11

三轴V90 PN与SMART200玩转指南

西门子smart200和3轴v90 pn网络通讯 西门子smart200和v90 pn通讯控制3轴伺服程序,触摸屏程序,详细注释,控制系统详细说明书,文档详细讲解组态和指令,IO表,电气原理图前两天车间里刚搞完一套三轴伺服控制系…

作者头像 李华
网站建设 2026/2/28 1:45:24

工业控制场景下QSPI协议通信稳定性深度剖析

工业控制场景下QSPI通信稳定性实战解析:从信号完整性到系统鲁棒性你有没有遇到过这样的问题?一台工业HMI设备,在实验室里跑得好好的,一搬到工厂现场就频繁“启动失败”?日志显示QSPI读取超时,Flash无法识别…

作者头像 李华
网站建设 2026/3/1 23:54:00

sbit用于电磁阀开关控制的核心要点说明

用一个位,掌控电磁阀的“开关命脉”:深入解析sbit在8051中的实战精髓在自动化设备车间里,你是否见过这样的场景——一条产线上的气动夹具瞬间动作,液体精准注入容器,阀门无声启闭。这些看似简单的“通断”背后&#xf…

作者头像 李华
网站建设 2026/3/4 2:33:24

电商数据采集 API:驱动选品、定价、运营的数据分析核心引擎

电商 API 接口是选品、定价、运营全链路数字化驱动的核心支撑,能够解决传统电商运营中数据滞后、人工低效、决策盲目的痛点,通过对接多平台官方数据,实现选品精准化、定价动态化、运营自动化,最终达成降本增效、提升竞争力的目标。…

作者头像 李华
网站建设 2026/2/28 15:36:48

OpenAI推出ChatGPT Health医疗问答功能

OpenAI集团今日预览了ChatGPT Health功能,这是一项即将推出的新特性,旨在帮助聊天机器人用户获取医疗信息。ChatGPT Health以ChatGPT界面中的新版块形式出现。据OpenAI介绍,当用户在主聊天框中输入医疗相关问题时,聊天机器人会自动…

作者头像 李华
网站建设 2026/2/25 23:21:20

三维动态避障路径规划:基于融合DWA的部落竞争与成员合作算法(CTCM)求解无人机三维动态避障路径规划研究附MATLAB代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

作者头像 李华