# -*- coding: utf-8 -*-
"""
Created on Fri Sep  5 16:02:04 2025

@author: AKourgli
"""

import numpy as np
import matplotlib.pyplot as plt


# -----------------------------
# 1. Calcul du SWR (impédance antenne vs ligne 50 Ω)
# -----------------------------
freq = np.linspace(200, 400, 500)  # MHz
f0 = 300  # MHz (fréquence de résonance)
Rr = 73   # Ω (résistance de rayonnement)
X = 2*(freq - f0)  # partie réactive fictive

Z0 = 50  # ligne 50 ohms
Z = Rr + 1j*X
Gamma = (Z - Z0) / (Z + Z0)
SWR = (1 + np.abs(Gamma)) / (1 - np.abs(Gamma))

plt.figure(1)
plt.plot(freq, SWR, 'b')
plt.title("SWR vs fréquence (dipôle λ/2)")
plt.xlabel("Fréquence (MHz)")
plt.ylabel("SWR")
plt.ylim(1, 5)
plt.grid(True)

# -----------------------------
# 2. Diagramme de rayonnement d’un dipôle λ/2
# -----------------------------
theta = np.linspace(1e-3, np.pi-1e-3, 500)
F = np.abs(np.cos((np.pi/2) * np.cos(theta)) / np.sin(theta))
F_norm = F / np.max(F)

plt.figure()
ax = plt.subplot(111, polar=True)
ax.plot(theta, F_norm, 'r')
ax.set_title("Diagramme de rayonnement d’un dipôle λ/2")
plt.show(block=True)


# -----------------------------
# 3. Gain et pertes de polarisation
# -----------------------------
angles = [0, 30, 45, 90]  # degrés
losses = [-20*np.log10(np.cos(np.deg2rad(a))) if a < 90 else np.inf for a in angles]

for a, l in zip(angles, losses):
    if np.isinf(l):
        print(f"Perte de polarisation à {a}° : Signal nul (∞ dB)")
    else:
        print(f"Perte de polarisation à {a}° : {l:.2f} dB")

# Gain dipôle demi-onde
G_dipole = 2.15  # dBi théorique
print(f"Gain théorique dipôle λ/2 : {G_dipole} dBi")
