我正在尝试对随时间变化的压力变化进行FFT。但是,由于我是FFT分析的新手,我不确定我所做的是正确的。任何建议将被认真考虑。这是我的代码:
import sys
import numpy as np
from numpy import fft
import matplotlib.pyplot as plt
pressure_data = np.loadtxt('p.dat')
t, p = pressure_data[:,0], pressure_data[:,1]
number = len(p)
sample_period = 1.0/2000
f_coeffs = np.fft.fft(p)/number
f_coeffs_abs = np.absolute(f_coeffs)
freq = np.fft.fftfreq(number, sample_period)
plt.figure()
plt.plot(freq, f_coeffs_abs)
plt.show()
p.dat
文件就是这样的
0.0005 -2047.41878324
0.001 -1709.80828161
0.0015 -2158.61672106
0.002 -3766.56591721
其中第一列是时间,第二列是压力
答案 0 :(得分:1)
这里展示了一个非常简单的fft anaylsis示例。
from scipy import fft
from numpy import arange, cos, pi, random
from matplotlib.pyplot import subplot, plot, ylabel, xlabel, title, grid, xlim, show
N = 2**9
F = 25
t = arange(N)/float(N)
x = cos(2*pi*t*F) + random.rand(len(t))*3
subplot(2,1,1)
plot(t,x)
ylabel('x []')
xlabel('t [seconds]')
title('A cosine wave')
grid()
subplot(2,1,2)
f = t*N
xf = fft(x)
plot(f,abs(xf))
title('Fourier transform of a cosine wave')
xlabel('xf []')
ylabel('xf []')
xlim([0,N])
grid()
show()
这应该让你开始。注意25和475处的峰值,即我们定义为F
的频率答案 1 :(得分:1)
添加到@nagordon的解释:您可以通过执行以下操作来提取峰值:
xf = np.fft.fft(x)[:N//2] # it's reflected about middle so only take first half
...
threshold = 30.0
peaks = np.where(((xf[1:-1] - xf[:-2]) > threshold) & ((xf[1:-1] - xf[2:]) > threshold))
print([(i + 1, abs(xf[i + 1])) for i in peaks])