如何在FFT后计算频率轴

时间:2014-04-11 13:23:23

标签: python numpy matplotlib fft frequency

我有一个时间序列数据,我捕获了它的一部分然后使用numpy.fft.rfft命令后我使用

plt.plot(2*abs(result)/len(result))

显示rfft结果如何计算频率轴?我的samplefreq是65536 Hz。

2 个答案:

答案 0 :(得分:2)

您可以使用numpy.fft.rfftfreq方法生成与rfft方法相对应的频率数据。下面我已经生成了一个有噪声的sin波,傅里叶变换了它并生成了频率数据。

import numpy as np
import matplotlib.pyplot as plt

N = 2048
x = np.sin(2*np.pi*10*np.linspace(0,10,N)) + np.random.random(N)*0.1

z = np.fft.rfft(x) # FFT
y = np.fft.rfftfreq(len(x)) # Frequency data

fig, ax = plt.subplots()
ax.plot(y, z)

plt.show()

答案 1 :(得分:1)

解决方案

rfftfreq可以正常工作,正如另一张海报所提到的,如果你的系统中有它。

买者

但是,我认为您使用的是过时的numpy版本。 Numpy 1.6.1 包中有rfftfreq,因此您会看到numpy.fft.rfftfreq的“未找到”错误。

如果我使用旧版本的python / numpy:

Speak 'Friend' and Enter: python2.7
Python 2.7.2 (default, Oct 11 2012, 20:14:37) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.version.version
'1.6.1'
>>> numpy.fft.rfftfreq
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'rfftfreq'

现在使用新numpy的更新版本中的命令相同:

Speak 'Friend' and Enter: python3.3
Python 3.3.2 (v3.3.2:d047928ae3f6, May 13 2013, 13:52:24) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.version.version
'1.8.1'
>>> numpy.fft.fftfreq
<function fftfreq at 0x10114edd0>

我的推荐

更新numpy。您可能还需要更新python。

完成此操作的简单方法(仅测试它):安装python3.3,然后安装pip(Installing pip for python3.3)。安装pip后,它将是一个简单的sudo pip3.3 install numpy,您将获得最新版本(撰写本文时为1.8.1)。还有其他方法可以更新python / numpy(例如brew或apt,具体取决于你的系统),但是pip非常适合ihmo。