はじめに
LTspiceでAC解析を行い、結果をgnuplotでグラフ化するためのデータファイルを編集する続編です。
LTspiceシミュレーション回路
とりあえず以下の回路で解析します。以前の記事より1段増えました。
結果の確認とテキストファイル出力
2か所のコンデンサについて両端電圧を見てみます。
下図のようになりました。
結果をテキストファイルにエクスポートし、以前の記事で解説したとおりsed
に通した上でこの記事のgnuplot
スクリプトを実行します。
グラフの確認
データ取得点が2個あるのでグラフも2本描かれます。
なんか位相が不自然にジャンプしています。LTspiceの結果画面ではちゃんと -360° に達していましたが、テキストを吐き出したとき ±180° 以内にされてしまうようです。
それでは困るのでデータファイルを処理します。こういうときはawk
の出番です。
BEGIN{
# 位相ジャンプのしきい値設定
th0=-165;
th1=165;
}
{
for(k=2;k<=NF;k++){
# 位相がプラス180°へ急にジャンプしたら360°引きずり降ろす
if(old[k]<th0 && $k>th1){
offset[k]-=360;
}
# 位相がマイナス180°へ急にジャンプしたら360°吊り上げる
if(old[k]>th1 && $k<th0){
offset[k]+=360;
}
old[k]=$k;
}
printf("%.14e",$1); # 先頭の周波数列はそのまま表示
for(k=2;k<=NF;k++){
printf(" %.14e",$k+offset[k]); # オフセットを足して表示
}
printf("\n");
}
データがいくつあろうとNF
一つで対応できるのがawkのいいところです。
ここでoffset[k]
はk列目のオフセット値を覚えておく配列です。
一つ前と現在のデータが 360° ジャンプしていれば LTspice の出力が変、ということで補正項を加減します。
ただちょうどピッタリ 180° (または-180°)にはならないので、判定のしきい値は 15° の余裕を見ています。
あまり大きくしすぎると正常な位相の変動まで誤判定する可能性が出てくるため注意します。
ゲインの列に対しては何もしなくていいのですが、まぁ判定に引っかかることもないので放置しています。