小波分析是近30年来发展起来的数学分支,是Fourier分析划时代发展的结果,由法国工程师Morlet首先提出,后广泛应用于信号处理、图像处理与分析、地震勘探、故障诊断、自动控制等领域,小波就是小的波形,所谓“小”是指它具有衰减性,“波”则是指它的波动性,其振幅为正负相间的振荡形式。小波分析的基本思想依然沿承了Fourier变换,就是将信号在一系列基函数张成的空间上进行投影。
Fourier变换选择无限长的三角函数作为基函数,这个三角函数会伸缩、平移:当基函数收缩时对应信号的高频部分,伸张时对应信号的低频部分。某些尺度下,基函数会与信号相乘得到一个很大的值,表示二者有高度的相关性,这一相关性就体现了信号包含该频率的成分的多少。但是,对于非平稳过程,Fourier变换有局限性。它只能获取一段信号总体上包含哪些频率的成分,但无法确定各成分出现的时刻,即Fourier变换在时域上无任何分辨能力。而平稳信号大多是人为制造出来的,自然界中的大量信号基本都是非平稳的,因此,小波变换应运而生。
小波变换将无限长的三角函数换成了有限长的、具有衰减性的小波基函数,这样既能够获取频域信息,也可以获取时域信息。优于Fourier分析的是,它在时域和频域同时具有良好的局部化性质。小波分析是一个时间和频率的局域变换,因而能有效地从信号中提取信息,通过伸缩和平移等运算功能对信号进行多尺度细化分析。工程设备或结构运行中难免会发生损伤,当损伤发生时将导致结构响应表现出非平稳和非线性的特征,而这些特征又与结构损伤状态密切相关。小波分析在结构损伤识别中的应用比较常见的有:(1)基于小波系数的损伤识别;(2)基于小波频带能量的损伤识别;(3)小波方法与其他方法联合应用。
在一个机械系统中,利用频率成分复杂的信号作为激励信号作用于机械系统时,这些复杂的频率成分的输出表现,会因为机械系统的损伤而发生变 化。一般情况下,机械损伤部分会对某些频率产生抑制作用,同样会对某些频率发挥增强作用。所以, 激励信号作用于有损伤机械系统的输出与作用于正常机械系统的输出相比,其相同频带内含有的能量是有区别的,这种区别表现为它会使一些频带内的信号能量或减少或增强,因此,可以通过分析信号的能量变化而判断机械系统损伤情况,其他的系统都与此类似。
首先导入相关模块(需要提前安装pywt模块,pip install pywt)
import scipy.io as scio #导入scio包
import numpy as np
import matplotlib.pyplot as plt
import os
from sklearn import preprocessing
import pywt
import pywt.data
import pandas as pd
读取数据函数
def DataAcquision(file_Path):
data = scio.loadmat(file_path)
data_key_list = list(data.keys())
accl_key = data_key_list[3]
accl_data = data[accl_key].flatten()
return accl_data
file_path = '1730_12k_0.007-InnerRace.mat' #文件夹路径
data_arr = DataAcquision(file_path) # 加载数据
#选取db1小波,扩展模式选择symmetric,最大分解层数为3
wp = pywt.WaveletPacket(data=data_arr, wavelet='db1',mode='symmetric',maxlevel=3)
绘制轴承内圈故障时域波形
plt.figure(figsize=(12,3))
plt.plot(data_arr)
绘制轴承内圈故障振动信号每一层小波分解时域图
绘制轴承正常工况振动信号每一层小波分解时域图
绘制轴承内圈故障振动信号小波包分解能量谱
绘制轴承正常工况振动信号小波包分解能量谱
完整代码:信号的小波包能量谱计算(以轴承振动信号为例,Python环境)
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。