はじめに
LTSpiceで得られたデータをgnuplotでepsにするための方法についてのメモ書きです.
グラフへのデータの追加(注釈とか)はLTSpiceの画面上でも行えますが,イマイチ使い勝手がよくありません.
そこで,gnuplotです.スクリプトを書くことで自由度の高い表現が可能です.
シミュレーションデータのエクスポート
- グラフウインドウにフォーカスされている状態でメニューバーのFile-exportをクリック.
- FormatをPolar:(dB,deg)からCartesian:re,imに変更
FormatがPolarの状態でエクスポートすると,文字化けしてしまって良くないです.Cartesianだと正常に書き出されます. 文字コードはSJISで開くことができました.
rubyスクリプトで変換
文字化け回避のために複素数で出力したので,Bode線図を書くにはgainとphaseに再変換しないといけません.
再変換のためのスクリプトをこさえました.
#実数 虚数表記のBode線図データをgnuplotで表示できる形式に変換する #出力形式 #freq[Hz]'\t'gain[dB]'\t'phase[degree](wrap around +- 90) include Math #変換対象のファイル名を指定 #出力はstdoutなので適当にリダイレクトされたい if(ARGV.length != 1) then print "input target file name" exit end File::open(ARGV[0]){ |f| line = f.gets #最初の一行を読み飛ばす while line = f.gets ele = line.split("\t") vect = ele[1].split(",") re = vect[0].to_f im = vect[1].to_f gain = sqrt(re*re + im*im) phase = atan(im/re) * 180 / Math::PI dBGain = 20 * log10(gain) print ele[0].to_f/1 #周波数の桁をいじるときはここで print "\t" print dBGain print "\t" print phase print "\n" end }
スクリプトのファイル名を"LTS2gp.rb"とすれば,コマンドラインでruby LTS2gp.rb hoge > piyoでOK
いざグラフ化
rubyスクリプトに次いでgnuplotのスクリプトを書きます.
reset set terminal png set output "DUMP.png" #出力ファイル名 set format x "%4.0e" set xrange [1000:1000000] set yrange [-160:20] set ytics 20 set xtics set logscale x #Bode線図だから対数プロット set mxtics 10 #1decadeの間が10等分される set grid mxtics ytics xtics #mxtics指定でx軸小メモリでもgridが引かれる set title "Frequency response of designed LPF" set xlabel "frequency [Hz]" set ylabel "gain [dB]" plot "dump.csv" u 1:2 w l axis x1y1 title "" #legendを消した状態でプロット set term win set output rep
これでやっとこさ以下のグラフが得られます.PNGだとあんまり意味が無いのですが,epsで出力すればtexで組版する際に便利です.
ちなみにLTSpiceのデフォルトのグラフは以下の通り
...え?LTSpiceの方がカッコいいって?