読者です 読者をやめる 読者になる 読者になる

マイクロストリップ線路のインピーダンス

Ruby

アンテナの話。
ヘリカルアンテナの製作で、VSWR=5とかいう電波が出ないアンテナを作ってしまった。しかたないので急遽テーパマッチングをすることになったのだけど、

誘電体の厚さ: b
マイクロストリップ線路のインピーダンス: z

これがすでに固定で、

ストリップ線路の幅: a

を求めなきゃいけないことに、今日気づくってどうよ。
プログラム作ったけど、軽くあしらわれて悲しくなったのではっつける。(ところで、「はっつける」って方言かな?)

とりあえず、求めるプログラム

#
# anntena.rb
#
# アンテナ実験用プログラム
#

# z impedance
# a width
# b distance
# m margin

def ms_impedance(a,b)
   #a_d = ((a + t) / (Math::PI * (Math.log(2*b/t) + 1)))
   #60 * Math.log((8*b/a_d) - 0.358 + 1 / (((0.931*b)/a_d) + 0.736))
   60 * Math.log(8*b/a - 0.358 + 1/(0.931*b/a + 0.736))
end

# 二分検索でaを求める
def search_a(z, b, m, upper, lower)
   upper = upper * 1.0
   lower = lower * 1.0
   mid = 0
   loop do
      mid = (upper + lower)/2
      sz = ms_impedance(mid,b)
      if (z.abs - sz.abs).abs < z*m
         break
      elsif (z.abs - sz.abs) > 0
         upper = mid
      else
         lower = mid
      end
   end
   [mid, ms_impedance(mid,b)]
end

def search(zs, bs, m, upper, lower)
   zs.zip(bs).map do |p|
      search_a(p[0], p[1], m, upper, lower)
   end
end

実行結果

irb(main):076:0> require 'pp'
=> true
irb(main):078:0> pp search(
  (0..(150/5)).to_a.map{|i| i*5}.map {|i| 50.0*Math.exp(i * Math.log(130.0/50)/150.0)},
  (0..(150/5)).to_a.map{|i| i*5}.map {|i| ((42-4)/150.0 * i + 4)/1000.0},
  0.00001,
  1, 0)
[[0.0203747749328613, 49.9999826113492],
 [0.0256376266479492, 51.6180687417226],
 [0.0303792953491211, 53.2881741650265],
 [0.0346260070800781, 55.0136245748933],
 [0.0384063720703125, 56.7937867873469],
 [0.0417451858520508, 58.6313848473834],
 [0.0446662902832031, 60.5289147549004],
 [0.0471935272216797, 62.4880156564918],
 [0.0493497848510742, 64.5104806457909],
 [0.0511569976806641, 66.5982559146418],
 [0.0526361465454102, 68.7534536200964],
 [0.0538063049316406, 70.9791508469187],
 [0.0546894073486328, 73.2755389172421],
 [0.0553016662597656, 75.646944593862],
 [0.0556621551513672, 78.0948653711902],
 [0.0557880401611328, 80.6218789509844],
 [0.055694580078125, 83.2317242356581],
 [0.0553989410400391, 85.9261174412568],
 [0.0549182891845703, 88.7062607196862],
 [0.0542659759521484, 91.5762587757291],
 [0.0534553527832031, 94.5399283765336],
 [0.0524997711181641, 97.6007886010705],
 [0.0514163970947266, 100.758191977108],
 [0.0502128601074219, 104.020498705481],
 [0.0489063262939453, 107.386126267415],
 [0.0475063323974609, 110.86091326649],
 [0.0460243225097656, 114.448472803962],
 [0.0444698333740234, 118.154386276427],
 [0.0428581237792969, 121.976831926568],
 [0.0411949157714844, 125.925369876605],
 [0.0394935607910156, 129.999472479289]]
=> nil