はじめに

LTSpiceで得られたデータをgnuplotでepsにするための方法についてのメモ書きです.

グラフへのデータの追加(注釈とか)はLTSpiceの画面上でも行えますが,イマイチ使い勝手がよくありません.

そこで,gnuplotです.スクリプトを書くことで自由度の高い表現が可能です.

シミュレーションデータのエクスポート

  1. グラフウインドウにフォーカスされている状態でメニューバーのFile-exportをクリック.
  2. 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で組版する際に便利です.

gnuplotで得られたグラフ

ちなみにLTSpiceのデフォルトのグラフは以下の通り

LTSpiceデフォルト

...え?LTSpiceの方がカッコいいって?


Designed by chocoto
inserted by FC2 system