# uitslinger.py - eigenfrequentie en demping van de mast uit een uitslingerproef
import math
import numpy as np

with open("mast_uitslinger.csv") as f:
    next(f)                                                   # kopregel overslaan
    data = np.array([[float(v) for v in regel.split(",")] for regel in f])
t, x = data[:, 0], data[:, 1]                                 # tijd (s), uitwijking mastkop (mm)

# toppen: een meting die de grootste is van haar omgeving (4 metingen links en rechts)
toppen = [i for i in range(4, len(x) - 4) if x[i] == x[i - 4:i + 5].max() and x[i] > 0]
tt, xt = t[toppen], x[toppen]

T = (tt[-1] - tt[0]) / (len(tt) - 1)                          # gemiddelde periode
helling, _ = np.polyfit(np.arange(len(xt)), np.log(xt), 1)    # ln(top) daalt lineair per periode
delta = -helling                                              # logaritmisch decrement
zeta = delta / math.sqrt(4 * math.pi**2 + delta**2)

print(f"{len(tt)} toppen, periode {T:.3f} s, eigenfrequentie {1 / T:.3f} Hz")
print(f"logaritmisch decrement {delta:.4f}, demping zeta = {100 * zeta:.2f} %, Q = {1 / (2 * zeta):.0f}")
print(f"de amplitude halveert na {math.log(2) / delta:.0f} perioden ({math.log(2) / delta * T:.0f} s)")
