ネットアナ上でsmithを見るとき、マーカーを動かして周波数を確認したりできるが、pyhtonで描画すると、絵は描画されるものの目的の周波数がどこにあるのかわからない。そこでマーカーを表示するようにしたかったが、どうもわからない。
plot_s_smith だけではできないようで、座標データから散布プロットで特定データを重ねてプロットすることで、見かけ上のマーカーにできるようだ。Networkからfrequencyを取り出し目的の周波数のindexを求める。そしてNetworkのsの虚部と実部のindexから値を取得する。実部がX座標、虚部がY座標となる。
import numpy as np
import skrf as rf
from matplotlib import pyplot as plt
import matplotlib
font = {"family" : "IPAGothic"}; ## for Mac
matplotlib.rc('font', **font)
marker_f=915e6;
fig1=plt.figure(figsize=(6,6),tight_layout=True);
ntwk=rf.Network('cable.s1p');
ntwk.frequency.unit = 'Mhz';
ax=plt.subplot(111);
ntwk1=ntwk['0.85-1.0ghz']
ntwk1.plot_s_smith(m=0,n=0,chart_type='zy',draw_labels=True,label='8.2nH');
freq=ntwk.f;
marker_f_idx = np.where(freq>marker_f)[0][0];
marker_x = ntwk.s.real[marker_f_idx,0,0];
marker_y = ntwk.s.imag[marker_f_idx,0,0];
plt.scatter(marker_x,marker_y,marker='v',color='k');アドミッタンス円は、chart_type で設定することができる。'y'でアドミッタンス円のみ、'z'でインピーダンス円のみ、'zy','yz'で両方描くが順番によってどちらが濃く表示されるかが決まる。薄過ぎてよく分かりませんね
マーカーは表示してはいるが、これじゃ分かりにくいですね。。。markerの周波数をtitleに書かなきゃいけない、ふむ
---
Markerを3個にしてラベルをつけ、subplotで2個横に並べるようにして2つ目に値を書きます。さらに、vswr円の描画と、インピーダンス表示を50Ωにしてみましょう
marker_freq=[900e6,915e6,930e6];
fig1=plt.figure(figsize=(12,6),tight_layout=True);
ax=plt.subplot(121);
ntwk1=ntwk['0.85-1.0ghz']
rf.plotting.smith(draw_labels=True,ref_imm=50,chart_type='zy',draw_vswr=True);
ntwk1.plot_s_smith(m=0,n=0,label=ln[0],color='g');
freq=ntwk.f;
marker_f_idx=np.zeros(len(marker_freq),dtype=int);
marker_x=np.zeros(len(marker_freq));
marker_y=np.zeros(len(marker_freq));
for i,f in enumerate(marker_freq):
marker_f_idx[i] = np.where(freq>f)[0][0];
marker_x[i] = ntwk.s.real[marker_f_idx[i],0,0];
marker_y[i] = ntwk.s.imag[marker_f_idx[i],0,0];
plt.scatter(marker_x[i],marker_y[i],marker='v',color='gray');
plt.annotate(f'M{i}',(marker_x[i],marker_y[i]),color='r');subplot(122)には、下記
ax2=plt.subplot(122);
for i in range(len(marker_freq)):
frq=freq[marker_f_idx[i]]/1e6;
re=marker_x[i];
im=marker_y[i];
ax2.text(0.2,0.2+0.05*i,f'M{i} {frq:.3f}MHz {re:.6f}{im:+.6f}j');なんかテーブルで描けるようですが、よく分かりませんね。


コメントを追加