Python 记录位置值的FFT实现
我已经创建了一个程序,跟踪一个人在60秒的时间间隔内静止在一个点上的激光的红点。它将激光X和Y位置的数据记录到excel电子表格中,当前频率约为16-19 Hz。(我正在寻找提高这一水平的方法) 现在,我有一个时间间隔内X和Y位置的列表,并希望将其转换为频域,以查看我是否可能找到一个频率,该频率是指人因呼吸等原因而上下移动的频率。我一直在尝试对X和Y值分别执行FFT,但不确定我是否正确执行了此操作 这是我为执行FFT而创建的函数:(x和y是记录值的数组) 到目前为止,我已经生成了以下图表:Python 记录位置值的FFT实现,python,python-2.7,fft,Python,Python 2.7,Fft,我已经创建了一个程序,跟踪一个人在60秒的时间间隔内静止在一个点上的激光的红点。它将激光X和Y位置的数据记录到excel电子表格中,当前频率约为16-19 Hz。(我正在寻找提高这一水平的方法) 现在,我有一个时间间隔内X和Y位置的列表,并希望将其转换为频域,以查看我是否可能找到一个频率,该频率是指人因呼吸等原因而上下移动的频率。我一直在尝试对X和Y值分别执行FFT,但不确定我是否正确执行了此操作 这是我为执行FFT而创建的函数:(x和y是记录值的数组) 到目前为止,我已经生成了以下图表: 非
非常感谢您的指导。我看到的唯一问题是您的采样率为
Fs=60
,但您说您的采样率为“16-19 Hz”-因此,如果是这种情况,您的频率轴将是错误的。(我想知道,您是否混淆了60秒的采样周期和采样率?)。您可能需要添加一些小事情:应用窗口函数并使用对数轴表示功率谱幅值-这将使您的频谱看起来“更好”。我可能混淆了这些值。60表示时间间隔,16-19 Hz表示记录值的速率。这是使用采集值的总数除以采样间隔(60)(该实验给出了16 Hz)来计算的。但是,我可能误解了这一点,因为我遵循了在stackoverflow上找到的指导原则。OK-采样率(通常由Fs
表示)是每秒采样数。所以如果你采样3秒,得到60个样本,那么Fs=60/3=20Hz。采样率需要统一,它将确定频谱图的频率轴(例如,如果Fs=20 Hz,则频率轴将为0..20/2=10 Hz(也称为奈奎斯特频率))。
def FFT(x, y):
"""
Preforms a Fast Fourier Transform.
"""
Fs = 60
n = len(y)
T = n/Fs #sampling rate Hz
t = np.linspace(0,60,n)
k = np.arange(n)
frq = k/T
freq = frq[range(n/2)]
yf = fft(y)/n
yf = yf[range(n/2)]
plt.figure(1)
plt.subplot(211)
plt.xlabel('time')
plt.ylabel('Y')
plt.plot(t,y, 'bo')
plt.figure(1)
plt.subplot(212)
plt.axis([0.0,60.0,0.0,20.0])
plt.plot(freq, abs(yf)*2)
plt.show()