擅长:python、mysql、java
<p>Numpy有一个方便的函数<code>np.fft.fftfreq</code>来计算与FFT组件相关的频率:</p>
<pre><code>from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
data = np.random.rand(301) - 0.5
ps = np.abs(np.fft.fft(data))**2
time_step = 1 / 30
freqs = np.fft.fftfreq(data.size, time_step)
idx = np.argsort(freqs)
plt.plot(freqs[idx], ps[idx])
</code></pre>
<p><img src="https://i.stack.imgur.com/iw3Q8.png" alt="enter image description here"/></p>
<p>请注意,在您的情况下,您看到的最大频率不是30赫兹,而是</p>
<pre><code>In [7]: max(freqs)
Out[7]: 14.950166112956811
</code></pre>
<p>你永远看不到功率谱中的采样频率。如果你有偶数个样本,那么在你的例子中,你将达到<a href="http://en.wikipedia.org/wiki/Nyquist_frequency">Nyquist frequency</a>,15hz(尽管numpy将其计算为-15)。</p>