Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中电机振动信号的快速傅里叶变换_Python_Pandas_Signals_Fft - Fatal编程技术网

python中电机振动信号的快速傅里叶变换

python中电机振动信号的快速傅里叶变换,python,pandas,signals,fft,Python,Pandas,Signals,Fft,我收集了一些电机振动信号的数据(178432),单位为g(加速度)。信号采样率为25000/秒,电机转速为1500rpm(25hz)。但是,当我尝试使用python进行FFT时,情况并非如此。有人能帮我吗 我的数据: 这是我的密码: import scipy.fftpack import numpy as np import pandas as pd import matplotlib.pyplot as plt nor = pd.read_csv('normal.csv', header=1

我收集了一些电机振动信号的数据(178432),单位为g(加速度)。信号采样率为25000/秒,电机转速为1500rpm(25hz)。但是,当我尝试使用python进行FFT时,情况并非如此。有人能帮我吗

我的数据:

这是我的密码:

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图:

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

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>]
[49]中的
:yf=scipy.fft(或['Channel_0'].值)#列/系列值
In[50]:yf
出[50]:
阵列([1.58282430+0.j,-3.61766030-1.86904326j,
-0.5066930+4.24825582j,…,4.54241118-0.97200708j,
-0.5066930-4.24825582j,-3.61766030+1.86904326j])
在[51]中:x=scipy.fftpack.fftfreq(yf.size,1/25e3)
在[56]中:绘图(x[:x.size//2],abs(yf)[:yf.size//2])#省略折叠
出[56]:[]

请详细说明图片的错误。顺便说一下,它应该像这样的图片,因为我将频率设置为25hz,所以最高的部分不应该出现在25hz而不是50Hz吗?还是因为有噪音干扰了电机的振动?恐怕我无法理解。我已经有很长一段时间没有学习信号学的相关课程了,我也没有电机方面的经验和教育。仔细检查频率箱等是否正确(换句话说,传递给
fftfreq()
etc的值是否正确)。在25Hz处似乎也有一个相当大的振幅,所以50Hz的尖峰可能是某种共振现象吗?尖峰是转速的两倍,这是关于振动,可能是由于一些来回运动吗?那是什么类型的马达?我不知道这是否有意义。。。