原文:基于小波分析的油田机械传动装置振动信号识别方法,科技资讯,202305,赵磊
摘要:为提高油田机械设备运行的稳定性与高效性,分析传动装置的运行特性该研究设计了一种基于小波分析的油田传动装置振动信号识别方法。应用小波分析方法采集机械传动装置的振动信号,为振动信号的识别提供数据基础。然后对采集到的振动信号进行卷积预处理,根据 Hilbert 变换、小波变换原理,从振动信号的时域特征、频域特征以及时频特征等方面出发,识别传动装置的振动信号。实验结果显示:经过小波分析后的3组振动信号频率均变得更加简洁,保留的关键频率特征为 85.11 Hz,与实际传动频率 85.399 Hz 非常接近,表明该文方法通过将复杂的信号简化,能够有效地识别装置振动的振动信号特征,便于对油田机械传动装置的运行状态进行判断。
关键词:小波分析 智能化油田 机械传动装置 振动信号识别 传动信号 支持向量机
中图分类号:TP751 文献标识码:A
1.关键字
- 油田机械装置的传动部件一般有:
- 齿轮
- 链条
- 万向轴
- 三角带
- 传动指标(文中有定义)
- 转速比
- 变矩向量
- 功率能容
- 传动效率
- 过载向量
2.理论概述
3.分析过程 - 黑盒
3.1原始振动数据:
3.2 工况
3.3 处理后的数据
4.论文结论验证
我在原始信号的基础上,叠加了10倍的白噪声。然后在时域和频谱的观察已经完全乱序的情况下,小波分析基本上可以稳定地观察到已知频率区间的信号特征值。代码没有做反推回时域的处理,因为没有必要。因为只是为了得到了特征值。
4.1 所用代码
import numpy as np
import pywt
import matplotlib.pyplot as plt
import matplotlib
# 生成一个模拟的2048点振动加速度数据(你可以用你的实际数据替代)
# 示例:简单的正弦波加噪声
fs = 10000 # 采样频率 (Hz)
N = 2048 # 数据点数
t = np.arange(N) / fs
f0 = 300 # 基频 (Hz)
data = 0.1* np.sin(2 * np.pi * f0 * t) + 0.5 * np.random.randn(N)
#目标频段
freq_target_limited = [100,600]
# 选择小波函数
FreqBand = 1.5
FreqCenter=1.0
wavelet = f'cmor{FreqBand}-{FreqCenter}' # 复小波
#wavelet = 'cmor'
scales = np.arange(1, 128) # 尺度范围
# 小波变换
coefficients, frequencies = pywt.cwt(data, scales, wavelet, sampling_period=1/fs)
# 计算频谱(绝对值的平方表示功率谱)
power_spectrum = np.abs(coefficients) ** 2
# 计算平均功率谱
avg_power_spectrum = np.mean(power_spectrum, axis=1)
# 过滤出关心的频率区间
freq_mask = (frequencies >= freq_target_limited[0]) & (frequencies <= freq_target_limited[1])
filtered_frequencies = frequencies[freq_mask]
filtered_power_spectrum = avg_power_spectrum[freq_mask]
# 找到最大功率谱的频率
max_freq_index = np.argmax(filtered_power_spectrum)
base_freq = filtered_frequencies[max_freq_index]
# 输出基频
print(f"提取的基频是:{base_freq:.2f} Hz")
# 设置字体路径
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # SimHei 是常用的中文字体
matplotlib.rcParams['axes.unicode_minus'] = False # 处理负号问题
plt.subplot(311) # 绘制时域波形
plt.plot(t, data)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Time Domain Signal')
plt.grid()
plt.subplot(312) # 绘制FFT
# 计算 FFT
fft_values = np.fft.fft(data)
fft_freqs = np.fft.fftfreq(N, 1/fs)
# 取绝对值并且取前半部分
fft_magnitude = np.abs(fft_values)/len(data)
half_n = N // 2
fft_freqs = fft_freqs[:half_n]
fft_magnitude = fft_magnitude[:half_n]
plt.plot(fft_freqs, fft_magnitude)
plt.title('FFT')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Power')
plt.grid()
plt.subplot(313) # 绘制功率谱
plt.plot(frequencies, avg_power_spectrum)
plt.title(f'Power Spectrum 特征频率 is {base_freq:.2f} in {freq_target_limited}')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Power')
plt.grid()
plt.tight_layout() # 调整子图间距
plt.show()