还是认真做匹配看看 .,.. 嗯 这是理论侧
首先完善了一下前面的程序 (6.26: 发现k0_h计算有误 已更新)
import scipy.integrate
import numpy
from matplotlib import pyplot
z0=50
wa=200
epsilon_eff=1.3
compress=0.2 # h/l
ratio_from=0
ratio_to=0.5
ratio_show=(ratio_from+ratio_to)/2
match=None
if True:
def match(z):
#@outport: C/parallel, @antenna: L/series, L=5.71213169610197e-09, C=2.113795485039202e-11
L=5.71213169610197e-09
C=2.113795485039202e-11
f=434.e6
w=2.j*numpy.pi*f
z=z+w*L
z=1/(w*C+1/z)
return z
#############################################
ratio=numpy.linspace(ratio_from+0.001, ratio_to-0.001, 1001)
k1_l=ratio*2*numpy.pi
# old wrong version : k0_h=k1_l*epsilon_eff*compress
# new right version : k1*l=k0*sqrt(epsilon_eff)*l -> k0*h=k1*l/sqrt(epsilon_eff)/l*h=k1_l/sqrt(epsilon_eff)*compress
k0_h=k1_l/numpy.sqrt(epsilon_eff)*compress
f=lambda theta, k1l, k0h: (((numpy.cos(k0h*numpy.cos(theta))-numpy.cos(k1l))/(((k0h*numpy.cos(theta))**2)-(k1l**2)))**2)*(numpy.sin(theta)**3)
r_sigma=numpy.vectorize(
lambda k1l, k0h: 60*((k1l*k0h)**2)*scipy.integrate.quad(f, 0, numpy.pi, args=(k1l, k0h))[0],
otypes=[float]
)(k1_l, k0_h)
r1_l=4*k1_l*r_sigma/(2*k1_l-numpy.sin(2*k1_l))
beta_a_l=r1_l/2/wa
t=wa/(numpy.cosh(2*beta_a_l)-numpy.cos(2*k1_l))
z=((numpy.sinh(2*beta_a_l)-beta_a_l/k1_l*numpy.sin(2*k1_l))-1j*(numpy.sin(2*k1_l)+beta_a_l/k1_l*numpy.sinh(2*beta_a_l)))*t
# with matching network
if match:
z=match(z)
print('At {}λ, RΣ={}, Z={}'.format(
ratio_show,
numpy.interp(ratio_show, ratio, r_sigma),
numpy.interp(ratio_show, ratio, z)))
fig, ax1=pyplot.subplots()
fig.subplots_adjust(right=0.6)
ax1.set_title('Input impedance of antenna')
ax1.set_xlabel('l/λ')
ax1.set_ylabel('Impedance (Ω)', color='black')
ax1.set_xlim(ratio_from, ratio_to)
ax1.set_xticks(numpy.linspace(ratio_from, ratio_to, 5))
ax1.grid()
plt1a=ax1.plot(ratio, numpy.real(z), linewidth=1, color='blue', label='Real')
plt1b=ax1.plot(ratio, numpy.imag(z), linewidth=1, color='red', label='Imag')
ax2=ax1.twinx()
ax2.set_ylabel('Phase (°)', color='orange')
ax2.set_ylim(-90, 90)
ax2.grid()
plt2=ax2.plot(ratio, numpy.degrees(numpy.angle(z)), linewidth=1, color='orange', label='Phase')
gamma=(z-z0)/(z+z0)
vswr=(1.+numpy.abs(gamma))/(1.-numpy.abs(gamma))
ax3=ax1.twinx()
ax3.spines['right'].set_position(('outward', 60))
ax3.set_ylabel('VSWR', color='black')
ax3.set_ylim(1, 5)
ax3.grid()
plt3=ax3.plot(ratio, vswr, linewidth=1, color='black', label='VSWR')
ax4=ax1.twinx()
ax4.spines['right'].set_position(('outward', 120))
ax4.set_ylabel('RΣ', color='cyan')
plt4=ax4.plot(ratio, r_sigma, linewidth=1, color='cyan', label='RΣ')
plts = plt1a+plt1b+plt2+plt3+plt4
ax3.legend(plts, [t.get_label() for t in plts], loc='upper right')
pyplot.show()
在没有匹配之前 1/4λ处 阻抗非常的低 只有5欧左右
写了个程序来自动匹配 并且输出匹配后频率和匹配网络误差对匹配的影响
import numpy
from matplotlib import pyplot
import scipy.integrate
z0=50.
zl=(5.372731854378172-0.09190623230437875j)
freq=434.e6
tolerance=0.2
method=None
C_first=True
L=None
C=None
match=None
'''
method='Customized, @outport: C/parallel, @antenna: L/series'
C_first=True
L=5.53e-9
C=24.e-12
def match(z, f, l, c):
w=2j*numpy.pi*f
z=z+w*l
return 1/(w*c+1/z)
'''
#resolve L/C if not specified
zr=numpy.real(zl)
zj=numpy.imag(zl)
if not method:
w=2*numpy.pi*freq
zr=numpy.real(zl)
zj=numpy.imag(zl)
if (zr<z0):
if C_first:
method='@outport: C/parallel, @antenna: L/series'
L=(numpy.sqrt(zr/(z0-zr))*(z0-zr)-zj)/w
C=1/w/(z0*numpy.sqrt(zr/(z0-zr)))
def match(z, f, l, c):
w=2j*numpy.pi*f
z=z+w*l
return 1/(w*c+1/z)
else:
method='@outport: L/parallel, @antenna: C/series'
C=1/w/(zj+numpy.sqrt(zr*(z0-zr)))
L=z0*numpy.sqrt(zr/(z0-zr))/w
def match(z, f, l, c):
w=2j*numpy.pi*f
z=z+1/(w*c)
return 1/(1/(w*l)+1/z)
else:
if C_first:
method='@outport: C/series, @antenna: L/parallel'
C=1/w/(numpy.sqrt(z0*(zr**2+zj**2-z0*zr)/zr))
L=(z0*zj+zr*numpy.sqrt(z0*(zr**2+zj**2-z0*zr)/zr))/(zr-z0)/w
def match(z, f, l, c):
w=2j*numpy.pi*f
z=1/(1/z+1/(w*l))
return z+1/(w*c)
else:
method='@outport: L/series, @antenna: C/parallel'
C=1/w/((numpy.sqrt(z0*zr*(zj**2+zr**2-z0*zr))-z0*zj)/(zr-z0))
L=numpy.sqrt(z0*zr*(zj**2+zr**2-z0*zr))/zr/w
def match(z, f, l, c):
w=2j*numpy.pi*f
z=1/(1/z+w*c)
return z+w*l
w=2*numpy.pi*f
print ('{}, L={}, C={}'.format(method, L, C))
###########################
def show(z, x, x_label):
gamma=(z-z0)/(z+z0)
vswr=(1.+numpy.abs(gamma))/(1.-numpy.abs(gamma))
fig, ax1=pyplot.subplots()
fig.subplots_adjust(right=0.75)
ax1.set_title('Impedance of matched')
ax1.set_xlabel(x_label)
ax1.set_ylabel('Impedance (Ω)', color='blue')
ax1.grid()
plt1a=ax1.plot(x, numpy.real(z), linewidth=1, color='blue', label='Real')
plt1b=ax1.plot(x, numpy.imag(z), linewidth=1, color='red', label='Imag')
ax2=ax1.twinx()
ax2.set_ylabel('Phase (°)', color='orange')
ax2.set_ylim(-90, 90)
ax2.grid()
plt2=ax2.plot(x, numpy.degrees(numpy.angle(z)), linewidth=1, color='orange', label='Phase')
ax3=ax1.twinx()
ax3.spines['right'].set_position(('outward', 60))
ax3.set_ylabel('VSWR', color='black')
ax3.grid()
ax3.set_ylim(1, 3)
plt3=ax3.plot(x, vswr, linewidth=1, color='black', label='VSWR')
plts = plt1a+plt1b+plt2+plt3
ax3.legend(plts, [t.get_label() for t in plts], loc='upper right')
#########################
tol=numpy.linspace((1.-tolerance), (1.+tolerance), 200)
f=tol*freq
z=match(zl, f, L, C)
show(z, f, 'Freq (Hz)')
l=tol*L
z=match(zl, freq, l, C)
show(z, l, 'L (H)')
c=tol*C
z=match(zl, freq, L, c)
show(z, c, 'C (F)')
##################################
pyplot.show()
代入天线输入阻抗 计算出匹配电感5.7nH 电容21pF
再代入第一个程序看看效果 嗯 匹配上了
嗯 理论侧真好 ... 可是实践上 还有些问题要解决
巴伦很麻烦 尤其这个频段 做微带和传输线嫌大 做磁芯 手上没有好磁芯 本身弯折天线辐射效率就低 大多数能量感觉都浪费在磁芯耗损上了 但是不做平衡 背板就有不对称的问题
是不是可以找个偏离1/4λ的地方 使得正好匹配网络只需要一个元件 这个地方我感觉应该存在 下面试试看从理论上是否能找到
背板方面 暂时没有太大头绪 直接用应该没有问题 但有没有可能能优化 同相反射太复杂 用角铝做双反射结构有没有可能性
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |