0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LTSpiceのネットリストを学ぶRCローパスフィルタのシミュレーション

Posted at

はじめに

本記事では、LTSpiceシミュレーションのネットリストを生成する方法を、CRローパスフィルタを通じて解説します。さらに、Pythonコードを使用して、CRローパスフィルタの伝達関数や周波数応答を計算し、ボード線図インパルス応答をプロットする方法も紹介します。

Pythonコード

以下は、CRローパスフィルタのネットリスト生成、シミュレーション設定、そして伝達関数の計算とその応答をプロットするためのPythonコードです。LTSpiceシミュレーションからネットリストを読み取る手間を省くため、今回はプリント関数でネットリストを表示しています。
こちらを参考してください。

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# CRローパスフィルタのパラメータ
R = 1e3  # 抵抗値 (1kΩ)
C = 1e-6  # コンデンサ値 (1μF)

# ネットリストの生成 (インパルス入力を使用)
netlist = f"""
* CR Low-pass Filter Netlist

* 入力信号をインパルス信号に変更
* PULSE(0 1 0 1ms 1ms 1ms 2ms) は、1Vの振幅で1msの幅を持つインパルス信号を生成します
Vin N1 0 DC 0 AC 1 PULSE(0 1 0 1ms 1ms 1ms 2ms)    ; インパルス信号

* 抵抗R1を定義します
* 抵抗R1はN1ノード(入力信号)からN2ノードに接続され、1kΩの抵抗値を持っています
R1 N1 N2 {R}                     ; 抵抗 ({R}Ω)

* コンデンサC1を定義します
* C1はN2ノードからグラウンド(0V)に接続され、容量は{C*1e6}μFです
C1 N2 0 {C}                      ; コンデンサ ({C*1e6}μF)

* 時間領域シミュレーションを設定します
* .tran 0 5msは、0秒から5ミリ秒までの時間領域でのシミュレーションを実行します
.tran 0 5ms                     ; 時間領域シミュレーション (5msのシミュレーション)

* 周波数領域シミュレーションを設定します
* .ac dec 20 1 100k は、1Hzから100kHzまでの範囲で周波数応答を解析します
* "dec 20" は、周波数軸で20ポイント/デケードの解析を意味します
.ac dec 20 1 100k               ; 周波数領域シミュレーション (1Hzから100kHz)

* 周波数応答をプロットします
* V(N2) は、出力ノードN2の電圧を指します
.plot ac V(N2)                  ; 出力の周波数応答をプロット

* シミュレーション終了
.end
"""

# ネットリストを表示
print(netlist)

# 伝達関数の定義
# H(s) = 1 / (RCs + 1)
# scipy.signal.bodeで周波数応答を計算できる形式で定義する
numerator = [1]
denominator = [R*C, 1]  # 分母の係数は RC と 1

# 系の伝達関数
system = signal.TransferFunction(numerator, denominator)

# 周波数応答(ボード線図)を計算
frequencies = np.logspace(1, 5, num=500)  # 1Hzから100kHzまでの周波数
w, mag, phase = signal.bode(system, frequencies)

# ボード線図のプロット
plt.figure(figsize=(10, 6))

# 振幅特性のプロット
plt.subplot(2, 1, 1)
plt.semilogx(w, mag)  # 横軸は対数スケール
plt.title('Frequency Response of CR Low-pass Filter')
plt.xlabel('Frequency [rad/s]')
plt.ylabel('Magnitude [dB]')
plt.grid(True, which='both', axis='both')

# 位相特性のプロット
plt.subplot(2, 1, 2)
plt.semilogx(w, phase)
plt.xlabel('Frequency [rad/s]')
plt.ylabel('Phase [degrees]')
plt.grid(True, which='both', axis='both')

# プロットの表示
plt.tight_layout()
plt.show()

# 時間応答をプロット
# インパルス入力に対する応答を計算
t = np.linspace(0, 0.01, 1000)  # 時間軸 (0~10ms)
t, y = signal.impulse(system, T=t)

plt.figure(figsize=(10, 4))
plt.plot(t, y)
plt.title('Impulse Response of CR Low-pass Filter')
plt.xlabel('Time [s]')
plt.ylabel('Output')
plt.grid(True)
plt.show()
ステップ 内容
1. ネットリストの生成 - PULSE(0 1 0 1ms 1ms 1ms 2ms) を使ってインパルス入力を定義
- R1C1 によって、CRローパスフィルタの回路構成が記述されている。
2. 伝達関数の定義 - CRローパスフィルタの伝達関数 ( H(s) = \frac{1}{RCs + 1} ) を定義
- scipy.signal.TransferFunction を使用してシステムをモデル化。
3. 周波数応答の計算とボード線図 - scipy.signal.bode 関数を使って、システムの周波数応答(ボード線図)を計算
- 振幅特性と位相特性をプロット。
4. 時間応答の計算 - scipy.signal.impulse 関数を使用してインパルス入力に対する時間応答を計算
- 時間応答をプロット。

おわりに

本記事では、CRローパスフィルタのネットリスト生成から始まり、伝達関数の定義周波数応答の計算、さらに時間応答のシミュレーションに至るまで、PythonとLTSpiceのネットリストを組み合わせたPythonコードを作成しました。
本記事が、回路設計やシミュレーション技術の向上に役立つ一助となれば幸いです。今後とも、PythonやLTSpiceを活用したシミュレーション技術を深めていくことをお勧めします。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?