我正在尝试使用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))
我得到的结果是
这是错误的,因为我知道FT应该在f = 1
达到峰值,因为cos
的频率是1
。
我在做什么错了?
答案 0 :(得分:4)
您仅将fftshift
应用于x轴标签,而不是实际的FFT幅度-您也只需应用s_fft = np.fft.fftshift(np.fft.fft(x))
。
答案 1 :(得分:3)
您错了2或3件事:
对于纯实值频率,FFT将在两个位置达到峰值。这是正负频率。在傅立叶域中获得单个峰值的唯一方法是具有复数信号(或具有微不足道的DC分量)。
(如果使用f,则表示频率索引)使用DFT时,样本数量将确定您拥有多少个频率分量。在最高频率索引处,您始终接近于每个样本的振荡:(-1)^ t
(如果使用f,则表示振幅)有many definitions of the DFT,影响正向和反向变换。这将影响读取光谱时如何解释这些值。