Sパラメータの特性インピーダンスを変換するツールを作成した。
入力ファイルから1行ずつ読み込んで変換し、出力ファイルに書き込むだけの簡単なプログラム。
ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
namespace S_ParameterConverter { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string srcFileName, destFileName; private void button1_Click(object sender, EventArgs e) { openFileDialog1.Filter = "s2pファイル(*.s2p)|*.s2p"; openFileDialog1.Title = "変換するファイル名を選択してね."; if (openFileDialog1.ShowDialog() == DialogResult.OK) srcFileName = openFileDialog1.FileName; label1.Text = Path.GetFileName(srcFileName); } private void button2_Click(object sender, EventArgs e) { saveFileDialog1.Filter = "s2pファイル(*.s2p)|*.s2p"; saveFileDialog1.Title = "出力するファイル名を選択してね."; if (saveFileDialog1.ShowDialog() == DialogResult.OK) destFileName = saveFileDialog1.FileName; label2.Text = Path.GetFileName(destFileName); } private void button3_Click(object sender, EventArgs e) { double charaImp = double.Parse(textBox1.Text); StreamReader sr = new StreamReader(srcFileName); StreamWriter sw = new StreamWriter(destFileName); sw.WriteLine(sr.ReadLine()); //1行目コピー string line = sr.ReadLine(); //2行目インピーダンス修正 sw.WriteLine(line.Replace("50", textBox1.Text)); while ((line = sr.ReadLine()) != null) { Complex s11, s21, s12, s22, z11, z21, z12, z22; string[] org_spara = Regex.Split(line, @"\s{2,}"); s11 = new Complex(double.Parse(org_spara[1]), double.Parse(org_spara[2])); s21 = new Complex(double.Parse(org_spara[3]), double.Parse(org_spara[4])); s12 = new Complex(double.Parse(org_spara[5]), double.Parse(org_spara[6])); s22 = new Complex(double.Parse(org_spara[7]), double.Parse(org_spara[8])); Complex denom = (1 - s11) * (1 - s22) - s12 * s21; z11 = 50.0 * ((1 + s11) * (1 - s22) + s12 * s21) / denom; z12 = 50.0 * 2 * s12 / denom; z21 = 50.0 * 2 * s21 / denom; z22 = 50.0 * ((1 - s11) * (1 + s22) + s12 * s21) / denom; denom = (z11 + charaImp) * (z22 + charaImp) - z12 * z21; s11 = ((z11 - charaImp) * (z22 + charaImp) - z12 * z21) / denom; s12 = 2 * z12 * charaImp / denom; s21 = 2 * z21 * charaImp / denom; s22 = ((z11 + charaImp) * (z22 - charaImp) - z12 * z21) / denom; sw.WriteLine(org_spara[0] + " " + s11.Real.ToString("F7") + " " + s11.Imaginary.ToString("F7") + " " + s21.Real.ToString("F7") + " " + s21.Imaginary.ToString("F7") + " " + s12.Real.ToString("F7") + " " + s12.Imaginary.ToString("F7") + " " + s22.Real.ToString("F7") + " " + s22.Imaginary.ToString("F7")); } sr.Close(); sw.Close(); } } } |
C#では、複素数の演算ができるので結構簡単。
変換前のファイルをQcusで表示すると..