目录1 双树复小波降噪1.1 双树复小波变换1.2 双树复小波降噪1.3 双树复小波降噪的python实现2 经验小波降噪2.1 经验小波变换2.2 经验小波降噪2.3 经验小波降噪的python实现3 算法测试3.1 测试用例3.2 降噪结果3.3 降噪指标4 参考文献1 双树复小波降噪1.1 双树复小波变换双树复小波变换(Dual-Tree Complex Wavelet Transforms, DT-CWT)由实部树和虚部树的两个并行的实小波变换构成[1]。复小波表示为: 式中,h(t)和g(t)分别表示复小波的实部和虚部,两个函数均为实函数[2]。双树复小波变换包含两个平行的分解树,分别定义为树A和树B,树A给出双树复小波变换的实部,树B给出虚部,变换过程中,对树A和树B分别执行高低通滤波,即可实现双树分解,DT-CWT分解的流程如图1所示。图1 双树复小波变换流程 DT-CWT显著改善了DWT的平移敏感性和方向选择,关于DWT的平移敏感性和方向选择的说明详见文献[3],此处不再进行展开。 对变换中的每一棵树分别使用双正交滤波器(设计成与对应的分析滤波器具有完全重构特性的滤波器)进行反变换,最后对两棵树的输出结果进行平均,可以保证整个系统近似的平移不变性。经过双树复小波变换的实部树和虚部树的联合重构信号可以表示为: 式中, 和 为第j层分解的实部树和虚部树的联合,可分别表示为: 式中, 和 分别表示实数部小波变换的小波系数和尺度系数; 和 分别表示虚数部小波变换的小波系数和尺度系数。于是双树复小波变换分解的小波系数和尺度系数可表示为 可以看出,双树复小波变换的分解和重构实现了实部树和虚部树信息的互补,能够保持信号的完全重构性。1.2 双树复小波降噪双树复小波变换将原始信号分解成小波系数和尺度系数,也称为细节分量和近似分量,其中噪声成分主要集中在细节分量中(高频部分)。与小波降噪相同,随着分解层数的增加,噪声的能量逐渐衰减,双树复小波分解得到的小波系数变小,确定合理的阈值可以对噪声进行剔除。阈值确定方法详见信号处理基础之噪声与降噪(五) | 小波降噪及python代码实现。双树复小波降噪的基本流程如下:(1)信号分解:使用双树复小波变换对信号进行多级分解。DT-CWT 生成两棵树的小波系数,每棵树提供了信号的一半信息,这两棵树合在一起可以提供更完整的频率和方向信息;(2) 阈值处理:对小波系数进行阈值处理以去除噪声。常用的阈值方法包括软阈值和硬阈值处理。软阈值可以更平滑地处理信号,而硬阈值可能会导致信号失真;(3)系数重构:使用处理后的小波系数通过逆双树复小波变换重构信号。1.3 双树复小波降噪的python实现双树复小波降噪的python实现如下:import pywtimport numpy as npimport matplotlib.pyplot as pltdef denoised_with_dtwt(signal, wavelet, mode='soft', level=1): coeffs = pywt.wavedec(signal, wavelet, mode='per') sigma = np.median(np.abs(coeffs[-1])) / 0.6745 threshold = sigma * np.sqrt(2 * np.log(len(signal))) new_coeffs = [pywt.threshold(c, value=threshold, mode=mode) for c in coeffs] new_coeffs[0] = coeffs[0] # 保留近似系数不变 signal_denoised = pywt.waverec(new_coeffs, wavelet, mode='per') return signal_denoised2 经验小波降噪2.1 经验小波变换 经验小波变换(Empirical Wavelet Transform, EWT)是由Gilles提出的一种基于小波框架的自适应自适应小波分析方法,其将小波变换理论与EMD方法相结合,规避了EMD计算量大和模态混叠等缺点[4]。EWT的实质是对信号频谱进行自适应分割,建立合适的小波滤波器组,加小波窗后提取紧支撑傅里叶频谱的调幅-调频成分[5]。 经验小波变换的基本步骤如下: (1)傅里叶频谱的自适应划分:定义[0, ]的傅里叶谱将信号自适应分割成连续N段,每个频段表示为 ,以每个 为中心,定义宽度为 的过渡段,如图2所示[6]。图2 傅里叶轴的分割 (2)各分割区带通滤波器设计:依据Little wood-Paley和Meyer理论,构造经验小波函数 和经验尺度函数 ,构造方法详见文献[4-6]。 (3)细节系数与近似系数确定:定义经验小波变换 ,记经验小波函数 和经验尺度函数 的逆傅里叶变换分别为 和 ,则细节系数可表示为经验小波函数与信号的内积: 近似系数可以表示为经验尺度函数与信号内积: (4)原始信号重构:原始信号可表示为 经验模态可表示为: 2.2 经验小波降噪 在经验小波变换的基础上,结合峭度法和相关系数法等方法(详见信号处理基础之噪声与降噪(三) | EMD降噪与VMD降噪及python代码实现)可对信号中的噪声进行去除,基本步骤如下: (1)通过EWT对信号进行分解,得到若干经验模态函数; (2)计算各经验模态函数的峭度值或相关系数,筛选有用信息; (3)信号重构。2.3 经验小波降噪的python实现 经验小波降噪的python实现如下:import numpy as npimport matplotlib.pyplot as pltimport ewtpydef denoised_with_ewt(signal): ewt, mfb, boundaries = ewtpy.EWT1D(signal) ewt = ewt.T ewt_denoised = [component for component in ewt if np.corrcoef(signal, component)[0, 1] >= 0.4] signal_denoised = np.sum(ewt_denoised, axis=0) return signal_denoised3 算法测试3.1 测试用例注:用例中denoised_evaluate()函数见”信号处理基础之噪声与降噪(二) | 时域降噪方法(平滑降噪、SVD降噪)python代码实现“import matplotlib.pyplot as pltimport matplotlib# 创建一个信号n = 500 # 生成500个点的信号t = np.linspace(0, 30*np.pi, n, endpoint=False)s = np.cos(0.1*np.pi*t) + np.sin(0.3*np.pi*t) + np.cos(0.5*np.pi*t) + np.sin(0.7*np.pi*t) # 原始信号r = 0.5 * np.random.randn(n)y = s + r # 加噪声denoised_signal_dtwt = denoised_with_dtwt(y, 'db4', 'soft', level=8)denoised_signal_ewt = denoised_with_ewt(y)value_dtwt = denoise_evaluate(s, r, denoised_signal_dtwt)value_ewt = denoise_evaluate(s, r, denoised_signal_ewt)print(value_dtwt)print(value_ewt)fig = plt.figure(figsize=(16, 12))plt.subplots_adjust(hspace=0.5)plt.subplots_adjust(left=0.05, right=0.98, top=0.95, bottom=0.05)font = {'family': 'Times New Roman', 'size': 16, 'weight': 'normal',}matplotlib.rc('font', **font)plt.subplot(5, 1, 1)plt.plot(t, s, linewidth=1.5, color='b')plt.title('pure signal', fontname='Times New Roman', fontsize=20)plt.subplot(5, 1, 2)plt.plot(t, y, linewidth=1.5, color='b')plt.title('noised signal', fontname='Times New Roman', fontsize=20)plt.subplot(5, 1, 3)plt.plot(t, denoised_signal_dtwt, linewidth=1.5, color='b')plt.title('DTWT', fontname='Times New Roman', fontsize=20)plt.subplot(5, 1, 4)plt.plot(t, denoised_signal_ewt, linewidth=1.5, color='b')plt.title('EWT', fontname='Times New Roman', fontsize=20)plt.subplot(5, 1, 5)plt.plot(t, y-denoised_signal_ewt, linewidth=1.5, color='b')plt.title('y-EWT', fontname='Times New Roman', fontsize=20)plt.show()3.2 降噪结果降噪结果如图3所示。图3 降噪结果 3.3 降噪指标降噪指标如表1所示。表1 降噪指标4 参考文献[1] 刘嘉辉,秦仙蓉,王玉龙,等. 基于双树复小波变换与样本熵的自适应降噪法[J]. 振动、测试与诊断,2022,42(2):285-291. [2] 刘蕾. 基于双树复小波变换的图像去噪[D]. 北京:北京化工大学,2010. [3] 石宏理,胡波. 双树复小波变换及其应用综述[J]. 信息与电子工程,2007,5(3):229-234. [4] 吕跃刚,何洋洋. EWT和ICA联合降噪在轴承故障诊断中的应用[J]. 振动与冲击,2019,38(16):42-48,70. [5] 骆春林,刘其洪,李伟光. EWT-SSA联合降噪及其在滚刀振动信号分析中的应用[J]. 中国测试,2022,48(8):109-116.[6] 李志农,朱明,褚福磊,等. 基于经验小波变换的机械故障诊断方法研究[J]. 仪器仪表学报,2014(11):2423-2432.来源:故障诊断与python学习