50Ωではない終端インピーダンスにマッチングさせてみます。
結果がどうなるかわからんので、できるだけ自由度を増やすためにこんな感じで行きます。
こんな感じで75+75jΩを狙います。
import numpy as np import skrf as rf import matplotlib.pyplot as plt import scipy def Calc_Network(FIL1,C11,C21,L11,L12,L21,L22,gnd,port1,port2): cnx = [ [(port1, 0), (L11, 0), (C11, 0)], [(C11, 1), (L12, 0), (FIL1, 0)], [(FIL1, 1), (L21, 0), (C21, 0)], [(C21, 1), (L22, 0), (port2, 0)], [(gnd, 0), (L11, 1), (L12, 1), (L21, 1), (L22, 1)] ] cir = rf.Circuit(cnx) ntw = cir.network return ntw FIL1 = rf.Network('out.s2p') FIL1.name='FIL1' freq=FIL1.frequency tl_media = rf.DefinedGammaZ0(freq, z0=50) gnd = rf.Circuit.Ground(freq, name='gnd') port1 = rf.Circuit.Port(freq, name='port1', z0=75+75j) port2 = rf.Circuit.Port(freq, name='port2', z0=50) C11_def=9e-12 C21_def=9e-12 L11_def=100e-9 L12_def=25e-9 L21_def=25e-9 L22_def=100e-9 x0=(C11_def,C21_def,L11_def,L12_def,L21_def,L22_def) f_range_lower=314.9e6 f_range_upper=315.1e6 vswr_max=1.5 def matching_network(C11_val,C21_val,L11_val,L12_val,L21_val,L22_val): C11 = tl_media.capacitor(C11_val, name='C11') C21 = tl_media.capacitor(C21_val, name='C21') L11 = tl_media.inductor(L11_val, name='L11') L12 = tl_media.inductor(L12_val, name='L12') L21 = tl_media.inductor(L21_val, name='L21') L22 = tl_media.inductor(L22_val, name='L22') ntw=Calc_Network(FIL1,C11,C21,L11,L12,L21,L22,gnd,port1,port2) return ntw def get_err(x): ntw=matching_network(*x) irange=np.where((ntw.f>=f_range_lower)&(ntw.f<=f_range_upper)) vswr1=ntw.s_vswr[irange,0,0] vswr2=ntw.s_vswr[irange,1,1] tgt=np.ones_like(vswr1)*vswr_max eval1=vswr1-tgt eval2=vswr2-tgt err1=np.where(eval1<0,0,eval1) err2=np.where(eval2<0,0,eval2) return (np.sum(err1)+np.sum(err2)) res=scipy.optimize.fmin(get_err,x0) print(res) res=scipy.optimize.fmin(get_err,res) print(res) res=scipy.optimize.fmin(get_err,res) print(res) #ntw=matching_network(*x0) ntw=matching_network(*res) fig=plt.figure() ax1=fig.add_subplot(2,2,1) ntw.plot_s_smith(ax=ax1,m=0, n=0, lw=2) ax2_1=fig.add_subplot(2,2,2) ax2_2=ax2_1.twinx() ntw.plot_s_db(ax=ax2_1,m=1, n=0, lw=2, show_legend=False) ntw.plot_s_vswr(ax=ax2_2,m=0, n=0, lw=2, show_legend=False, color='orangered') ax2_2.set_ylim(1,6) handler1, label1 = ax2_1.get_legend_handles_labels() handler2, label2 = ax2_2.get_legend_handles_labels() ax2_1.legend(handler1 + handler2, label1 + label2, loc=2, borderaxespad=0.) ax3=fig.add_subplot(2,2,3) ntw.plot_s_db(ax=ax3,m=0, n=1, lw=2) ax4=fig.add_subplot(2,2,4) ntw.plot_s_smith(ax=ax4,m=1, n=1, lw=2) fig.tight_layout() plt.show()
で、こうなって、
Optimization terminated successfully.
Current function value: 157.968149
Iterations: 160
Function evaluations: 258
[1.06392215e-11 6.59865874e-12 8.94574966e-08 4.62103156e-08
2.47733446e-08 9.53137448e-08]
Optimization terminated successfully.
Current function value: 157.600254
Iterations: 122
Function evaluations: 205
[7.40327019e-12 6.61206826e-12 7.65055342e-08 4.20194397e-08
2.60987319e-08 1.18529212e-07]
Optimization terminated successfully.
Current function value: 157.600254
Iterations: 46
Function evaluations: 89
[7.40327019e-12 6.61206826e-12 7.65055342e-08 4.20194397e-08
2.60987319e-08 1.18529212e-07]
こうなる。フィルタの通過帯域はできているようですが、VSWRはイマイチ。はたしていいとこ来ているんでしょうか、、、?結果のNetworkを50Ω終端で見てみると、
確かにS11において、75+75jΩより虚部が小さめなところに集まっている状態なので、きっとうまくやってくれたってことでしょう。トポロジとして限界ってことなのか、そもそものデバイスが対称なので限界ってことなのか、、、まぁこんな無茶なリクエストにもそれなりに応えてくれたってことで、、、
もやっとするけど、こんなもんでしょ。
コメントをお書きください