IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 机械故障诊断信号的幅域分析 - 幅值概率密度函数 | 基于python的代码实现,在CWRU轴承数据上实战 -> 正文阅读

[Python知识库]机械故障诊断信号的幅域分析 - 幅值概率密度函数 | 基于python的代码实现,在CWRU轴承数据上实战


欢迎关注我的公众号《故障诊断与python学习》

代码位置:https://github.com/HappyBoy-cmd/fault_diagnosis_signal_processing
参考资料:
机械故障诊断及典型案例解析(第2版,时献江)

1、随机信号的幅值概率密度函数介绍

随机信号的幅值概率密度函数表示信号的幅值落在某一个指定区间内的概率
在这里插入图片描述
如上图所示为时域波形及幅值概率密度。

x ( t ) x(t) x(t)值落在 x x x x + Δ x x+\Delta x x+Δx之间的时间为 T x = Δ t 1 + Δ t 2 + Δ t 3 + Δ t 4 T_{x}=\Delta t_{1}+\Delta t_{2}+\Delta t_{3}+\Delta t_{4} Tx?=Δt1?+Δt2?+Δt3?+Δt4?,其总的观测时间为 T T T,则出现的频次可以用 T x / T T_{x} / T Tx?/T

Δ x \Delta x Δx趋于零时,就得到该点的幅值概率密度函数。

  • 典型信号的时域波形和幅值概率密度函数如下图所示,根据随机过程理论,随机信号的幅值概率密度函数符合正态分布规律;

  • 确定性信号如简谐信号的幅值概率密度函数则呈盆形曲线,如图3.2(a)所示;

  • 一般故障信号多是随机信号和简谐信号的混合体,所以当信号幅值概率密度函数的正态分布曲线上端出现盆型漏斗时[图3. 2(b) ] ,往往预示着系统存在故障征兆。

在这里插入图片描述

2、代码实战

2.1导入包

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

config = {
    "font.family": 'serif', # 衬线字体
    "font.size": 10, # 相当于小四大小
    "font.serif": ['SimSun'], # 宋体
    "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大
    'axes.unicode_minus': False # 处理负号,即-号
}
rcParams.update(config)

2.2定义CWRU数据读取函数

在这里插入图片描述

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

文件名解释(以“1730_12k_0.007-InnerRace”为例):

1730:转速,单位rpm

12k:采样频率,Hz

0.007:故障大小,单位inch,1inch=25.4mm

InnerRace:代表为内圈故障

def data_acquision(FilePath):
    """
    fun: 从cwru mat文件读取加速度数据
    param file_path: mat文件绝对路径
    return accl_data: 加速度数据,array类型
    """
    data = scio.loadmat(file_path)  # 加载mat数据
    data_key_list = list(data.keys())  # mat文件为字典类型,获取字典所有的键并转换为list类型
    accl_key = data_key_list[3]  # 获取'X108_DE_time'
    accl_data = data[accl_key].flatten()  # 获取'X108_DE_time'所对应的值,即为振动加速度信号,并将二维数组展成一维数组
    return accl_data

3、内圈故障幅值概率密度函数分析

3.1时域图绘制

file_path = r'E:/研究生/pytorch/CSDN代码/fault_diagnosis_signal_processing/第4篇-包络谱/1730_12k_0.007-InnerRace.mat'
xt = data_acquision(file_path)  #从mat文件获取振动加速度数据
##--------绘制时域图-------##
plt.figure(figsize=(12,3))
plt.plot(xt)
plt.show()
print(xt)

在这里插入图片描述

[ 0.22269856  0.09323776 -0.14651649 ... -0.36125573  0.31138814
  0.17055689]

3.2编程思路分析

  • step1:确定幅值绝对值最大值max_value

  • step2:在幅值区间[-max_value, max_value]内等分划分成n个小区间,区间长度为interval_len

  • step3:在幅值区间[-max_value, max_value]内等分划分成n个小区间,每个区间长度为interval_len

  • step4:在第i个幅值小区间[-max_value+i * interval_len, max_value+(i+1) * interval_len]内,统计落入该区间的幅值个数count_num

  • step5:将n个区间统计的个数count_num形成一个列表count_num_list

  • step6:绘制柱状图,即得到幅值概率密度图

def interval_num_count(data, low, high):
    '''
    fun: 统计一维数据data落入某一个区间[low, high]内的数量
    param low: 区间下限
    param high: 区间上限
    return count_num: 落入某一个区间[low, high]内的数量
    '''
    count_num = 0
    for i in range(len(data)):
        if data[i]>low and data[i]<high:
            count_num += 1
    return count_num
n = 10  # 分段数量
xt = xt - np.mean(xt)                     # 去直流分量(也叫零均值化处理)
max_value = np.abs( xt[np.argmax( np.abs(xt) )] )   # 确定幅值绝对值最大值max_value
count_num_list = [] 
for i in range(n):
    interval_len = max_value*2/n          # 在幅值区间[-max_value, max_value]内等分划分成n个小区间,区间长度为interval_len
    low = -max_value + i*interval_len     # 第i个幅值小区间[-max_value+i * interval_len, max_value+(i+1) * interval_len]的下限
    high = -max_value + (i+1)*interval_len    # 第i个幅值小区间[-max_value+i * interval_len, max_value+(i+1) * interval_len]的上限
    count_num = interval_num_count(data=xt, low=low, high=high)  # 统计落入该区间的幅值个数count_num
    count_num_list.append(count_num)      # 将n个区间统计的个数count_num形成一个列表count_num_list
plt.bar(x=range( len(count_num_list) ), height=count_num_list) # 绘制柱状图,即得到幅值概率密度图

在这里插入图片描述
是不是已成雏形,有正态分布形状了。只是原始区间分成了10份,看不太出来

下面分成100份

n = 100
xt = xt - np.mean(xt)                     # 去直流分量(也叫零均值化处理)
max_value = np.abs( xt[np.argmax( np.abs(xt) )] )   # 确定幅值绝对值最大值max_value
count_num_list = [] 
for i in range(n):
    interval_len = max_value*2/n          # 在幅值区间[-max_value, max_value]内等分划分成n个小区间,区间长度为interval_len
    low = -max_value + i*interval_len     # 第i个幅值小区间[-max_value+i * interval_len, max_value+(i+1) * interval_len]的下限
    high = -max_value + (i+1)*interval_len    # 第i个幅值小区间[-max_value+i * interval_len, max_value+(i+1) * interval_len]的上限
    count_num = interval_num_count(data=xt, low=low, high=high)  # 统计落入该区间的幅值个数count_num
    count_num_list.append(count_num)      # 将n个区间统计的个数count_num形成一个列表count_num_list
plt.bar(x=range( len(count_num_list) ), height=count_num_list) # 绘制柱状图,即得到幅值概率密度图

在这里插入图片描述
这下有正态分布那味了。不得不说这个形状还挺优美的。

4、封装成一个plt_amp_prob_density_fun()函数

def plt_amp_prob_density_fun(data, n):
    '''
    fun: 绘制幅值概率密度函数
    param data: 输入数据,1维array
    param n: 分割成段数的数量
    return: 绘制幅值概率密度函数
    '''
    max_value = np.abs( xt[np.argmax( np.abs(xt) )] ) #
    count_num = []
    for i in range(n):
        interval = max_value*2/n              # 区间长度为interval_len
        low = -max_value + i*interval         # 区间下限
        high = -max_value + (i+1)*interval    # 区间上限
        count = interval_num_count(data=xt, low=low, high=high)  # 统计落入该区间的幅值个数
        count_num.append(count)
    plt.bar(x=range( len(count_num) ), height=count_num)  # 绘制柱状图
    plt.show()

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

在这里插入图片描述
在这里插入图片描述
此时的正态分布形状比较瘦小,峭度K大于3。K值大于3时,说明信号中冲击成分幅值增大。

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

file_path = r'E:/研究生/pytorch/CSDN代码/fault_diagnosis_signal_processing/第4篇-包络谱/1730_12k_0.007-OuterRace3.mat'
xt = data_acquision(file_path)
plt.figure(figsize=(12,3))
plt.plot(xt)
plt.show()
n = 100      # 设定分成份数
plt_amp_prob_density_fun(data=xt, n=n)

在这里插入图片描述
在这里插入图片描述
在顶部出现了第1节介绍时说的盆型漏斗

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

file_path = r'E:/研究生/pytorch/CSDN代码/fault_diagnosis_signal_processing/第4篇-包络谱/1730_48k_Normal.mat'
xt = data_acquision(file_path)
plt.figure(figsize=(12,3))
plt.plot(xt)
plt.show()
n = 100      # 设定分成份数
plt_amp_prob_density_fun(data=xt, n=n)

在这里插入图片描述
在这里插入图片描述
看着与标准正态分布挺像的

5、总结

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

  • 第一种情况:概率密度函数偏瘦小,定量分析及为峭度K大于3
  • 第二种情况:概率密度函数顶部出现盆型漏斗,该现象预示存在故障
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:40:12  更:2022-08-06 10:42:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:41:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码