Skip to content

Instantly share code, notes, and snippets.

@sewera
Last active April 24, 2020 11:22
Show Gist options
  • Save sewera/00209cff06119590dfc5c63d61de8af0 to your computer and use it in GitHub Desktop.
Save sewera/00209cff06119590dfc5c63d61de8af0 to your computer and use it in GitHub Desktop.
Skrypt do tworzenia wykresów charakterystyki kierunkowej anteny w układzie polarnym
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import rcParams
rcParams['font.family'] = 'serif'
rcParams['font.serif'] = ['Source Serif Pro']
rcParams['font.weight'] = 'regular'
rcParams['axes.titlepad'] = 18.0
def F(theta: float, k: float, l: float) -> float:
"""Funkcja obliczająca wartość charakterystyki kierunkowej
dla podanej thety.
:returns: obliczona wartość F(theta) -> float
"""
licznik = np.cos((k*l*np.cos(theta))/2) - np.cos((k*l)/2)
mianownik = np.sin(theta)
return np.abs(licznik/mianownik)
def narysuj_char_pole_elektryczne(lmbd: float, h: float) -> None:
"""Metoda rysujaca charakterystykę kierunkową
na podstawie wzoru 4.18 ze strony 18 instrukcji
do ćwiczenia P4.
Dla E: theta należy do (-π, π),
"""
theta = np.arange(-np.pi, np.pi, 0.005)
_k = (2*np.pi)/(lmbd)
_l = 2*h
f_arr = [F(_t, _k, _l) for _t in theta]
f_arr_max = max(f_arr)
ax = plt.subplot(polar=True, label='Pole elektryczne')
ax.plot(theta, f_arr/f_arr_max) # Znormalizowana do wartości max.
ax.plot([0, np.pi], [0.5, 0.5], 'r-') # Kierunek wskazywany przez antenę
# Formatowanie wykresu, żeby był od -180 do 180st
ax.set_theta_zero_location('N')
ax.set_theta_direction('clockwise')
ax.set_thetamin(-180)
ax.set_thetamax(180)
ax.set_xticks([-5/6*np.pi + _t/6*np.pi for _t in range(12)])
plt.xlabel(r'$\theta$')
title = plt.title('Charakterystyka kierunkowa anteny\n'
'w płaszczyźnie wektora pola elektrycznego')
plt.savefig('pole_elektryczne.pdf',
dpi=300,
format='pdf',
bbox_extra_artists=(title,),
bbox_inches='tight')
plt.savefig('pole_elektryczne.png',
dpi=300,
format='png',
bbox_extra_artists=(title,),
bbox_inches='tight')
def narysuj_char_pole_magnetyczne(lmbd: float, h: float) -> None:
"""Metoda rysujaca charakterystykę kierunkową
na podstawie wzoru 4.18 ze strony 18 instrukcji
do ćwiczenia P4.
Dla H: theta = π/2, rysujemy dla phi należącego do (0, 2π).
Z racji że F jest określone dla theta, niezależnie od phi
F będzie miało jedną wartość, wynoszącą F(π/2), więc wyjdzie
okrąg.
"""
phi = np.arange(0, 2*np.pi, 0.005)
theta = np.pi/2
_k = (2*np.pi)/(lmbd)
_l = 2*h
_F = F(theta, _k, _l)
f_arr = np.full(phi.shape, _F)
f_arr_max = max(f_arr)
ax = plt.subplot(polar=True, label='Pole magnetyczne')
ax.plot(phi, f_arr/f_arr_max) # Znormalizowana do wartości max.
# Formatowanie wykresu, żeby był od -180 do 180st
ax.set_theta_zero_location('E')
ax.set_theta_direction('anticlockwise')
ax.set_thetamin(0)
ax.set_thetamax(360)
ax.set_xticks([_t/6*np.pi for _t in range(12)])
plt.xlabel(r'$\phi$')
title = plt.title('Charakterystyka kierunkowa anteny\n'
'w płaszczyźnie wektora pola magnetycznego')
plt.savefig('pole_magnetyczne.pdf',
dpi=300,
format='pdf',
bbox_extra_artists=(title,),
bbox_inches='tight')
plt.savefig('pole_magnetyczne.png',
dpi=300,
format='png',
bbox_extra_artists=(title,),
bbox_inches='tight')
if __name__ == "__main__":
lmbd = float(input('Podaj lambdę w metrach (np. 0.222222): '))
h = float(input('Podaj wysokość w metrach (np. 0.2): '))
narysuj_char_pole_elektryczne(lmbd, h)
narysuj_char_pole_magnetyczne(lmbd, h)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment