学习小波阈值去噪(一维数据)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

原理可参考:https://wenku.baidu.com/view/73439a6d5901020207409cd5.html



一、小波阈值

用例子介绍小波阈值去噪

参数说明
选取阈值的方法:直接影响去噪效果的一个重要因素就是阈值的选择,不同阈值选取将有不同的去噪效果。目前主要包括通用阈值(VisuShrink)、SureShrink阈值、 启发式阈值(HeurSure)、MinMax阈值。

阈值函数:阈值函数是修正小波系数的规则,不同的阈值函数体现了不同的处理小波系数的策略。常用的阈值函数有硬阈值函数(hard)、软阈值函数(soft)、介于软、硬阈值函数之间的Garrote函数。

小波函数:常用于小波分解去噪的小波函数包括db4、sym8 等。

分解层数:对于小波分解的层数一般依据经验得到,通常采用的层数为 5-8 层,分解的层数越多,得到的细节分量的频率越高。因时序信号通常有特定的采样频率 ,故分解层数不宜过高。

二、结合代码

1.分解

代码如下(示例):

	path = 'D:/BaiduNetdiskDownload/打包/打包/12K轴承数据集/12k/g/fj/00.txt'
	rd = np.loadtxt(path)#读取数据
	
    methods_dict = {'visushrink': visu_shrink, 'sureshrink': sure_shrink, 'heursure': heur_sure, 'minmax': mini_max}
    # 创建小波对象
    wave = pywt.Wavelet('sym8')

    # 分解 阈值处理
    data_ = data[:]

    (cA, cD) = pywt.dwt(data=rd, wavelet=wave)
    var = get_var(cD) # 获取噪声方差

2.阈值去噪

代码如下(示例):

#定义sure_shrink阈值函数
	def sure_shrink(var, coeffs):
	    N = len(coeffs)
	    sqr_coeffs = []
	    for coeff in coeffs:
	        sqr_coeffs.append(math.pow(coeff, 2))
	    sqr_coeffs.sort()
	    pos = 0
	    r = 0
	    for idx, sqr_coeff in enumerate(sqr_coeffs):
	        new_r = (N - 2 * (idx + 1) + (N - (idx + 1))*sqr_coeff + sum(sqr_coeffs[0:idx+1])) / N
	        if r == 0 or r > new_r:
	            r = new_r
	            pos = idx
	    thre = math.sqrt(var) * math.sqrt(sqr_coeffs[pos])
	    return thre
	
	w = pywt.Wavelet('db8')
	(cA, cD) = pywt.dwt(rd, w)
	 var = get_var(cD)
	 a = pywt.wavedec(rd, w, level=5) # 分解波
	 usecoeffs = []
	 usecoeffs.append(a[0]) # 向列表末尾添加对象
	 for k in a[1:]:
	     thre = sure_shrink(var, k)
	     k = pywt.threshold(k, thre, mode='soft')
	     usecoeffs.append(k)  # 向列表末尾添加对象
	 recoeffs = pywt.waverec(usecoeffs, w)

3.重构

	recoeffs = pywt.waverec(usecoeffs, w)

总结

cA, cD = pywt.dwt(signal, ‘wavelet’)
approximation coefficients = cA = 近似系数
detail coefficient = cD = 细节系数
一般近似系数代表信号中的低频信息,细节系数代表信号中的高频信息,低频信息则代表整段信号的整体特征,高频信息则代表信号中的细节特征

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值