【问题标题】:Fast Fourier Transform on motor vibration signal in pythonpython中电机振动信号的快速傅里叶变换
【发布时间】:2018-01-17 10:22:36
【问题描述】:

我收集了一些电机振动信号的数据(178,432),单位是g(加速度)。信号采样率为25000/sec,电机转速为1500rpm(25hz)。但是,当我尝试使用 python 进行 FFT 时,图片不正确。有人可以帮我吗?

我的数据:https://drive.google.com/file/d/12V8H3h6ved4lBflVxoHo2Qv5rfVZqXf0/view?usp=sharing

这是我的代码:

import scipy.fftpack
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

nor = pd.read_csv('normal.csv', header=1)

N = nor.size # data size
T = 1.0 / 25000.0 # inverse of sampling rate
x = np.linspace(0.0, N*T, N)
y = nor.values
yf = np.abs(scipy.fft(y))
xf = scipy.fftpack.fftfreq(nor.size, d=T)

fig, ax = plt.subplots()
ax.plot(np.abs(xf), np.abs(yf))
plt.show()

我的 FFT 图:

【问题讨论】:

标签: python pandas signals fft


【解决方案1】:

当您访问DataFramevalues 时,您会得到一个数组数组或二维数组:

In [23]: pd.read_csv('../Downloads/normal.csv', header=1).values
Out[23]: 
array([[ 0.006038 ],
       [ 0.0040734],
       [ 0.0031316],
       ..., 
       [-0.0103366],
       [-0.0025845],
       [ 0.0012779]])

所以scipy.fft(y) 的结果是nor.size 独立的一维 1 项 DFFT 结果数组的数组,也就是原始信号:

In [42]: scipy.fft(y)
Out[42]: 
array([[ 0.0060380+0.j],
       [ 0.0040734+0.j],
       [ 0.0031316+0.j],
       ..., 
       [-0.0103366+0.j],
       [-0.0025845+0.j],
       [ 0.0012779+0.j]])

然后您继续绘制原始信号的绝对值与 FFT 频率。相反,您需要对向量执行单个 DFFT:

In [49]: yf = scipy.fft(nor['Channel_0  '].values)  # column/series values

In [50]: yf
Out[50]: 
array([ 1.58282430+0.j        , -3.61766030-1.86904326j,
       -0.50666930+4.24825582j, ...,  4.54241118-0.97200708j,
       -0.50666930-4.24825582j, -3.61766030+1.86904326j])

In [51]: x = scipy.fftpack.fftfreq(yf.size, 1 / 25e3)

In [56]: plot(x[:x.size//2], abs(yf)[:yf.size//2])  # omit fold
Out[56]: [<matplotlib.lines.Line2D at 0x7f2f39f01cf8>]

【讨论】:

  • 对了,因为我设置的频率是25hz,所以最高的部分不应该出现在25hz而不是50hz吗?还是因为有噪音干扰电机振动?
  • 恐怕这超出了我的理解范围。很久没上信号相关的课程了,也没有电机方面的经验和教育。仔细检查频率箱等是否正确(换句话说,传递给fftfreq() 等的正确值)。在 25Hz 处似乎也有相当大的振幅,那么 50Hz 的尖峰可能是某种共振吗?
  • 尖峰是 RPM 的两倍,这与振动有关,可能是由于一些来回运动造成的吗?那是什么马达?而且我不知道这是否有意义......
猜你喜欢
  • 2020-03-29
  • 2011-07-12
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 2013-03-31
  • 2014-11-02
相关资源
最近更新 更多