本文内容和程序来自参考书《Python科学计算》
为了减少FFT所截取的数据段前后的跳变,可以对数据先乘以一个窗函数,使得其前后数据能平滑过渡。例如常用的hann窗函数的定义如下:
其中N为窗函数的点数,下面是一个512点hann窗的曲线:
>>> import pylab as pl
>>> import scipy.signal as signal
>>> pl.figure(figsize=(8,3))
>>> pl.plot(signal.hann(512))
窗函数都在scipy.signal库中定义,它们的第一个参数为点数N。可以看出hann窗函数是完全对称的,也就是说第0点和第511点的值完全相同,都为0。在这样的函数和信号数据相乘的话,结果中会出现前后两个连续的0,这样FFT的结果所表示的周期信号中有两个连续的0值,会对信号的周期性有一定的影响。
-计算周期信号的一个周期的数据
考虑对一个正弦波取样10个点,那么第一个点的值为0,而最后一个点的值不应该是0,这样这10个数据的重复才能是精确的正弦波,下面的两种计算中,前者是正确的:
>>> np.sin(np.arange(