81 lines
1.5 KiB
Python
81 lines
1.5 KiB
Python
import numpy as np
|
|
import polars as pl
|
|
import matplotlib.pyplot as plt
|
|
import os
|
|
import scipy
|
|
import nfft
|
|
|
|
DATA_PATH = os.path.dirname(__file__) + "/data.csv"
|
|
|
|
df = pl.read_csv(DATA_PATH)
|
|
|
|
plt.scatter(x="Time (s)", y="Absolute acceleration (m/s^2)", data=df)
|
|
plt.show()
|
|
|
|
start = 25
|
|
end = 125
|
|
|
|
df = df.filter((pl.col("Time (s)") >= start) & (pl.col("Time (s)") <= end))
|
|
|
|
t = df["Time (s)"].to_numpy()
|
|
a = df["Absolute acceleration (m/s^2)"].to_numpy()
|
|
|
|
|
|
plt.scatter(x=t, y=a)
|
|
plt.show()
|
|
|
|
|
|
# f = scipy.interpolate.interp1d(t, a, fill_value="extrapolate")
|
|
|
|
# N = len(df)
|
|
|
|
|
|
# plt.plot(f)
|
|
# plt.show()
|
|
|
|
# dt = []
|
|
|
|
# for i in range(len(df)-1):
|
|
# dt.append(df["Time (s)"][i+1] - df["Time (s)"][i])
|
|
|
|
# plt.plot(dt)
|
|
# plt.show()
|
|
|
|
# define Fourier coefficients
|
|
N = len(df)
|
|
k = N // 2 + np.arange(N)
|
|
|
|
# df_ft = nfft.nfft(t, a-np.mean(df["Absolute acceleration (m/s^2)"].to_numpy()))
|
|
# spectre = np.abs(df_ft) * 2 / N
|
|
# freq = np.arange(N) / (end-start)
|
|
|
|
# amoy = np.mean(a)
|
|
# tfd = np.fft.fft(a - amoy)
|
|
# N = len(a)
|
|
# spectre = np.abs(tfd) * 2 / N
|
|
# freq = np.arange(N) / (end-start)
|
|
|
|
# # print(df_ft)
|
|
# plt.plot(freq, spectre)
|
|
# plt.show()
|
|
|
|
f = scipy.interpolate.interp1d(t, a, fill_value="extrapolate")
|
|
|
|
N = len(df)
|
|
|
|
# I made a bigger domain
|
|
x = np.linspace(start, end, N)
|
|
|
|
y = f(x)
|
|
|
|
plt.plot(x, y)
|
|
plt.show()
|
|
|
|
xf = scipy.fftpack.fftshift(scipy.fftpack.fftfreq(len(x), np.diff(x)[0]))
|
|
yf = scipy.fftpack.ifft(y)
|
|
|
|
plt.figure()
|
|
plt.plot(scipy.fftpack.fftshift(xf), np.abs(yf))
|
|
# plt.xlim(-30, 30)
|
|
plt.show()
|