📅  最后修改于: 2023-12-03 15:23:44.731000             🧑  作者: Mango
八木宇田天线,也称为八木天线或Yagi天线,是一种常见的定向天线,常用于无线通信和广播领域。它由日本无线电工程师八木秀次和他的同事土屋信贤于1926年发明。八木宇田天线结构简单,成本低廉,易于制造和安装,因此在业余爱好者和业界人士中广受欢迎。
八木宇田天线是以一根主导杆为中心,两侧分别固定若干个耦合单元(反射器和驱动器)的天线。通常情况下,耦合单元的数量和位置都是按照一定的公式计算出来的。在这种结构中,反射器和驱动器固定在主导杆上,而其他的固定点则是根据预设的频率和角度进行计算的。此外,八木宇田天线的特点是具有非常强的定向性能,可以选择性地传输和接收特定方向的信号。
八木宇田天线工作原理基于电磁波的辐射和反射原理。当电磁波穿过反射器时,会发生相位反转,形成一种折射跟踪效应。这种效应能够增强天线的定向性,即选择性地接收特定方向的信号。与其他类型的天线相比,八木宇田天线具有更高的增益和方向性,因此在许多无线通信和广播领域得到广泛应用。
# 八木宇田天线模拟
import numpy as np
def dipole(length, angle):
"""
生成一个长度为length,倾斜角度为angle的偶极子天线
"""
k = 2 * np.pi / wavelength
x = np.linspace(-1, 1, num=1000)
y = np.cos(k * length * np.sqrt(1 - x ** 2) * np.sin(angle)) / np.sqrt(1 - x ** 2)
return x, y
def reflector(length, spacing):
"""
生成一个长度为length,反射器间距为spacing的反射器天线
"""
k = 2 * np.pi / wavelength
x = np.linspace(-1, 1, num=1000)
y = np.sin(k * length / 2 * np.sqrt(1 - x ** 2))
t = np.zeros_like(x)
t[np.abs(x) <= spacing] = 1
y *= t
return x, y
def driver(length, spacing):
"""
生成一个长度为length,驱动器间距为spacing的驱动器天线
"""
k = 2 * np.pi / wavelength
x = np.linspace(-1, 1, num=1000)
t1 = np.sin(k * length / 2 * np.sqrt(1 - x ** 2))
t2 = np.cos(k * spacing / 2 * np.sqrt(1 - x ** 2))
y = t1 * t2
return x, y
# 参数设置
frequency = 30 * 10 ** 6 # 频率
wavelength = 3 * 10 ** 8 / frequency # 波长
num_elements = 10 # 元件数(反射器和驱动器)
element_spacing = 0.2 * wavelength # 元件间距离
# 天线构造
element_length = wavelength / 2 # 元件长度
main_rod = dipole(element_length, 0)
reflector = reflector(element_length, element_spacing)
driver = driver(element_length, element_spacing)
# 构造八木宇田天线
antenna = reflector
for i in range(num_elements):
if i % 2 == 0:
antenna = (antenna[0] + element_spacing, antenna[1])
antenna = np.concatenate([antenna, driver], axis=1)
else:
antenna = (antenna[0] + element_spacing, antenna[1])
antenna = np.concatenate([antenna, reflector], axis=1)
# 绘图
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(main_rod[0], main_rod[1], label="Main rod")
ax.plot(reflector[0], reflector[1], label="Reflector")
ax.plot(driver[0], driver[1], label="Driver")
ax.plot(antenna[0], antenna[1], label="Yagi antenna")
ax.set_xlim(-2, 2)
ax.set_ylim(-1.5, 1.5)
ax.legend()
plt.show()