csv数据的快速傅里叶变换

2024-05-18 23:41:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含时间和扭矩数据的csv文件https://pastebin.com/MAT2rG3U由于大小限制,此数据集被截断

我试图找到数据的FFT,以找到振动的频率

这是我的代码(这是我使用的示例Fast Fourier Transform in Python),它不会产生任何结果。我已经研究了很多在线资源,但找不到我的错误

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

data = pd.read_csv('data.csv',index_col=0)
data = data['Torque'].astype(float).values
print(data)

N = data.shape[0] #number of elements
t = np.linspace(0, 300, N) 
#t=np.arange(N)
s = data

fft = np.fft.fft(s)
fftfreq = np.fft.fftfreq(len(s))

T = t[1] - t[0]
print(T)

f = np.linspace(0, 1 / T, N)
plt.ylabel("Amplitude")
plt.xlabel("Frequency [Hz]")
plt.plot(fftfreq,fft)
#plt.xlim(0,100)

plt.show()

Tags: 文件csv数据importfftdataasnp
1条回答
网友
1楼 · 发布于 2024-05-18 23:41:22

您发布的内容对我有用,但您的数据对于FFT无效,因为时间步长不一致。也就是说,您没有定义好的采样率

data = pd.read_csv('torque_data.txt',index_col=0)
data = data['Torque'].astype(float).values
print(data)

N = data.shape[0] #number of elements
t = np.linspace(0, 300, N) 
#t=np.arange(N)
s = data

fft = np.fft.fft(s)
fftfreq = np.fft.fftfreq(len(s))

T = t[1] - t[0]
print(T)

f = np.linspace(0, 1 / T, N)
plt.ylabel("Amplitude")
plt.xlabel("Frequency [Hz]")
plt.plot(fftfreq, np.absolute(fft))
#plt.xlim(0,100)

enter image description here

给出NAN的样本中没有包含的数据可能有问题

但是,在您提供的数据中,采样率并不一致,这是FFT所必需的。要查看此信息,请绘制时间步长的直方图:

# read in the data like this to get the times
data = pd.read_csv('torque_data.txt')
time = data['Seconds'].astype(float).values
data = data['Torque'].astype(float).values

# now look at the timesteps
fig, axs = plt.subplots()
time_deltas = t[1:]-t[:-1]
h = axs.hist(time_deltas, bins=50)

enter image description here

因为很多时间步都有不同的值,所以我担心会信任FFT。(当我第一次查看您的数据时,早期的大多数点似乎都有0.004s的时间步长,因此我想知道您的数据采集是否随着时间的推移而变化,而不仅仅是随机的,但无论如何,您也需要对其进行排序。)有解决方案,如插值/重采样或下采样,但是,如果没有修复,人们无法可靠地相信FFT结果

相关问题 更多 >

    热门问题