Я хочу вычислить (дискретное) преобразование Фурье с использованием numpy .fft конечного временного ряда.
Преобразование Фурье происходит в течение конечный интервал времени. Можно указать длину этого временного интервала. Однако я не ожидал бы, что длительность временного интервала повлияет на амплитуду преобразования на любой заданной частоте. Вот что, по-видимому, происходит:
Кажется, что короткие временные ряды (оранжевый) имеют более высокие амплитуды Фурье, чем более длинные временные ряды (синий). Пример кода:
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()
и два набора данных: здесь и здесь Может кто-нибудь объяснить, что я делаю неправильно?