У меня есть данные для Velocity vs time. Временные шаги неравномерны, но данные Velocity - это волна. Как рассчитать основную частоту скорости с помощью FFT Python? Большинство примеров, которые я просматриваю в Интернете, предназначены для равномерного шага времени.Как рассчитать частоту волны подачи и времени
Мои данные как
7.56683038E+02 2.12072850E-01
7.56703750E+02 2.13280844E-01
7.56724461E+02 2.14506402E-01
7.56745172E+02 2.15748934E-01
7.56765884E+02 2.17007907E-01
7.56786595E+02 2.18282753E-01
10000 линий, как это.
Видя некоторые онлайн ответы, я написал подобный код, но он не работает:
#!/usr/bin/env python
import numpy as np
import scipy as sy
import scipy.fftpack as syfp
import pylab as pyl
# Calculate the number of data points
length = 0
for line in open("data.dat"):
length = length + 1
# Read in data from file here
t = np.zeros(shape=(length,1))
u = np.zeros(shape=(length,1))
length = 0
for line in open("data.dat"):
columns = line.split(' ')
t[length] = float(columns[0])
u[length] = float(columns[1])
length = length + 1
# Do FFT analysis of array
FFT = sy.fft(u)
# Getting the related frequencies
freqs = syfp.fftfreq(len(u))
# Create subplot windows and show plot
pyl.subplot(211)
pyl.plot(t, u)
pyl.xlabel('Time')
pyl.ylabel('Amplitude')
pyl.subplot(212)
pyl.plot(freqs, sy.log10(FFT), 'x')
pyl.show()
-------------------- - edit ------------------------
с этим кодом Я получаю вывод, как на следующем рисунке. Я не уверен, что показывает этот рисунок. Я ожидал увидеть только один пик на диаграмме FFT
---------------------- edit --------- ---------------
Мои результаты с данными фиктивных с функциями грех, предложенных в комментариях ниже здесь:
Что вы подразумеваете под словом "it is not working"? Кроме того, что вы подразумеваете под «основной частотой»? – tom10
На графике FFT, что вы видите, если вы занесете 'sy.log10 (np.abs (FFT))' (то есть обратите внимание на использование 'abs' там). – tom10
, который ничего не меняет в выходе.Кстати, я проверил, и временные шаги выглядят почти единообразными с dt = 0.02071, и у меня есть 100000 точек данных в моем файле. – jhaprade