LC_NotchFilter

3434 days ago by takepwave

LCノッチ・フィルターの周波数特性

以下にWikipediaから引用した直列RLC回路の図を示します。

入力電圧Vを時間の関数$ v_i(t) $とすると、以下の関係式が成り立ちます。 $$ R i(t) + L\frac{di}{dt} + \frac{1}{C} \int_{-\infty}^t i(\tau) d\tau = v_i(t) $$ この式をラプラス変換すると、以下の関係式が求まります。 $$ V_i(s) = I(s)\left( R + Ls + \frac{1}{Cs}\right) $$

伝達関数

LTSpiceを使って以下のノッチ・フィルターの回路を作成しました。

これから、伝達関数$H(s)$は以下の様に求まります。 $$ H(s) = \frac{V_O(s)}{V_i(s)} = \frac{Ls + \frac{1}{Cs}}{ R + Ls + \frac{1}{Cs}} $$

# 伝達関数から周波数特性を求める (s, f,R,C,L) = var('s f R C L') H = (L*s + 1/(C*s))/(R + L*s +1/(C*s)) 
       
show(H) 
       
# s = jω, ω= 2πfを代入すると H(f) = H.subs_expr(s == 2*i*pi*f) 
       
# 電気ではデジベルで表示するため、toDb関数を定義する def toDb(v): return 20*log(abs(v), 10) 
       
# 直接表示すると'unable to simplify to float approximation'のエラーがでるので、lambda式で回避した。 plot(lambda f: toDb(H(f, R=470, C=0.022*10^-6, L=4.7*10^-3)).n(), [f, 5*10^3, 100*10^3], scale="semilogx", figsize=(5, 3), plot_points=500) 
       
# 位相は以下の様になる Phi(f) = arctan(imaginary(H(f))/real(H(f))) 
       
def toDeg(v): return v*180/pi 
       
# プロットに少し時間がかかります。 plot(lambda f: toDeg(Phi(f, R=470, C=0.022*10^-6, L=4.7*10^-3)).n(), [f, 5*10^3, 100*10^3], scale="semilogx", figsize=(5, 3), plot_points=300)