秋月ファンクラブ掲示板 過去ログ

LTSPICE AC解析  - kurin

2013/11/23 (Sat) 12:07

AC解析を行うと横軸(X軸)は周波数軸になりますが、
この各周波数を例えば10kで割った値(比率)を横軸(X軸)としたいのですが、何
か良い方法はありますか?

Re: LTSPICE AC解析  - inara1

2013/11/23 (Sat) 16:22

残念ながら、AC解析の横軸は「時間」以外にできないようです。

LT-spiceのグラフデータをExcelに読み込ませて、Excel上でグラフを描けば、横軸
を何にでもできます。以下の手順でLT-spiceのグラフをExcelで描けます。

(データの保存)
(1) グラフウィンドウをクリックしてグラフウィンドウをアクティブにする
(2) メニューのファイル→Export→FormatをCartesianに変更する→(保存先を変
更するならBrowse→保存先を.変更→保存)→OK

(Excelでのデータ読み込み)Excel2007の場合
Excelを起動してOfficeボタン→開く→ファイルの種類を「全て」に変更して保存
したテキストファイルを開く→データの形式を「カンマやタブなど・・・」に変更
→区切り文字からタブとカンマの両方を選択→完了→シートにデータが表示される

(グラフを描く)
読み込まれたデータの第一列が周波数(Hz)、第二列が利得の実部(単位なし)、
第三列が利得の虚部(単位なし)になっています。これをdB単位の利得と、度単位
の位相に変換するには
利得(dB)=20*log10(sqrt(利得の実部^2+利得の虚部^2))
位相(度)=Degrees(atan(利得の虚部/利得の実部)
で計算させます。添付図のE列とF列はそのようにして計算した結果です(グラフは
位相を縦軸の第二軸にして表示)。

グラフの横軸を規格化周波数にするには、添付図のD列のように、A列/1000などと
すればいいです。

なお、AC解析の設定項目中のNumber of points perの数値で、保存されるデータ
の周波数間隔が決まるので、細かい変化をグラフ化するには、ここの数値を大きく
します。添付図のデータは、Type of Sweep を Octave として、Number of
points perを 50 としたものです。

Re: LTSPICE AC解析  - kurin

2013/11/23 (Sat) 20:28

返信ありがとうございます。

以下の内容が理解できませんでした。

(データの保存)
(1) グラフウィンドウをクリックしてグラフウィンドウをアクティブにする
→LTSPICEのグラフデータでしょうか?
アクティブにするとは?

(2) メニューのファイル→Export→FormatをCartesianに変更する→(保存先を変
更するならBrowse→保存先を.変更→保存)→OK
→exportまでならLTSPICEのグラフからできますが、
formatのコマンドがありませんが・・・

すいません。ご教授ください。

Re: LTSPICE AC解析  - inara1

2013/11/24 (Sun) 06:23

アクティブなウィンドウとは、添付図のように、ウィンドウのタイトルが薄くなっ
ていないウィンドウのことです。

ウィンドウの中をマウスでクリックするとアクティブになります。

グラフウィンドウをアクティブにしないと、メニューの中にExportの項目が出てこ
ないので、グラフウィンドウをアクティブにしています。

Re: LTSPICE AC解析  - inara1

2013/11/24 (Sun) 06:38

>formatのコマンドがありません
添付図のように、Exportを選んだ後の画面の中に出てきませんか?

LT-spiceのバージョンが違うのでしょうか。こちらのは4.19oとなっています。
バージョンは、メニューのHelp → About LTspiceIV で確認できます。

Re: LTSPICE AC解析  - kurin

2013/11/24 (Sun) 10:06

返信ありがとうございます。

私の勘違いでinara1さんと同じ解析が出来ました。
ありがとうございます。

Re: LTSPICE AC解析  - kurin

2013/11/30 (Sat) 18:00

パラメータをstepで振った場合、それをエクセルデータに貼り付けるとそのパラメータは1つ
の列で連なるためグラフは、
色の変化をつけれませんでした。

これを改善できますかね?


Re: LTSPICE AC解析  - inara1

2013/11/30 (Sat) 19:43

>エクセルデータに貼り付けるとそのパラメータは1つの列で連なる
そうなりますね。

でもデータ間にStep Informationと出ているので、それを区切りとして手動で切り
取り(Ctrl+X)&ペースト(Ctrl+V)で別の列に貼り付けていけば直せます。

Excel VBA(Vaisual Basic)を使えば、Step Informationをデータの区切りとし
て、別の列に自動的に貼り付けることもできます。そちらのExcelのバージョンは
何ですか?

Re: LTSPICE AC解析  - inara1

2013/12/01 (Sun) 16:09

Excle VBAを使って、1列のデータの複数の列に並べ直し、dB単位の利得と、度単位
の位相に変換する方法を添付します(Excel2007で動作確認)。
貼り付けるVBAプログラムは以下の通りです(これをコピー&ペーストしてくだ
さい)。

Dim R(256) As Integer
Ndata = 0 ' グラフの本数
MaxRow = Range("A1").End(xlDown).Row ' 最大行数
For I = 1 To MaxRow
If Left(CStr(Cells(I, 1)), 4) = "Step" Then
Ndata = Ndata + 1
R(Ndata) = I ' Step.. が出てくる行数を記録
End If
Next I
If Ndata < 2 Then End
Npoint = R(2) - R(1) - 1 ' 1本のグラフのdata数
For I = 2 To Ndata ' データのコピー&ペースト
Range(Cells(R(I) + 1, 2), Cells(R(I) + Npoint, 3)).Copy
Destination:=Range(Cells(R(1) + 1, 2 * I), Cells(R(I) + Npoint, 2 * I +
1))
Next I
For I = 1 To Ndata ' 各列のタイトルを記入
Cells(R(1) - 1, 2 * I) = Cells(R(I), 1)
Cells(R(1), 2 * I) = "Gain (dB)"
Cells(R(1), 2 * I + 1) = "Phase (deg.)"
Next I
Cells(1, 1) = ""
Cells(2, 1) = "Freq. (Hz)"
' データをdB、位相に変換
Dim A As Double, B As Double, C As Double, D As Double, E as double
C = 10 / Log(10)
D = 180 / 3.14159265358979
For I = 1 To Ndata ' データ変換(dB・度)
E=R(1) + J
For J = 1 To Npoint
A = Cells(E, 2 * I) ' 実数値
B = Cells(E, 2 * I + 1) ' 虚数値
Cells(E, 2 * I) = C * Log(A * A + B * B) ' dBに書き換え
Cells(E, 2 * I + 1) = D * Atn(A / B) ' 度単位の位相に書き換え
Next J
Next I
' 元データの削除
Range(Cells(R(2), 1), Cells(MaxRow, 3)).Delete

なお、Excelシートを保存するときは、ファイルの種類を「Excelマクロ有効ブック
(*xlsm)」としてください。このファイルにはマクロが含まれるので、保存した
ファイルを開くときに、セキュリティーレベルによっては読み込まれなかったり、
警告が出ることがあります。

Re: LTSPICE AC解析  - inara1

2013/12/01 (Sun) 16:14

上のプログラムで変換した結果を添付します。

グラフの部分は手作業で描いたものです。

Re: LTSPICE AC解析  - kurin

2013/12/01 (Sun) 17:55

返信ありがとうございます。

丁寧な回答大変感謝しています。

私が使っていますバージョンはexcel 2003です。
回答を参考にして試してみたいとおもいます。


Re: LTSPICE AC解析  - inara1

2013/12/01 (Sun) 18:58

プログラムに間違いがありました。以下に修正したものを添付します。

Sub conv()
Dim R(256) As Integer
Ndata = 0 ' グラフの本数
MaxRow = Range("A1").End(xlDown).Row ' 最大行数
For I = 1 To MaxRow
If Left(CStr(Cells(I, 1)), 4) = "Step" Then
Ndata = Ndata + 1
R(Ndata) = I ' Step.. が出てくる行数を記録
End If
Next I
If Ndata < 2 Then End
Npoint = R(2) - R(1) - 1 ' 1本のグラフのdata数
For I = 2 To Ndata ' データのコピー&ペースト
Range(Cells(R(I) + 1, 2), Cells(R(I) + Npoint, 3)).Copy
Destination:=Range(Cells(R(1) + 1, 2 * I), Cells(R(I) + Npoint, 2 * I +
1))
Next I
For I = 1 To Ndata ' 各列のタイトルを記入
Cells(R(1) - 1, 2 * I) = Cells(R(I), 1)
Cells(R(1), 2 * I) = "Gain (dB)"
Cells(R(1), 2 * I + 1) = "Phase (deg.)"
Next I
Cells(1, 1) = ""
Cells(2, 1) = "Freq. (Hz)"
' データをdB、位相に変換
Dim A As Double, B As Double, C As Double, D As Double, E As Double
C = 10 / Log(10)
D = 180 / 3.14159265358979
For I = 1 To Ndata ' データ変換(dB・度)
For J = 1 To Npoint
E = R(1) + J
A = Cells(E, 2 * I) ' 実数値
B = Cells(E, 2 * I + 1) ' 虚数値
Cells(E, 2 * I) = C * Log(A * A + B * B) ' dBに書き換え
Cells(E, 2 * I + 1) = D * Atn(A / B) ' 度単位の位相に書き換え
Next J
Next I
' 元データの削除
Range(Cells(R(2), 1), Cells(MaxRow, 3)).Delete
End Sub

こちらでは普段 Excel 2002 を使っているので、そのバージョンでデータを読み込
んで、上のプログラムを貼り付けて実行してみましたが、問題なく動作しました。
マクロのショートカット(Alt+F8)はExcel 2002でも使えます。

ただし、マクロ名をconvertとするとマクロが作成できないことが分かりました
(convertは予約語のようです)。convという名前なら大丈夫です。マクロ名は何
でもいいので、conv以外の名前でもいいです。