Visual C#(C_sharp)用のグラフプロットライブラリScottPlotを使う(2) 2ポートTouchstoneフォーマットのSパラメータを読み込んで高周波設計で用いられるスミスチャートとdB表示プロットを描く。拡大縮小移動も簡単。
今回はSパラメータの表示。dB表示は簡単だが、スミスチャートはどうする?と思ったらもうScottPlotに用意されていた。
https://scottplot.net/cookbook/5.0/SmithChart/
これなら簡単だ。ソースコードはこんな感じで(Touchstone読むところは面倒なので手抜き…)。
|
namespace PlotSmith
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
radioButton1.Checked = true;
var axis = formsPlot1.Plot.Axes;
axis.Bottom.Label.Text = "Frequency[MHz]";
axis.Bottom.Label.FontSize = 21;
axis.Bottom.TickLabelStyle.FontSize = 21;
axis.Left.Label.Text = "S parameter[dB]";
axis.Left.Label.FontSize = 21;
axis.Left.TickLabelStyle.FontSize = 21;
}
private void button1_Click(object sender, EventArgs e)
{
List<double> freq = new List<double>();
List<List<double>> spara = new List<List<double>>();
StreamReader sr = new StreamReader("dea165550bt-2322a1-h.s2p");
while (!sr.EndOfStream)
{
string? line = sr.ReadLine();
if (line != null && line[0] != '!' && line[0] != '#')
{
string[] data = line.Split(' ');
freq.Add(double.Parse(data[0]));
List<double> list = new List<double>();
list.Add(double.Parse(data[1]));
list.Add(double.Parse(data[2]));
list.Add(double.Parse(data[3]));
list.Add(double.Parse(data[4]));
spara.Add(list);
}
}
int n = spara.Count;
if (radioButton1.Checked)
{
formsPlot1.Plot.Clear();
var fr = new double[n];
var s11 = new double[n];
var s21 = new double[n];
for (int i = 0; i < n; i++)
{
fr[i] = freq[i];
s11[i] = spara[i][0];
s21[i] = spara[i][2];
}
var s11plot = formsPlot1.Plot.Add.ScatterLine(fr, s11);
s11plot.LegendText = "S11";
s11plot.LineWidth = 5;
var s21plot = formsPlot1.Plot.Add.ScatterLine(fr, s21);
s21plot.LegendText = "S21";
s21plot.LineWidth = 5;
formsPlot1.Plot.Legend.FontSize = 21;
formsPlot1.Plot.ShowLegend();
formsPlot1.Plot.Axes.AutoScale();
formsPlot1.Refresh();
}
if (radioButton2.Checked)
{
formsPlot1.Plot.Clear();
var smith = formsPlot1.Plot.Add.SmithChartAxis();
var s11re = new double[n];
var s11im = new double[n];
for (int i = 0;i < n; i++)
{
var db = spara[i][0];
var phase = spara[i][1];
var mag = Math.Pow(10.0, db / 20.0);
s11re[i] = mag * Math.Cos(phase * Math.PI / 180.0);
s11im[i] = mag * Math.Sin(phase * Math.PI / 180.0);
}
var sline = formsPlot1.Plot.Add.ScatterLine(s11re, s11im);
sline.LineWidth = 5;
formsPlot1.Plot.Axes.AutoScale();
formsPlot1.Refresh();
}
}
}
}
|
実行結果の動画。dBとスミスチャートを切り替えられるようにした。
« 高周波・RFニュース 2025年2月27日 Rogersがミリ波レーダ用基板の新製品発表、QorvoがXバンドレーダ解説、Silicon Labsがスマートホーム用新SoC発表、STMがGNNS受信機を発表、DesignCon2025でのBroadcomの発表内容、Qualcommが産業用にDragonwing発表 | トップページ | エッホエッホと走るフクロウの赤ちゃんがいらすとやのイラストとして公開されたので、それを使ってUnityで動かしてみた動画。もうちょっと動きに工夫がいるな。 »
「パソコン・インターネット」カテゴリの記事
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/3/1-3/8(2026.03.08)
- MATLAB OnlineでAntenna ToolboxのantennaDesigner機能を使って様々なアンテナ(ホーン、フラクタル(スノーフレーク)パッチ、Vivaldi、誘電体共振器)のSパラメータ、指向性を計算する。(2026.03.11)
- MATLAB OnlineでAntenna ToolboxのantennaArrayDesigner機能を使って一行もスクリプトを書かずにパッチアンテナアレイを設計してSパラメータ、指向性などを計算する。1素子とちがって計算にはかなり時間がかかるのでとりあえず2素子のアレイで。(2026.03.09)
- MATLAB OnlineでAntenna ToolboxのantennaDesigner機能を使って一行もスクリプトを書かずにH型パッチアンテナ(Rogers基板)設計、Sパラメータ、インピーダンス、指向性などを計算する。最適化も実施できる。電磁界シミュレーションソフトのようだ。メッシュも確認できる。(2026.03.06)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)のモデルをGemini 3 ProからGemini 3.1 Proにして作り直したものと3で作ったものを3.1で改善してもらったものを作る。どちらも結構いい出来だが、改善したほうがまとめられていてよさそう。(2026.03.05)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2026年3月11日 STMicroelectronicsが新UWBチップ発表、Ericssonが主導のVICTOR6G発足、Silicon LabsのBluetooth SoCがBANFのタイヤモニタリングシステムに採用、京セラが新しい差動クロック水晶発振器を発表など(2026.03.11)
- 高周波・RFニュース 2026年3月10日 IEEE Microwave MagazineはHF-VHF-UHF特集、Pythonの高周波ライブラリscikit-rfがv1.11.0に、Samsung Galaxy S26 Ultra分解動画、フジクラが4000心SWR/WTC製品化、Perasoの60GHzモジュールが軍用ドローン識別に採用など(2026.03.10)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/3/1-3/8(2026.03.08)
- MATLAB OnlineでAntenna ToolboxのantennaDesigner機能を使って様々なアンテナ(ホーン、フラクタル(スノーフレーク)パッチ、Vivaldi、誘電体共振器)のSパラメータ、指向性を計算する。(2026.03.11)
- MATLAB OnlineでAntenna ToolboxのantennaArrayDesigner機能を使って一行もスクリプトを書かずにパッチアンテナアレイを設計してSパラメータ、指向性などを計算する。1素子とちがって計算にはかなり時間がかかるのでとりあえず2素子のアレイで。(2026.03.09)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2026年3月11日 STMicroelectronicsが新UWBチップ発表、Ericssonが主導のVICTOR6G発足、Silicon LabsのBluetooth SoCがBANFのタイヤモニタリングシステムに採用、京セラが新しい差動クロック水晶発振器を発表など(2026.03.11)
- 高周波・RFニュース 2026年3月10日 IEEE Microwave MagazineはHF-VHF-UHF特集、Pythonの高周波ライブラリscikit-rfがv1.11.0に、Samsung Galaxy S26 Ultra分解動画、フジクラが4000心SWR/WTC製品化、Perasoの60GHzモジュールが軍用ドローン識別に採用など(2026.03.10)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/3/1-3/8(2026.03.08)
- MATLAB OnlineでAntenna ToolboxのantennaDesigner機能を使って様々なアンテナ(ホーン、フラクタル(スノーフレーク)パッチ、Vivaldi、誘電体共振器)のSパラメータ、指向性を計算する。(2026.03.11)
- MATLAB OnlineでAntenna ToolboxのantennaArrayDesigner機能を使って一行もスクリプトを書かずにパッチアンテナアレイを設計してSパラメータ、指向性などを計算する。1素子とちがって計算にはかなり時間がかかるのでとりあえず2素子のアレイで。(2026.03.09)
« 高周波・RFニュース 2025年2月27日 Rogersがミリ波レーダ用基板の新製品発表、QorvoがXバンドレーダ解説、Silicon Labsがスマートホーム用新SoC発表、STMがGNNS受信機を発表、DesignCon2025でのBroadcomの発表内容、Qualcommが産業用にDragonwing発表 | トップページ | エッホエッホと走るフクロウの赤ちゃんがいらすとやのイラストとして公開されたので、それを使ってUnityで動かしてみた動画。もうちょっと動きに工夫がいるな。 »


コメント