Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 记录位置值的FFT实现_Python_Python 2.7_Fft - Fatal编程技术网

Python 记录位置值的FFT实现

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是记录值的数组) 到目前为止,我已经生成了以下图表: 非

我已经创建了一个程序,跟踪一个人在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()