天天看点

Python环境下信号处理的若干例子(第二篇)

基于Python的包络谱信号分析(可用于故障诊断等一维信号处理)

Hilbert变换通常用来得到解析信号,可以用来对窄带信号进行解包络,并求解信号的瞬时频率。对信号进行Hilbert变换时,会使信号产生一个90°的相位移,并与原信号构成一个解析信号,即为包络信号。Hilbert变换的实质上相当于把原信号通过了一个原始信号和一个信号做卷积的滤波器。可以看成是将原始信号通过一个滤波器。

基于Hilbert变换的包络谱分析简单明了,可解释性较强,有数学理论作为保证,在诸如管道泄漏检测、机械故障诊断、舰船噪声分析、结构损伤识别、油中水分含量检测、电池故障分析、辐射源个体识别、负荷状态识别、污染预测等方面有重要应用。鉴于很多不便使用MATLAB,因为这篇使用python环境进行一维信号分析。

首先导入相关模块

import scipy.io as scio
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal, fftpack, stats
           

加载一个轴承内圈故障信号

def data_acquision(FilePath):
    
    data = scio.loadmat(file_path)  # 加载mat数据
    data_key_list = list(data.keys())  # mat文件为字典类型,获取字典所有的键并转换为list类型
    accl_key = data_key_list[3]  
    accl_data = data[accl_key].flatten()  
    return accl_data
           

绘制时域波形

file_path = '1730_12k_0.007-InnerRace.mat'
xt = data_acquision(file_path)
plt.figure(figsize=(12,3))
plt.plot(xt)
print(xt)
           
Python环境下信号处理的若干例子(第二篇)

绘制包络谱

Python环境下信号处理的若干例子(第二篇)

使用包络谱在低频部分观察

Python环境下信号处理的若干例子(第二篇)

下面进行理论故障特征频率与实际故障特征频率的验证

Python环境下信号处理的若干例子(第二篇)

最后看一下轴承外圈故障振动信号的包络谱

Python环境下信号处理的若干例子(第二篇)

基于Python的概率密度函数分析的一维信号异常检测方法

概率密度分析又叫做幅值域分析,主要分析手段是幅值概率密度函数。概率密度函数全面描述了振动的瞬时值,表示了概率相对幅值的变化率,不同的随机信号有不同的概率密度函数图形,可以借此来识别信号的性质,因此在信号异常检测方面得到了广泛应用。

Python环境下信号处理的若干例子(第二篇)
Python环境下信号处理的若干例子(第二篇)

以轴承振动信号异常检测为例进行说明

首先导入相关模块

import scipy.io as scio
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal, fftpack, stats
           

使用CWRU轴承数据进行分析,选取4个mat文件,包括内圈故障、外圈故障、滚动体故障和正常状态,例子如下

1730:转速,单位rpm

12k:采样频率,Hz

0.007:故障大小,单位inch

InnerRace:内圈故障

定义数据获取函数

def data_acquision(FilePath):
    
    data = scio.loadmat(file_path)  # 加载数据
    data_key_list = list(data.keys())  # mat文件为字典类型
    accl_key = data_key_list[3]  
    accl_data = data[accl_key].flatten()  
    return accl_data
           

以内圈故障为例,绘制时域波形

file_path = '1730_12k_0.007-InnerRace.mat'
xt = data_acquision(file_path)  #从mat文件获取振动加速度数据
plt.figure(figsize=(12,3))
plt.plot(xt)
plt.show()
print(xt)
           
Python环境下信号处理的若干例子(第二篇)
Python环境下信号处理的若干例子(第二篇)

滚动体故障轴承幅值概率密度函数分析

Python环境下信号处理的若干例子(第二篇)
Python环境下信号处理的若干例子(第二篇)

外圈故障轴承幅值概率密度函数

Python环境下信号处理的若干例子(第二篇)

正常状态轴承幅值概率密度函数分析

Python环境下信号处理的若干例子(第二篇)

与正常状态轴承的幅值概率密度函数相比,其故障状态有两种情况

第一种情况:概率密度函数偏瘦小,定量分析及为峭度K大于3第二种情况:概率密度函数顶部出现盆型漏斗,该现象预示存在故障

基于Python的小波包能量谱的时间序列异常检测(以轴承故障诊断为例)

在一个机械系统中,利用频率成分复杂的信号作为激励信号作用于机械系统时,这些复杂的频率成分的输出表现,会因为机械系统的损伤而发生变 化。一般情况下,机械损伤部分会对某些频率产生抑制作用,同样会对某些频率发挥增强作用。所以, 激励信号作用于有损伤机械系统的输出与作用于正常机械系统的输出相比,其相同频带内含有的能量是有区别的,这种区别表现为它会使一些频带内的信号能量或减少或增强,因此,可以通过分析信号的能量变化而判断机械系统损伤情况,其他的系统都与此类似。

首先导入相关模块

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环境下信号处理的若干例子(第二篇)

绘制每一层小波分解时域图

Python环境下信号处理的若干例子(第二篇)

绘制小波包分解能量谱

Python环境下信号处理的若干例子(第二篇)

根据上面的步骤,看一下轴承正常状态的时序信号小波包能量谱

Python环境下信号处理的若干例子(第二篇)

轴承正常状态的时序信号小波包能量谱与轴承正常状态的时序信号小波包能量谱截然不同,以此作为判别依据。

其他类别的时间序列异常检测与此大同小异

机械故障诊断大杀器:后向自动微分的盲反卷积算法-基于tensorflow

python环境,需要tensorflow2.1 模块

import time
import tensorflow as tf
import numpy as np
import pylab as pl
import maximization_criteria as MC
           
Python环境下信号处理的若干例子(第二篇)
Python环境下信号处理的若干例子(第二篇)
Python环境下信号处理的若干例子(第二篇)
Python环境下信号处理的若干例子(第二篇)
Python环境下信号处理的若干例子(第二篇)

面包多代码

https://mbd.pub/o/GeBENHAGEN