`fft`不返回应有的内容

时间:2018-06-25 10:52:48

标签: python numpy fft

我正在尝试使用numpy的fft进行傅里叶变换,如下所示:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0,1, 128)
x = np.cos(2*np.pi*t)

s_fft = np.fft.fft(x)
s_fft_freq = np.fft.fftshift(np.fft.fftfreq(t.shape[-1], t[1]-t[0]))
plt.plot(s_fft_freq, np.abs(s_fft))

我得到的结果是

enter image description here

这是错误的,因为我知道FT应该在f = 1达到峰值,因为cos的频率是1

我在做什么错了?

2 个答案:

答案 0 :(得分:4)

您仅将fftshift应用于x轴标签,而不是实际的FFT幅度-您也只需应用s_fft = np.fft.fftshift(np.fft.fft(x))

答案 1 :(得分:3)

您错了2或3件事:

  1. 对于纯实值频率,FFT将在两个位置达到峰值。这是正负频率。在傅立叶域中获得单个峰值的唯一方法是具有复数信号(或具有微不足道的DC分量)。

  2. (如果使用f,则表示频率索引)使用DFT时,样本数量将确定您拥有多少个频率分量。在最高频率索引处,您始终接近于每个样本的振荡:(-1)^ t

  3. (如果使用f,则表示振幅)有many definitions of the DFT,影响正向和反向变换。这将影响读取光谱时如何解释这些值。

相关问题