Last active
April 24, 2020 11:22
-
-
Save sewera/00209cff06119590dfc5c63d61de8af0 to your computer and use it in GitHub Desktop.
Skrypt do tworzenia wykresów charakterystyki kierunkowej anteny w układzie polarnym
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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