【问题标题】:fast fourier transform of csv datacsv数据的快速傅里叶变换
【发布时间】:2020-10-03 04:26:46
【问题描述】:

我有一个包含时间和扭矩数据的 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()

【问题讨论】:

  • 问“为什么这不起作用”在 SO 上不会走得太远。你得到什么样的错误?
  • 无错误,plot中没有数据,fft全是nan。对不起,我糟糕的发帖礼仪。
  • 您可以尝试绘制np.absolute(fft) 以确保这不是复数问题吗?无论如何,为了获得 fft 的大小,几乎总是应该这样做。
  • 我试过 np.absolute(fft) 还是一样的结果。打印 fft 产生 [nan+nanj nan+nanj nan+nanj ... nan+nanj nan+nanj nan+nanj]
  • 不知道输入频率是多少。

标签: python pandas numpy matplotlib fft


【解决方案1】:

您发布的内容对我有用,但您的数据对 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)

您未包含在为您提供 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)

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

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 2017-09-14
    • 2012-12-10
    • 2013-03-31
    • 2015-08-19
    • 2020-03-29
    • 1970-01-01
    • 2013-10-17
    • 2010-12-13
    相关资源
    最近更新 更多