news 2026/5/30 10:22:37

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/5/30 9:34:17

全面讲解如何测试与调试数据库触发器

如何真正掌控数据库触发器:从测试到调试的实战全解在现代系统开发中,有一个“低调却致命”的组件,它不显山露水,却能在关键时刻决定数据是否一致、事务能否提交、甚至整个服务会不会雪崩——那就是数据库触发器。你可能已经用它来…

作者头像 李华
网站建设 2026/5/28 15:29:02

测试反馈驱动的性能调优体系:AI根因分析与性能数字孪生集成

测试反馈驱动的性能调优全景图一、测试反馈的核心价值维度问题定位三角模型性能基线数据:响应时间>2s的接口占比(示例:电商结算页30%超时)资源瓶颈图谱:CPU密集型服务线程池过载(实测80%线程阻塞&#x…

作者头像 李华
网站建设 2026/5/29 21:32:31

Python---pandas

一、Pandas 显示设置 (Option) 这些命令决定了你在屏幕上看到数据的样子,通常放在脚本的最开头。命令解读代码示例显示所有列别让中间的列变成省略号 ...pd.set_option(display.max_columns, None)显示所有行慎用!数据量大时会刷屏pd.set_option(display…

作者头像 李华
网站建设 2026/5/29 0:57:07

【信号处理】HST水平同步压缩变换附Matlab复现含文献

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

作者头像 李华
网站建设 2026/5/28 22:43:10

Python 精确计算:告别浮点数陷阱,decimal 模块实战指南

目录Python 精确计算:告别浮点数陷阱,decimal 模块实战指南第一章:浮点数的“原罪”:为什么你的计算结果总是怪怪的?1.1 罪魁祸首:IEEE 754 标准1.2 什么时候我们需要绝对精确?第二章&#xff1…

作者头像 李华
网站建设 2026/5/28 16:34:55

SMBus状态码说明:入门级错误处理指南

让总线“说话”:SMBus状态码实战解析与嵌入式调试心法你有没有遇到过这样的场景?系统上电后,温度传感器读数始终为0,电池信息无法获取,内存SPD数据抓不到……你以为是软件逻辑出了问题,翻遍代码却找不到bug…

作者头像 李华