【发布时间】:2018-05-02 21:35:58
【问题描述】:
我必须重新制作示例的 FFT 以进行训练,但我遇到了一个问题:当我绘制 FFT 时,我成功地获得了相同的形状,但边界与示例不同。
该函数的截止频率预计为 2 Hz(0.5 秒)。
(如果您不理解:这意味着在 0.5 秒(FFT 为 2 Hz),函数等于 0)
左边是与时间相关的函数,右边是傅里叶变换。
这就是例子。 简单的红线,是我正在开发的功能:
这是我得到的:
如您所见,我的 FFT 图的边界与示例非常不同。 我在情节中有 10² 的系数。
您认为问题出在我使用 FFT 的方式上吗? 都说函数是归一化的,你觉得区别是从这里来的吗?
这是我写的代码:
npas = 32768 # steps for discretization
t = np.linspace(0,200,npas) # time discretized (array of npas elements, from 0 to 200)
f = np.fft.fftfreq(t.size, d=1.0/npas) # frequency (for Fourier Transform) d = sample spacing (inverse of the sampling rate)
swh = np.zeros(npas) # initialization of the array swh (the function we use)
tau0 = 1.0/20
# creation of the function and it's Fourier transform
swh = (1/tau0)*np.exp(-t/tau0)*(1 + t/tau0 + (t**2)/(2*tau0**2) + (t**3)/(3*tau0**3) - 0.490*t**4/tau0**4) - np.exp(-t/tau0)*(1/tau0 + t/tau0**2 + t**2/tau0**3 - 0.490*(4*t**3)/tau0**4)
swh_f = np.fft.fft(swh) # Fourier transform of swh
##### Plot #####
plt.figure(1)
plt.subplot(1,2,1)
plt.title("Time Function")
plt.plot(t, swh, 'r' , linewidth=1, label = "SWH B = 0.490") # plot of swh, function of t
plt.legend(loc = 1, prop={'size': 7}) # legend position
plt.xlim(0,1.5)
plt.subplot(1,2,2)
plt.title("Frequency Function")
plt.plot(f[0:f.size//2], abs(swh_f[0:npas//2]), 'r' , linewidth=1) # plot of the Fourier transform, function of f (frequency)
plt.xscale('log')
plt.yscale('log')
plt.show()
感谢您的关注!
【问题讨论】:
标签: python matplotlib fft