内容简介:由于生产环境中各类因素的影响,使得监控数据特别是时间序列数据里存在许多噪声。这些噪声严重影响了进一步的定量分析和数据挖掘,有必要预先去噪。但是时间序列本身具有非线性和信噪比高的特点,采用传统的高斯去噪、中值滤波等方法往往存在诸多缺陷。而小波理论是根据时频局部化的要求而发展起来的,具有自适应和数学显微镜性质,特别适合非平稳、非线性信号的处理。关于小波变换数学推导详见
由于生产环境中各类因素的影响,使得监控数据特别是时间序列数据里存在许多噪声。这些噪声严重影响了进一步的定量分析和数据挖掘,有必要预先去噪。
但是时间序列本身具有非线性和信噪比高的特点,采用传统的高斯去噪、中值滤波等方法往往存在诸多缺陷。而小波理论是根据时频局部化的要求而发展起来的,具有自适应和数学显微镜性质,特别适合非平稳、非线性信号的处理。
0x01 小波去噪的基本原理
关于小波变换数学推导详见 Wavelet
小波顾名思义就是一个很小的波,其积分大概为0,小波按照形状种类分为六种。小波分解个人觉得类似于傅里叶变换,就是将已有的波分解为很多个可以小的波形。
时间序列去噪采用的较广泛的方法为非线性阈值处理法,其原理是通过小波变换后有用信号的能量集中于少数小波系数上,而白噪声在小波变换域上仍然分散在大量小波系数之上。因而相对来说,有用信号的小波系数值必然大于那些能量分散且幅值较小的噪声的小波系数值。因此,从频谱的幅度上看,有用信号和噪声可以实现分离。该方法主要步骤为:
- 选择合适的正交小波基和分解层数j,对含噪信号进行小波变换分解到j层;
- 对分解得到的小波系数进行阈值处理,可以使用两种处理方法:硬阈值和软阈值法。
硬阈值法保留较大的小波系数并将较小的小波系数置零;软阈值法将较小的小波系数置零,而对较大的小波系数向零收缩。根据相关推导证明了软阈值法去噪后的估计信号是原始信号的近似最优估计,并且具有更广泛的适用性。
关于分解层数的问题,根据多分辨率分析理论,高层分解的小波系数对应的是低频部分,而低频部分主要由信号构成。因此分解层次越高,去掉的低频成分越多,去噪效果越明显,但失真度也增大。为保守起见,分解层次不宜太高,最大不超过5层。对波动性更强的序列如CPU-time序列,一般不超过4层。根据我这段时间对线上时间序列监控数据的实践来讲,基于db4小波函数分解到3-4层可以取得不错的效果。
0x02 Matlab 实现一维小波降噪
从上图中可以看出,小波降噪的效果还是比较理想的。
Matlab代码
clc; clear; % 获取噪声信号 S=importdata('data_0391'); sig = S(1:1400); % 信号的分解 [c,l]=wavedec(sig,4,'db4'); %提取四层细节分量和近似分量 a1=appcoef(c,l,'db4',1); d1=detcoef(c,l,1); a2=appcoef(c,l,'db4',2); d2=detcoef(c,l,2); a3=appcoef(c,l,'db4',3); d3=detcoef(c,l,3); a4=appcoef(c,l,'db4',4); d4=detcoef(c,l,4); % 重构小波分解向量,其中第一、二层的细节分量被置零 dd1=zeros(size(d1)); dd2=zeros(size(d2)); c1=[a4 d4 d3 dd2 dd1]; aa1=waverec(c1,l,'db4'); % 作图 subplot(211), plot(sig), title('原始噪声信号'); plot(212) plot(aa1,'b') title('1&2层的细节分量置零后的重构信号') ```
0x03 Python 实现一维小波降噪
pyWavelet 的主要特点:
- 类似 Matlab Wavelet Toolbox 的使用;
- 1D, 2D 正反离散小波变换;
- 70 多个内置小波滤波器。
Python 代码
import pywt # 小波滤噪 def wavelet_denoising(data): # 小波函数取db4 db4 = pywt.Wavelet('db4') if type(data) is not types.NoneType: # 分解 coeffs = pywt.wavedec(data, db4) # 高频系数置零 coeffs[len(coeffs)-1] *= 0 coeffs[len(coeffs)-2] *= 0 # 重构 meta = pywt.waverec(coeffs, db4) return meta
参考文献
[1] https://www.wikiwand.com/en/Wavelet [2] https://www.kancloud.cn/digest/imageproebow/122469 [3] https://pywavelets.readthedocs.io/en/latest/ [4] https://github.com/PyWavelets/pywt
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithms in Java
Michael T. Goodrich、Roberto Tamassia / Wiley / 2010-01-26 / USD 177.41
* This newest edition examines fundamental data structures by following a consistent object-oriented framework that builds intuition and analysis skills of data structures and algorithms * Presents ne......一起来看看 《Data Structures and Algorithms in Java》 这本书的介绍吧!
图片转BASE64编码
在线图片转Base64编码工具
HTML 编码/解码
HTML 编码/解码