小波降噪的理念为噪音存在高频成分当中,小波降噪首先对信号进行分解,若信号进行3层分解,则信号将分解为信号的低频成分A3近似小波系数,信号的高频成分D3,D2,D1细节小波系数,由于小波阈值去噪认为噪音存在高频成分当中,所以对细节小波系数进行阈值收缩处理,及绝对值小于阈值的置零,大于阈值的保留或收缩,最终将处理后的各个小波系数进行小波逆变换进行重构,得到去噪后的信号。 # 阈值的计算公式如下,还有其他的阈值计算方法 # thr=round(np.sqrt(2*np.log(N)),4) #阈值获取,方式为sqtwolog固定阈值 # thr = (np.median(np.abs(w[0])) / 0.6745) * (np.sqrt(2 * np.log(len(data)))) # 阈值获取,方式为VisuShrink通用阈值 # thr = ((np.median(np.abs(w[0])) / 0.6745) * (np.sqrt(2 * np.log(len(data)))))/np.log2(j+1),自适应阈值,j为分解层数,即阈值处理的时候每个细节小波系数使用对于的阈值
w = pywt.wavedec(wave_data, 'sym10',level=4) # 小波分解,pywt.wavedec(数据, 小波基,分解尺度),分解得到的w是一个列表,w[0]是最大尺度的近似系数,w[1]是最大尺度的细节系数,w[2]是次大尺度的细节系数,以此类推
thr = (np.median(np.abs(w[0])) / 0.6745) * (np.sqrt(2 * np.log(len(wave_data)))) # 阈值获取,方式为VisuShrink通用阈值
for i in range(1, len(w)):
w[i] = pywt.threshold(w[i], thr, mode='soft') # 阈值处理函数
rec_s = pywt.waverec(w, 'sym10') # 小波重构
结果如下图,去噪后,可清晰的看到周期性冲击信号,冲击信号间隔频率为某风场齿轮箱中间轴齿轮断齿故障信号。