请帮我用python对一个采样频率为1024Hz,采集时间为3s的的振动信号做频域特征提取
时间: 2024-05-04 19:15:23 浏览: 13
以下是一个示例代码,使用了SciPy库中的快速傅里叶变换(FFT)函数和NumPy库中的一些数组操作函数:
```python
import numpy as np
from scipy.fft import fft
# 读取振动信号数据,假设保存在名为 data 的一维数组中
# 这里假设数据已经被预处理,例如去除了直流分量和高通滤波等
# 如果需要预处理,请使用NumPy或SciPy库中的相关函数
# 计算FFT
fft_data = fft(data)
# 计算频率轴上的取样点,注意这里不包括直流分量(0Hz)
freqs = np.linspace(0, 512, 512, endpoint=False)
# 计算振动信号的频域能量谱密度(PSD)
# 注意这里使用的是单边PSD,即只计算正频率部分,单位为“功率/Hz”
psd = np.abs(fft_data[:512])**2 / (3*1024)
# 计算一些频域特征,例如最大频率、均值频率、频率谱峰度等
max_freq = freqs[np.argmax(psd)]
mean_freq = np.sum(freqs * psd) / np.sum(psd)
skewness = np.sum((freqs - mean_freq)**3 * psd) / np.sum(psd) / np.sqrt(np.sum((freqs - mean_freq)**2 * psd))**3
# 输出结果
print("最大频率:{:.2f} Hz".format(max_freq))
print("均值频率:{:.2f} Hz".format(mean_freq))
print("频率谱峰度:{:.2f}".format(skewness))
```
这里假设采样点数为 $3\times 1024=3072$,FFT的输出长度为 $2^{11}=2048$,因此只取前 $512$ 个频率点计算PSD。如果需要使用其他的频域特征,可以根据需要添加相应的计算代码。