旋转机械振动信号特征提取(Python)

news2024/12/25 9:22:34

前缀 :将一维机械振动信号构造为训练集和测试集(Python)

https://mp.weixin.qq.com/s/DTKjBo6_WAQ7bUPZEdB1TA

import pandas as pd
import numpy as np
import scipy.io as sio
import statistics_hamming
from statistics_hamming import *
signals_train_mat = sio.loadmat('./ProcessedData/signals_train.mat')
signals_train_mat
{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed May  5 09:16:40 2021',
 '__version__': '1.0',
 '__globals__': [],
 'Signal': array([[ 0.00470634,  0.00733712,  0.00963905, ...,  0.00536404,
          0.00470634,  0.00503519],
        [-0.00614561, -0.00581676, -0.00450137, ...,  0.00503519,
          0.00799482,  0.0093102 ],
        [-0.01699756, -0.01436679, -0.01140716, ...,  0.0777104 ,
          0.09053544,  0.08330081],
        ...,
        [-0.00219944, -0.0018706 , -0.00154175, ...,  0.00963905,
          0.0093102 ,  0.00898136],
        [ 0.00503519,  0.00207557,  0.00174672, ..., -0.00022636,
         -0.0012129 , -0.00285714],
        [-0.00252829, -0.00219944, -0.0018706 , ..., -0.01173601,
         -0.00647446,  0.00043133]]),
 'Tipo': array(['Outer', 'Outer', 'Inner', 'Sano ', 'Inner', 'Sano ', 'Outer',
        'Inner', 'Inner', 'Outer', 'Sano ', 'Outer', 'Sano ', 'Inner',
        'Outer', 'Sano ', 'Inner', 'Outer', 'Sano ', 'Outer', 'Inner',
        'Inner', 'Inner', 'Outer', 'Sano ', 'Sano ', 'Sano '], dtype='<U5')}
X_train = signals_train_mat['Signal']
y_train = signals_train_mat['Tipo']
signals_test_mat = sio.loadmat('./ProcessedData/signals_test.mat')
X_test = signals_test_mat['Signal']
y_test = signals_test_mat['Tipo']
signal = X_train[0][0:20000]
signal
array([ 0.00470634,  0.00733712,  0.00963905, ..., -0.01206486,
       -0.01009178, -0.00614561])
kurt_train = []
impulse_factor_train = []
RMS_train = [] 
margin_factor_train = []
skewness_train = []
shape_factor_train = []
peak_to_peak_train = []
crest_factor_train = []


for i in range(len(X_train)):
    for j in range(10):
        signal = X_train[i][200000 * j : 200000 * (j+1)]
        kurt, impulse_factor, RMS, margin_factor, skewness, shape_factor, peak_to_peak, crest_factor = parameters_hamming(signal)
        kurt_train.append(kurt)
        impulse_factor_train.append(impulse_factor)
        RMS_train.append(RMS)
        margin_factor_train.append(margin_factor)
        skewness_train.append(skewness)
        shape_factor_train.append(shape_factor)
        peak_to_peak_train.append(peak_to_peak)
        crest_factor_train.append(crest_factor)
y_train = signals_train_mat['Tipo']
tipo_train = []
for i in range(len(y_train)):
    for j in range(10):
        tipo_train.append(y_train[i])
        
y_train = tipo_train
len(y_train)
270
kurt_test = []
impulse_factor_test = []
RMS_test = [] 
margin_factor_test = []
skewness_test = []
shape_factor_test = []
peak_to_peak_test = []
crest_factor_test = []


for i in range(len(X_test)):
    for j in range(10):
        signal = X_test[i][200000 * j : 200000 * (j+1)]
        kurt, impulse_factor, RMS, margin_factor, skewness, shape_factor, peak_to_peak, crest_factor = parameters_hamming(signal)
        kurt_test.append(kurt)
        impulse_factor_test.append(impulse_factor)
        RMS_test.append(RMS)
        margin_factor_test.append(margin_factor)
        skewness_test.append(skewness)
        shape_factor_test.append(shape_factor)
        peak_to_peak_test.append(peak_to_peak)
        crest_factor_test.append(crest_factor)
y_test = signals_test_mat['Tipo']
tipo_test = []
for i in range(len(y_test)):
    for j in range(10):
        tipo_test.append(y_test[i])
        
y_test = tipo_test
len(y_test)
90
df_train = pd.DataFrame({'Tipo': np.core.defchararray.replace(y_train, ' ', ''), 'Kurtosis': kurt_train,
                                   'Impulse factor': impulse_factor_train, 
                                   'RMS': RMS_train, 'Margin factor': margin_factor_train, 'Skewness': skewness_train,
                                   'Shape factor': shape_factor_train, 'Peak to peak': peak_to_peak_train,
                                   'Crest factor': crest_factor_train})
df_test = pd.DataFrame({'Tipo': np.core.defchararray.replace(y_test, ' ', ''), 'Kurtosis': kurt_test, 
                                   'Impulse factor': impulse_factor_test, 
                                   'RMS': RMS_test, 'Margin factor': margin_factor_test, 'Skewness': skewness_test,
                                   'Shape factor': shape_factor_test, 'Peak to peak': peak_to_peak_test,
                                   'Crest factor': crest_factor_test})
df_test

df_train.to_csv('./ProcessedData/statistics_10_train.csv', index = False, header = True, sep = ',')
df_test.to_csv('./ProcessedData/statistics_10_test.csv', index = False, header = True, sep = ',')

特征提取辅助函数

import scipy.stats 
from scipy.stats import kurtosis, skew
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np


def highlowfilter(k_filter, input_signal):
    '''
    Given a signal, it applies the high pass or low pass band filter to it, depending on the input choice.
    INPUT:
        - k_filter: kind of filter applied: 
            * 'hp' high pass
            * 'low': low pass
        - input_signal: signal to which to apply the filter 
    '''
    b, a = signal.butter(3, 0.05, k_filter) 


    zi = signal.lfilter_zi(b, a)
    z, _ = signal.lfilter(b, a, input_signal, zi = zi * input_signal[0])


    z2, _ = signal.lfilter(b, a, z, zi = zi * z[0])


    y = signal.filtfilt(b, a, input_signal)
    
    return z, z2, y


def parameters_hamming(xsignal):
    '''
    Given the signal 'xsignal', it applies the Hamming window function, a low pass filter, 
    and calculates certain statistics and parameters. 
    '''
    xsignal = xsignal * signal.hamming(len(xsignal))
    _, _, x = highlowfilter('low', xsignal)
    N = len(x)
    n_inf = max(abs(x))
    kurt = kurtosis(x)
    impulse_factor = N * n_inf / sum(abs(x))
    RMS = np.sqrt(sum(x**2))
    margin_factor = n_inf / RMS**2
    skewness = skew(x)
    shape_factor = N * RMS / sum(abs(x))
    peak_to_peak = max(x) - min(x)
    crest_factor = n_inf / RMS
    
    return kurt, impulse_factor, RMS, margin_factor, skewness, shape_factor, peak_to_peak, crest_factor

知乎学术咨询:
https://www.zhihu.com/consult/people/792359672131756032?isMe=1

擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

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

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

相关文章

文华财经幅图指标公式大全源码

文华财经幅图指标公式大全源码下载&#xff1a; DIFF:EMA(CLOSE,55) - EMA(CLOSE,89),NODRAW; DEA: EMA(DIFF,9),NODRAW; MACD:2*(DIFF-DEA),NODRAW; DIFF1: EMA(CLOSE,12) - EMA(CLOSE,26),NODRAW; DEA1: EMA(DIFF1,9),NODRAW; MACD1:2*(DIFF1-DEA1),DOT,COLORYELLOW; DRAW…

Java | Leetcode Java题解之第188题买卖股票的最佳时机IV

题目&#xff1a; 题解&#xff1a; class Solution {public int maxProfit(int k, int[] prices) {if (prices.length 0) {return 0;}int n prices.length;k Math.min(k, n / 2);int[] buy new int[k 1];int[] sell new int[k 1];buy[0] -prices[0];sell[0] 0;for (…

【源码下载】宇宙星空

更多精彩内容尽在数字孪生平台&#xff0c;关注公众号【sky的数孪技术】&#xff0c;技术交流、源码下载请添加VX&#xff1a;digital_twin123 概述 用threejs和gsap实现的宇宙星空效果&#xff0c;访问 http://8.130.10.148:3000/digitaltwin/index.html&#xff0c;公众号后…

mybatis x插件的使用教程(详细)

MyBatisX 的主要功能 代码生成&#xff1a; 自动生成 MyBatis 的 Mapper、XML 配置文件和实体类&#xff0c;大大减少手工编写代码的工作量。 智能代码补全&#xff1a; 提供 SQL 语句和 MyBatis 配置的智能代码补全功能&#xff0c;使开发者能够更快地编写代码。 代码导航&…

怎样激励员工积极应用新版FMEA培训后的知识?

在快节奏的职场环境中&#xff0c;新版FMEA&#xff08;失效模式与影响分析&#xff09;的培训无疑是提升员工技能、优化工作流程的重要一环。然而&#xff0c;如何让员工积极地将所学知识应用于实际工作中&#xff0c;却是一个值得深入探讨的问题。下面&#xff0c;深圳天行健…

数据结构 —— 哈夫曼树

数据结构 —— 哈夫曼树 哈夫曼树定义构造算法特性应用 哈夫曼编码核心概念工作原理特点 我们今天来看哈夫曼树&#xff1a; 哈夫曼树 哈夫曼树&#xff08;Huffman Tree&#xff09;&#xff0c;是一种特殊的二叉树&#xff0c;由D.A. Huffman在1952年提出&#xff0c;主要用…

如何选择适合的接口自动化测试工具!

引言&#xff1a; 在现代软件开发中&#xff0c;接口自动化测试已经成为保证软件质量的重要环节。通过自动化测试工具&#xff0c;可以有效地提高测试效率、减少人力成本&#xff0c;并且能够更好地发现和解决潜在的问题。然而&#xff0c;面对众多的接口自动化测试工具&#…

电子设备抗震等级与电子设备震动实验

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139923445 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

机器学习之支持向量机丨神经网络测试

选择题 SVM中的什么是支持向量&#xff1f; 【 正确答案: D】 A. 数据集中的所有样本 B. 模型参数 C. 模型的预测输出 D. 训练数据中离决策边界最近的样本点 支持向量机(SVM)算法的主要目标是&#xff1a; 【 正确答案: C】 A. 最小化间隔 B. 最小化损失函数 C. 最大化间隔 D.…

Redis-主从复制的准备工作-准备三台redis服务器

文章目录 1、新建三个redis配置文件&#xff0c;用于定义每个服务的专属配置1.1、复制文件redis.conf到redis安装目录下1.2、关闭redis_common.conf中的 aof 功能1.1.1、新建 redis_6379.conf1.1.2、新建 redis_6380.conf1.1.3、新建 redis_6381.conf 2、启动三个服务器2.1、后…

游戏行业新质生产力洞察报告 | 七成游戏企业技术投入显著增加 AI应用率99%

近日&#xff0c;伽马数据发布了《中国游戏产业新质生产力发展报告》。报告围绕中国游戏产业推动“新质生产力”发展的关键路径和重点领域进行深入讨论&#xff0c;并通过对相关数据和典型案例的深入分析&#xff0c;清晰呈现当前中国游戏企业在发展新质生产力过程中的探索与实…

打造智慧矿山:整体架构设计与实践探索

随着信息技术的不断发展&#xff0c;智慧矿山作为矿业领域的创新模式&#xff0c;正日益受到关注。在智慧矿山中&#xff0c;先进的传感器、大数据分析、人工智能等技术被广泛应用&#xff0c;以提高矿山生产效率、降低成本&#xff0c;并确保安全环保。本文将深入探讨智慧矿山…

2.5 MAC扫描器

MAC扫描器是一款专门用来获取网卡物理地址的网络管理软件&#xff0c;相对于Windows系统的getmac命令&#xff0c;MAC扫描器功能更加强大&#xff0c;它不仅可以获取局域网计算机的MAC地址&#xff0c;还可以获取 Internet 中网卡的MAC地址。MAC扫描器通常被用来管理本地网络中…

炸锅!张宇25强化咋样?听说书厚到爆炸?

网上已经炸锅了&#xff01;都说学不完了。 但是&#xff0c;网上的几个主流观点&#xff0c;不完全对。 观点1: 基础30讲没变。强化36讲换汤不换药。 知能行 AI 教练认为&#xff0c;不完全对。基础30讲书没变&#xff0c;但课变了。课时比24多出2倍。 这是因为&#xff0c…

GWB—200JA型引伸计标定器

GWB一200JA型引伸计标定器&#xff0c;是一种纯机械式的高精度位移测微仪器。依据JJG762—2007引伸计检定规程要求&#xff0c;专门用于对各类引伸计的标定&#xff0c;也广泛用于位移传感器的检定及相应百分表、千分表的标定。 l、本仪器由精密微分测头及测量支架组成。该标定…

NAPI篇【1】——如何创建含NAPI的OpenHarmony工程

笔者从事OpenHarmony的北向应用开发&#xff0c;关于NAPI的应用这里做一个笔记总结&#xff0c;包含NAPI的OpenHarmony工程的创建、cpp文件详解、如何编写NAPI函数等&#xff0c;都是基于笔者的开发经验和网上参考资料汇集而成&#xff0c;笔者也处于学习阶段&#xff0c;如有错…

佳裕达物流:披露风险,负债1.26亿,营收下滑,净利润下滑-5925.93%

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 一、佳裕达物流公司介绍 佳裕达物流成立于2009年&#xff0c;总部位于广东省深圳市&#xff0c;是中国领先的端到端供应链解决方案供应商之一。 现已发展成为立足粤港澳大湾区、面向全国、布局全球的大型AAAA级综合服务型…

基于 Native 技术加速 Spark 计算引擎

本文整理自 2024 年 6 月 DataFunSummit 2024 OLAP 架构峰会 Lakehouse 湖仓一体化架构论坛的同名主题分享。 今天分享的主题是基于 Native 技术加速 Spark 计算引擎&#xff0c;大家将会了解到如何基于 ClickHouse 来改造 Spark 引擎&#xff0c;最终获得较为可观的性能提升。…

对于todesk共享剪切板不好用的问题记录

todesk 远程复制粘贴 共享剪切版 1.对于已经开启todesk里面的共享剪切板设置的2. 如果此时仍不能远程复制粘贴&#xff0c;可以考虑查看快捷键映射的问题 1.对于已经开启todesk里面的共享剪切板设置的 2. 如果此时仍不能远程复制粘贴&#xff0c;可以考虑查看快捷键映射的问题 …

计算机网络 —— 网络字节序

网络字节序 1、网络字节序 (Network Byte Order)和本机转换 1、大端、小端字节序 “大端” 和” 小端” 表示多字节值的哪一端存储在该值的起始地址处&#xff1b;小端存储在起始地址处&#xff0c;即是小端字节序&#xff1b;大端存储在起始地址处&#xff0c;即是大端字节…