基于时域特征和频域特征组合的敏感特征集,再利用SVM或KNN传统分类器进行轴承故障诊断(python编程,代码有详细注释)

news2024/12/27 13:14:18

1.文件夹介绍(使用的是CWRU数据集)

0HP-3HP四个文件夹装载不同工况下的内圈故障、外圈故障、滚动体故障和正常轴承数据。

这里以打开0HP文件为例进行展示,creat_data.py是处理原始数据的脚本,负责将原始数据切不重叠割成1024的固定长度的样本,切割完,生成的每类故障下有100个样本,一共400个样本。(样本被保存在data_0HP.npy文件里,对应的标签保存在label.npy文件)

 

code_SVM.py是SVM诊断的脚本,首先利用时域分析和频域分析的方法,获取11种时域特征,12种频域特征


# 计算时域特征
def calculate_time_domain_features(signal):
    features = []
    
    # 均值
    features.append(np.mean(signal))
    
    # 标准差
    features.append(np.std(signal))
    
    # 方根幅值
    features.append(np.sqrt(np.mean(np.square(signal))))
    
    # 均方根值
    features.append(np.sqrt(np.mean(np.square(signal))))
    
    # 峰值
    features.append(np.max(signal))
    
    # 波形指标
    features.append(np.mean(np.abs(signal)) / np.sqrt(np.mean(np.square(signal))))
    
    # 峰值指标
    features.append(np.max(np.abs(signal)) / np.mean(np.abs(signal)))
    
    # 脉冲指标
    features.append(np.max(np.abs(signal)))
    
    # 裕度指标
    features.append(np.max(np.abs(signal)) / np.sqrt(np.mean(np.square(signal))))
    
    # 偏斜度
    features.append(skew(signal))
    
    # 峭度
    features.append(kurtosis(signal))
    
    return features

 12种频域特征



# 计算频域特征
def calculate_frequency_domain_features(signal, sample_rate):
    features = []
    
    # 快速傅里叶变换
    spectrum = fft(signal)
    spectrum = np.abs(spectrum)[:len(spectrum)//2] # 取一半频谱
    
    #频域指标1
    features.append(np.mean(spectrum))
    
    # 频域指标2
    features.append(np.var(spectrum))
    
    # 频域指标3
    features.append(np.sqrt(np.mean(np.square(spectrum))))
    
    # 频域指标4
    features.append(np.max(spectrum) / np.sqrt(np.mean(np.square(spectrum))))
    
    # 频域指标5
    features.append(kurtosis(spectrum))
    
    # 频域指标6
    features.append(skew(spectrum))
    
    # 频域指标7
    features.append(np.max(spectrum))
    
    # 频域指标8
    features.append(np.min(spectrum))
    
    # 频域指标9
    features.append(np.max(spectrum) - np.min(spectrum))
    
    # 频域指标10
    features.append(np.max(np.abs(spectrum)) / np.mean(np.abs(spectrum)))
    
    # 频域指标11
    features.append(np.max(np.abs(spectrum)) / np.sqrt(np.mean(np.square(spectrum))))
    
    # 频域指标12
    peak_index = np.argmax(spectrum)
    peak_frequency = peak_index * sample_rate / len(spectrum)
    features.append(peak_frequency)
    
    return features

 .构建评价指标,从时域和频域一共23个指标中选出对故障特征最敏感的前4个特征,这里用的是方差评价指标,也可以选用其它的评价指标

# 数据
samples = data  # 轴承振动信号样本数据列表
sample_rate = 12000  # 采样率

# 构建特征集
feature_set = build_feature_set(samples, sample_rate)

# 选择前4个敏感特征
import numpy as np
from sklearn.model_selection import train_test_split

# 将特征集转换为NumPy数组
feature_set = np.array(feature_set)

# 计算评价指标(这里以方差为例)
scores = np.var(feature_set, axis=0)

# 选出最敏感的4个特征
selected_indices = np.argsort(scores)[-4:]
selected_features = feature_set[:, selected_indices]

2.分类器

获取前4种敏感特征后,输给SVM或KNN等传统分类器,以看效果

基于时域特征和频域特征组合的敏感特征集,再利用SVM或KNN传统分类器进行轴承故障诊断(python编程,代码有详细注释)_哔哩哔哩_bilibili

测试集准确率:

模型0HP1HP2HP3HP
SVM100%100%96.25%100%
KNN100%100%97.50%100%

 从测试集结果可以看出挑选出来的特征可以很好表征故障。

代码及数据放在压缩包里,解压缩可以直接运行

import numpy as np
from scipy.fft import fft
from scipy.stats import kurtosis, skew
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import MinMaxScaler
# -*- coding: utf-8 -*-

import numpy as np
from scipy.fft import fft
from scipy.stats import kurtosis, skew

import numpy as np
from keras.utils import np_utils
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'  # 设置字体为黑体
import numpy as np
from scipy.fft import fft
from scipy.stats import kurtosis, skew
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
#可以关注:https://mbd.pub/o/bread/ZJuZm5Zr

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/767025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postgresql导入导出数据库的一些问题

新建一个数据库 别忘了添加空间数据的扩展 备份之前的数据库 注意一定要自定义表,去掉 spatial_ref_sys ,要不然需要先drop在创建,可能会报错。 一般不会去导函数,如果有个别自己创建的函数可以手动复制一下,全部导的话…

联合接地的概念和优势——通信设备的“保命秘籍”

夏日炎炎,强对流天气多发,雷电灾害也需要引起关注。雷电是大气中的超长距离放电过程。雷电有着强大的电流、炙热的高温、强烈的电磁辐射以及猛烈的冲击波,这让其能够瞬间变身“无敌破坏王”,造成雷电灾害。如若强大的瞬间过电压冲…

【Python爬虫开发基础⑭】Scrapy架构(组件介绍、架构组成和工作原理)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:python网络爬虫从基础到实战 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: ⭐️前面比较重要的基础内容: 【Python爬…

【C++】开源:跨平台轻量日志库easyloggingpp

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍跨平台轻量日志库easyloggingpp。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&am…

剑指offer16.数值的整数次方

这道题不是easy的难度吗?为什么是 medium,看完题我就想到了用分治法把n除以2,分成两个子问题,然后子问题的解合起来就是这个问题的解,于是立马写了如下代码: class Solution {public double myPow(double …

MySQL(十一):MySQL语法-函数

原始数据 select * from employees where emp_no 10002; select * from salaries where emp_no 10002;--------------------------------------------------------------- | emp_no | birth_date | first_name | last_name | gender | hire_date | -----------------------…

duilib消息产生以及响应机制

1、duilib消息产生处理原理 win32消息产生机制 消息产生。系统将消息排列到其应该排放的线程消息队列中。线程中的消息循环调用GetMessage(or PeekMessage)获取消息。传送消息TranslateMessage and DispatchMessage to 窗口过程(Windows pr…

JavaWeb课程设计项目实战(01)——项目综述

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 项目背景 本项目适合JavaWeb新手作为入门学习的练手案例,主要技术包括: TomcatJSPELJSTLMySQL 该项目是一个学生信息管理系统,主要功能…

300-700题红题第四题和第五题

题目链接:332. 重新安排行程 题目链接:335. 路径交叉 332. 重新安排行程 是写过的详细的在回溯。只能说再写一遍还是磕磕绊绊,但好歹理解的比较快了。 主要就是理解一下回溯的backtrack的输出,不仅仅是可以输出路径的&#xff0…

竹云IDaaS | 全面融合AWS Cognito

AWS Cognito组件用户池User Pool国内暂未上线,身份云IDaaS可完全替代Cognito用户池,借助身份云进行用户身份验证并融合Coginto身份池Identity Pool,实现对AWS资源的无缝安全访问。 企业面临的挑战 AWS Cognito中国站暂未提供用户池User&…

Python_pymysql_与mysql交互

目录 基础功能 简单封装 源码等资料获取方法 基础功能 import pymysql from pymysql.cursors import DictCursor # 导入字典类型的游标对象# 连接数据库 db pymysql.connect(host192.168.3.109, # 数据库IP地址port3306, # 数据库端口号userroot, …

Qchart学习

目录 Qchart简介 QChartView 简介 QAbstractAxis 简介 QAbstractSeries 简介 Qchart Public Types Properties属性 Public Functions QAbstractSeries Public Types Properties Public Functions Signals信号 QAbstractAxis Properties Public Functions 主题设…

全面了解ESP-01SWiFi模块

ESP-01S是一款基于ESP8266芯片的WiFi模块,它提供了低成本、低功耗和高度集成的解决方案,适用于物联网和嵌入式应用。本文将介绍ESP-01S模块的功能和特点,并提供一个简单的WiFi控制示例。 目录 ESP-01S模块管脚功能: ESP-01S特点…

字符串列表分类求平均值

给定一字符串列表数据,按颜色分类计算价格平均值并写入列表。 (本笔记适合对python字符串和列表基本烂熟的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程…

【C++修炼之路】模板初阶

👑作者主页:安 度 因 🏠学习社区:StackFrame 📖专栏链接:C修炼之路 文章目录 一、泛型编程二、函数模板1、概念2、格式3、函数模板实例化① 隐式② 显式 4、特性 五、类模板六、模板使内置类型"升级&q…

无人驾驶中识别颜色并跟踪的优化(加入PID算法控制)

我们了解到无人驾驶是如何去识别颜色的,以及无人车能够跟随颜色目标的演示。回到现实中我们发现,无人车的速度控制是很关键的,这个涉及到安全问题,比如等待红绿灯时,该减速或加速超车等这样很常见的情形,在…

论文笔记--OpenPrompt: An Open-source Framework for Prompt-learning

论文笔记--OpenPrompt: An Open-source Framework for Prompt-learning 1. 文章简介2. 文章概括3 文章重点技术4. 文章亮点5. 原文传送门 1. 文章简介 标题:OpenPrompt: An Open-source Framework for Prompt-learning作者:Ning Ding, Shengding Hu, We…

基于Java+SpringBoot+vue前后端分离在线视频教育平台设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

Leecode316: 去除重复字母

下面这里使用有序map——TreeMap来实现Map接口,但是相对顺序是不能改变的!这样会使得后面的跑到前面去,所以有问题 最简单的思想肯定是暴力思想,就是从前往后寻找,一旦遇到存在的情况就. 重点在于明确两点&#xff1a…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 五)

Styles装饰器:定义组件重用样式 如果每个组件的样式都需要单独设置,在开发过程中会出现大量代码在进行重复样式设置,虽然可以复制粘贴,但为了代码简洁性和后续方便维护,我们推出了可以提炼公共样式进行复用的装饰器St…