Фурье-преобразование конечного сигнала в python - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу вычислить (дискретное) преобразование Фурье с использованием numpy .fft конечного временного ряда.

Преобразование Фурье происходит в течение конечный интервал времени. Можно указать длину этого временного интервала. Однако я не ожидал бы, что длительность временного интервала повлияет на амплитуду преобразования на любой заданной частоте. Вот что, по-видимому, происходит:

enter image description here

Кажется, что короткие временные ряды (оранжевый) имеют более высокие амплитуды Фурье, чем более длинные временные ряды (синий). Пример кода:

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()

и два набора данных: здесь и здесь Может кто-нибудь объяснить, что я делаю неправильно?

...