如何在FFT后计算频率轴

0 投票
2 回答
3301 浏览
提问于 2025-04-18 02:21

我有一组时间序列数据,我先截取其中的一部分,然后使用 numpy.fft.rfft 这个命令。接着我用

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

来展示 rfft 的结果。那么我该如何计算频率轴呢?我的采样频率是 65536 Hz。

2 个回答

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(为python3.3安装pip)。安装完pip后,只需运行sudo pip3.3 install numpy,你就能得到最新版本(写这段话时是1.8.1)。还有其他更新python/numpy的方法(比如根据你的系统使用brew或apt),但我觉得pip用起来挺不错的。

2

你可以使用 numpy.fft.rfftfreq 这个方法来生成和 rfft 方法对应的频率数据。下面我生成了一条带噪声的正弦波,并对其进行了傅里叶变换,同时也生成了频率数据。

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()

撰写回答