【代码bug消除】PHM 2012轴承数据读取和XJTU-SY轴承数据读取(二)

PHM 2012轴承数据读取和XJTU-SY轴承数据读取

有小伙伴反映PHM 2012的轴承数据读取代码不会从XJTU的数据读取中修改,我当时没仔细看,直接修改了列的选择,没有修改csv文件命名格式,现在代码已经修改过来,自己过来看看吧

XJTU的代码截选line12-13行

column_names = ['horAcc', 'vertAcc']
    fileformat ='.csv'
    nrFiles = len(glob(bearing_folder + '*csv'))

PHM 2012的代码截选line12-13行

column_names = ["t0","t1","t2","t3",'horAcc', 'vertAcc']
    fileformat ='.csv'
    nrFiles = len(glob(bearing_folder + '*csv'))

PHM 2012的代码截选line12-13行修改后

column_names = ["t0","t1","t2","t3",'horAcc', 'vertAcc']
#核心函数:拼接文件
    fileformat = 'acc_{:05d}.csv'
    nrFiles = len(glob(bearing_folder + 'acc*csv'))
<think>好的,我现在需要帮助用户解决关于使用Python处理或分析PHM2012轴承数据的问题。首先,用户提到了之前的引用内容,其中涉及数据读取代码修改FFT处理,所以应该参考这些内容来构建回答。 用户的需求是获取处理或分析PHM2012数据Python代码方法。我需要分步骤说明,包括数据读取、预处理、分析可视化。首先,数据读取部分,根据引用[1],用户之前遇到的问题是关于CSV文件命名列名选择,所以需要确保代码中的文件格式列名正确。例如,PHM2012数据文件命名是'acc_00001.csv'这样的格式,列名包括t0到t3以及horAccvertAcc。 接下来是数据预处理部分,可能需要处理缺失值、标准化,或者应用FFT。引用[2]提到使用numpy的fft.fft函数进行傅里叶变换,所以应该包含这部分代码示例,并注意替换旧的np.fft为np.fft.fft。 然后是数据分析可视化的步骤,比如时域分析频域分析。需要展示如何绘制振动信号的时间序列图频谱图,并解释这些图的意义。此外,特征提取部分可以包括时域统计特征频域特征,如RMS、峰峰值、频谱峰值等,这些都是轴承健康监测中常用的指标。 最后,用户可能需要知道如何评估模型或进行趋势分析,比如计算趋势指标如均方根的变化,或者使用机器学习模型进行分类或预测。不过用户的问题主要是处理分析,所以重点放在数据处理可视化上。 需要确保回答的结构清晰,分步骤说明,每个部分都有代码示例,并引用相关的引用内容。同时,生成相关问题,帮助用户进一步探索,比如优化数据读取效率或特征工程方法。还要检查LaTeX格式是否正确,行内公式用$...$,独立公式用$$...$$,但根据用户提供的示例,似乎问题中不需要数学公式,但回答中可能需要,比如FFT的公式,所以要注意格式正确。 另外,确保使用中文回答,引用标识放在引用内容的末尾,如[^1]。最后,生成的相关问题要围绕PHM2012数据处理,可能的疑问点展开,比如数据预处理方法、特征工程、与其他数据集对比等。</think>以下为使用Python处理PHM2012轴承数据的完整实现方法,包含数据读取、预处理、分析三个核心环节: ### 一、PHM2012数据读取 ```python import pandas as pd from glob import glob def read_phm2012(bearing_folder): # 按规范设置列名文件格式 column_names = ["t0","t1","t2","t3",'horAcc', 'vertAcc'] file_format = 'acc_{:05d}.csv' # 匹配原始文件名格式 # 获取文件列表 all_files = sorted(glob(bearing_folder + 'acc*csv')) # 数据合并 df_list = [] for file in all_files: df = pd.read_csv(file, names=column_names) df_list.append(df) return pd.concat(df_list, axis=0).reset_index(drop=True)[^1] # 使用示例 bearing_data = read_phm2012("./phm2012/bearing1/") ``` ### 数据预处理 ```python import numpy as np def preprocess(data): # 选择水平振动信号 signal = data['horAcc'].values # 标准化处理 normalized = (signal - np.mean(signal)) / np.std(signal) # 时域降采样(从2560Hz降到512Hz) downsampled = normalized[::5] # 频域分析(FFT) N = len(downsampled) yf = 2.0/N * np.abs(np.fft.fft(downsampled)[0:N//2])[^2] return downsampled, yf ``` ### 三、数据分析与可视化 ```python import matplotlib.pyplot as plt def analyze(signal, fft_result): # 时域分析 plt.figure(figsize=(12,6)) plt.subplot(2,1,1) plt.plot(signal[:1000]) plt.title('时域振动信号') # 频域分析 plt.subplot(2,1,2) freq = np.linspace(0, 512/2, len(fft_result)) plt.plot(freq, fft_result) plt.title('频域分析') plt.tight_layout() plt.show() # 执行分析 processed_signal, fft = preprocess(bearing_data) analyze(processed_signal, fft) ``` ### 四、特征提取 ```python def extract_features(signal, fft): # 时域特征 features = { 'RMS': np.sqrt(np.mean(signal**2)), '峰峰值': np.ptp(signal), '峭度': np.mean((signal - np.mean(signal))**4) / (np.std(signal)**4) } # 频域特征 features.update({ '主频幅值': np.max(fft), '主频位置': np.argmax(fft), '频谱熵': -np.sum(fft * np.log(fft + 1e-12)) }) return features ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风筝不是风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值