python中有限信号的傅里叶变换
我想计算有限时间序列的使用 傅里叶变换在有限的时间间隔内进行。可以指定此时间间隔的长度。但是,我不希望时间间隔的长度会影响任何给定频率下变换的振幅。这似乎就是发生的情况: 短时间序列(橙色)似乎比长时间序列(蓝色)具有更高的傅里叶振幅。一些示例代码:python中有限信号的傅里叶变换,python,numpy,fft,Python,Numpy,Fft,我想计算有限时间序列的使用 傅里叶变换在有限的时间间隔内进行。可以指定此时间间隔的长度。但是,我不希望时间间隔的长度会影响任何给定频率下变换的振幅。这似乎就是发生的情况: 短时间序列(橙色)似乎比长时间序列(蓝色)具有更高的傅里叶振幅。一些示例代码: from __future__ import division import matplotlib.pyplot as plt import numpy as np import glob import scipy.integrate #Se
from __future__ import division
import matplotlib.pyplot as plt
import numpy as np
import glob
import scipy.integrate
#Set up plotting environment
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
fig = plt.figure(figsize=(20,10))
ax1 = plt.subplot2grid((1,2), (0,0))
ax2 = plt.subplot2grid((1,2), (0,1))
def process(f):
#Load the data
data = np.load(f)
#plot the time series
plot_data = data['plot_data']
t_norm = plot_data[:,0]
y_norm = plot_data[:,1]
ax1.plot(t_norm, y_norm)
#Now get the FT using the proper data
real_data = data['real_data']
t = real_data[:,0]
y = real_data[:,1]
#Get the frequencies
f = np.fft.rfftfreq(y.size)
dt = t[1] - t[0]
y_FT = dt*np.fft.rfft(y)
y_FT = np.abs(y_FT)
ax2.loglog(f,y_FT)
all_files = glob.glob('*.npz')
for f in all_files:
process(f)
#Label axes
ax1.set_xlabel('t [days]')
ax1.set_ylabel('y (t)')
ax2.set_xlabel('f [Hz]')
ax2.set_ylabel(r'$\mid y (f) \mid$')
plt.show()
这两个数据集是和
谁能解释一下我做错了什么吗?@Yacola谢谢你的回答。你是说正确的图表吗?你是说数值噪声,傅里叶变换是怎么做的?看看这个笔记本,小的浮动被处理了吗?@user1887919,不知怎么的,我删除了第一条评论,但是是的,是正确的。左图(宏观视图)看起来很好,右图(对数)显示,与2e-5 Hz之前的蓝色FFT相比,橙色FFT缺少点,之后这两种FFT之间的剩余差异没有任何物理意义。