振动信号绘制包络谱
时间: 2023-08-03 20:11:05 浏览: 272
绘制包络谱的一种方法是使用希尔伯特变换。该变换将时域信号转换为复信号,然后对其进行包络分析。具体步骤如下:
1. 对原始信号进行希尔伯特变换,得到其复信号。
2. 计算复信号的模(即振幅)。
3. 对振幅信号进行低通滤波,以去除高频噪声和不需要的成分。
4. 对滤波后的振幅信号进行傅里叶变换,得到其频谱。
5. 绘制频谱的包络线,即为包络谱。
下面是一个Python代码示例,展示如何绘制包络谱。
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import hilbert, butter, filtfilt
# 生成一个随机振动信号
fs = 1000 # 采样率
t = np.arange(0, 1, 1/fs) # 时间轴
x = np.sin(2*np.pi*10*t) + np.sin(2*np.pi*50*t) + np.random.randn(len(t))*0.1
# 希尔伯特变换
hx = hilbert(x)
amp = np.abs(hx)
# 低通滤波
nyq_freq = fs/2
cutoff_freq = 100
b, a = butter(4, cutoff_freq/nyq_freq, 'low')
env = filtfilt(b, a, amp)
# 傅里叶变换
n = len(x)
freq = np.fft.fftfreq(n, d=1/fs)
amp_env = np.abs(np.fft.fft(env))
# 绘制包络谱
fig, ax = plt.subplots(2, 1, figsize=(10, 6))
ax[0].plot(t, x, label='原始信号')
ax[0].plot(t, env, label='包络线')
ax[0].set_xlabel('时间 (s)')
ax[0].set_ylabel('振幅')
ax[0].legend()
ax[1].plot(freq[:n//2], amp_env[:n//2])
ax[1].set_xlabel('频率 (Hz)')
ax[1].set_ylabel('包络谱')
plt.show()
```
运行该代码,将会得到一个包络谱图像,展示了原始信号及其包络线的时域波形和频域包络谱。
阅读全文