# gelijkrichter.py - generator van de windturbine met zes diodes: welke gelijkspanning, welke rimpel?
import numpy as np

P_POOL = 8          # poolparen (16 magneetpolen)
K_E = 0.55          # emk: lijnspanning (effectief, V) per tpm, rekenwaarde


def fasen(t, n):
    """De drie fasespanningen (V) van de generator op tijdstip t (s) bij n tpm."""
    f = P_POOL * n / 60
    amp = K_E * n / np.sqrt(3) * np.sqrt(2)              # amplitude van één fase
    return np.array([amp * np.cos(2 * np.pi * f * t - k * 2 * np.pi / 3) for k in range(3)])


def brug(t, n):
    """Ideale zespulsbrug: de hoogste fase min de laagste (diodes zonder spanningsval)."""
    u = fasen(t, n)
    return u.max(axis=0) - u.min(axis=0)


print(" tpm   f (Hz)  U_lijn  U_dc gem  rimpel  f_rimpel (Hz)")
for n in (80, 120, 163, 200, 250, 300):
    f = P_POOL * n / 60
    t = np.linspace(0, 1 / f, 6000, endpoint=False)    # één periode
    u = brug(t, n)
    print(f"{n:4d} {f:7.1f} {K_E * n:8.1f} {u.mean():8.1f} {u.max() - u.min():7.1f} {6 * f:9.0f}")
print(f"U_dc gem / U_lijn = {u.mean() / (K_E * 300):.4f}   (theorie 3·√2/π = {3 * np.sqrt(2) / np.pi:.4f})")
