还是认真做匹配看看 .,.. 嗯 这是理论侧
首先完善了一下前面的程序 (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}} |