CR_Dif

1757 days ago by takepwave

CR微分回路の応答波形の表示

ラプラス変換(基本法則と変換表のみを使用)で、方形波に対するCR微分回路の応答波形を以下の様に求めました。 $$ V_O = E \left\{ e^{-\frac{1}{\tau}t} - e^{-\frac{1}{\tau}(t-T)}u(t-T) \right\} $$

この応答波形をSageを使ってプロットしてみます。

(t, T, tau, E) = var('t T tau E') Vo = E*(e^(-1/tau*t) - e^(-1/tau*(t - T) )* unit_step(t - T)) 
       
show(Vo) 
       
# 方形波 U = E*(unit_step(t) - unit_step(t - T))-E/2 
       
# 方形波とVoをプロットする関数を定義します def plot_Vo(Tc): Ut(t) = U(T=Tc, E=4.0) fvo(t) = Vo(t, tau=0.001, T=Tc, E=4.0) vo_plt = plot(fvo(t), [t, 0, 2*Tc], color='blue') ut_plt = plot(Ut(t), [t, 0, 2*Tc], color='green') (vo_plt + ut_plt).show(figsize=4) 
       
# Tc=0.01、周期50HzでのVoのプロット plot_Vo(Tc=0.01) 
       
# Tc=0.001、周期500HzでのVoのプロット plot_Vo(Tc=0.001) 
       
# Tc=0.0001、周期5kHzでのVoのプロット plot_Vo(Tc=0.0001) 
       
# 伝達関数から周波数特性を求める (s, f,R,C) = var('s f R C') H = 1/(1/(R*C*s) + 1) 
       
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=10000, C=10^-7)).n(), [f, 10, 1000], scale="semilogx", figsize=(5, 3), plot_points=1000) 
       
# 位相は以下の様になる Phi(f) = arctan(imaginary(H(f))/real(H(f))) 
       
def toDeg(v): return v*180/pi 
       
plot(lambda f: toDeg(Phi(f, R=10000, C=10^-7)).n(), [f, 10, 1000], scale="semilogx", figsize=(5, 3), plot_points=1000)