从xjtu到ustc

博主回到校园当回学生,两年未写作,打算到优快云记录新的生活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

又回到校园

当回学生

两年没写过任何东西了

到优快云记录一些新的生活

<think>嗯,用户需要从XJTU-SY数据集中提取特征的Python代码示例。首先,我得回忆一下XJTU-SY数据集的结构和常见特征提取方法。根据引用[3],这个数据集包含三种工况下15个轴承的全寿命振动信号,所以数据可能是时间序列的。 用户提到特征提取,通常包括时域、频域和时频域特征。时域方面,常见的如均值、RMS、峰值等,引用[2]提到时域和频域谱例程,可能用户需要相关的代码。频域可能需要FFT变换,然后计算特征如重心频率、均方频率等。时频域的话,小波变换可能是常用的方法。 接下来要思考如何组织代码。首先需要读取数据,用户提供的引用[1]中有csv_read函数的使用示例,可能数据存储为CSV文件。因此,代码可能需要用pandas或numpy读取CSV。然后,特征提取部分需要分步骤处理每个信号段,计算各个特征。 还要注意引用[2]中提到时间轴和频谱幅值的匹配,所以在进行FFT时需要正确计算频率轴,并确保幅值正确。另外,引用[1]中的绘图代码可能可以作为参考,显示信号和频谱,帮助用户验证数据。 可能的问题是如何处理全寿命周期数据,是否需要滑动窗口分段?用户可能需要将长时间序列分成多个窗口来计算特征。例如,每个窗口1024个点,然后计算特征,形成特征矩阵。 然后,代码示例应包括数据读取、预处理(如去噪)、特征计算函数(时域、频域)、可能的可视化,以及保存特征。同时,需要引用相关的库,如numpy、pandas、scipy和matplotlib。 需要确保代码正确性,比如FFT后取绝对值,计算单边频谱,频率轴的正确生成。时域特征函数需要逐个实现,比如RMS是均方根,峰峰值是最大值减最小值等。 用户可能需要示例代码的结构,所以分步骤写函数比较清晰。此外,考虑用户可能需要扩展其他特征,所以代码结构应模块化,方便添加新特征。 最后,相关问题部分需要考虑用户可能进一步的问题,比如特征选择方法、处理非平稳信号、降维技巧等,这些都可以作为相关问题提出。</think>### 从XJTU-SY数据集提取特征的Python实现方法 #### 1. 数据读取与预处理 根据引用[1]的示例代码,首先需要读取CSV格式的振动信号数据: ```python import pandas as pd import numpy as np from scipy import signal from scipy.fft import fft def load_vibration_data(filepath): """读取CSV文件中的水平/垂直振动信号""" df = pd.read_csv(filepath) return df['Horizontal'].values, df['Vertical'].values # 示例调用 data_h, data_v = load_vibration_data("Bearing1_1.csv") ``` #### 2. 特征提取框架 基于引用[2][3]的时频域分析要求,建议实现以下三类特征: ```python def extract_time_features(signal): """时域特征提取""" features = { 'RMS': np.sqrt(np.mean(signal**2)), # 均方根值 'Peak': np.max(abs(signal)), # 峰值 'Kurtosis': signal.kurtosis(), # 峭度 'CrestFactor': np.max(abs(signal))/np.sqrt(np.mean(signal**2)) } return features def extract_freq_features(signal, fs): """频域特征提取""" n = len(signal) freq = np.fft.rfftfreq(n, d=1/fs) fft_vals = abs(fft(signal)[:len(freq)]) features = { 'CentroidFreq': np.sum(freq * fft_vals) / np.sum(fft_vals), 'RMSFreq': np.sqrt(np.mean(fft_vals**2)), 'DominantFreq': freq[np.argmax(fft_vals)] } return features def extract_wavelet_features(signal): """小波包分解特征""" wp = signal.WaveletPacket(data=signal, wavelet='db4', mode='symmetric') energy = [np.sum(node.data**2) for node in wp.get_level(3, 'natural')] return {'WaveletEnergy': energy} ``` #### 3. 全流程示例 ```python def feature_extraction_pipeline(data, fs=25600): """全流程特征提取""" # 预处理:带通滤波(根据引用[2]的冲击信号特性) b, a = signal.butter(4, [1000, 12000], btype='bandpass', fs=fs) filtered = signal.filtfilt(b, a, data) # 特征融合 time_feat = extract_time_features(filtered) freq_feat = extract_freq_features(filtered, fs) wavelet_feat = extract_wavelet_features(filtered) return {**time_feat, **freq_feat, **wavelet_feat} # 应用示例 features_h = feature_extraction_pipeline(data_h) features_v = feature_extraction_pipeline(data_v) ``` #### 4. 特征可视化 参考引用[1]的绘图方法,可添加频谱验证: ```python import matplotlib.pyplot as plt def plot_spectrum(signal, fs, title): n = len(signal) freq = np.fft.rfftfreq(n, d=1/fs) fft_vals = abs(fft(signal)[:len(freq)]) plt.figure() plt.plot(freq, fft_vals) plt.title(title) plt.xlabel('Frequency (Hz)') plt.ylabel('Amplitude') plot_spectrum(data_h, 25600, "Horizontal Vibration Spectrum") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值