我有一个速度和时间的数据集。时间步长并不统一,但速度数据是一个波形。如何使用Python的FFT计算速度的主频率?大多数我在网上看到的示例都是针对统一的时间步进的。
我的数据类似于:
7.56683038E+02 2.12072850E-01
7.56703750E+02 2.13280844E-01
7.56724461E+02 2.14506402E-01
7.56745172E+02 2.15748934E-01
7.56765884E+02 2.17007907E-01
7.56786595E+02 2.18282753E-01
有类似这样的10000行代码。
看到一些在线回复,我写了如下代码,但是它并没有起作用:
#!/usr/bin/env python
import numpy as np
import scipy as sy
import scipy.fftpack as syfp
import pylab as pyl
# Calculate the number of data points
length = 0
for line in open("data.dat"):
length = length + 1
# Read in data from file here
t = np.zeros(shape=(length,1))
u = np.zeros(shape=(length,1))
length = 0
for line in open("data.dat"):
columns = line.split(' ')
t[length] = float(columns[0])
u[length] = float(columns[1])
length = length + 1
# Do FFT analysis of array
FFT = sy.fft(u)
# Getting the related frequencies
freqs = syfp.fftfreq(len(u))
# Create subplot windows and show plot
pyl.subplot(211)
pyl.plot(t, u)
pyl.xlabel('Time')
pyl.ylabel('Amplitude')
pyl.subplot(212)
pyl.plot(freqs, sy.log10(FFT), 'x')
pyl.show()
使用这段代码,我得到了类似以下图片的输出。我不确定这个图像表示什么。我原本期望在FFT图表中只看到一个峰值。
![python程序的输出结果](https://istack.dev59.com/hPZq7.webp)
![模拟数据的结果](https://istack.dev59.com/XcE44.webp)
sy.log10(np.abs(FFT))
(即注意使用abs
),您会看到什么? - tom10t = 0.02071*np.arange(100000)
和u = np.sin(2*np.pi*t*.01)
? - tom10