[[AnalogDiscoveryを試す]]


#contents

2014/11/30からのアクセス回数 &counter;

** LCノッチ・フィルタ回路 [#w8572230]
特定の周波数成分を除去するフィルターをノッチフィルターを呼びます。

今回は、R(抵抗), L(コイル), C(コンデンサー)を使ったLCノッチフィルタをAnalogDiscovery、
LTSpice、Sageを使って試してみましょう。

** LTSpiceを使った周波数解析 [#w7d4f7cc]
LTSpiceを使って以下の様なLCノッチ・フィルターの回路を作成します。

モデルは、以下のファイルを使用しました。

- &ref(LC_NotchFilter.asc);

&ref(LC_NotchFilter_cir.png);



*** AC解析を実行する [#t91ef9a8]
Runコマンド(回路図で右クリックしてRunを選択)を実行すると、以下の様な周波数特性が表示されます。


&ref(LC_NotchFilter_Network.png);



** AnalogDiscoveryで測定してみる。 [#o5fe885f]
LCノッチ・フィルターの回路を以下の様にブレッドボードに組み、AnalogDiscoveryと接続します。



&ref(LC_NotchF_Setting.png);



接続は、以下の通りです。

| AnalogDiscovery | ブレッドボード |h
| Orange: Scope Ch1+ | Vi |
| Orange/White: Scope Ch1- | GND |
| Blue: Scope Ch2+ | Vo |
| Blue/White: Scope ch2- | GND |
| Yellow: Wave Gen 1 | Vi |

*** 波形を測る [#y0cead77]
最初に中心周波数15.7kHzの方形波を入力したときの出力波形を見てみます。

ちょうど、方形波から正弦波を引いたような形をしています。

&ref(th_LC_NotchF_15.7KHz.jpg);




*** 周波数特性を測る [#o0d4de9b]
ネットワーク・アナライザを使って周波数特性を実測します。
LTSpiceのシミュレーションと同じ形の周波数特性が測定できました。


&ref(th_LC_NotchF_network.jpg);




** Sageを使ってグラフを表示 [#m2ae7191]
Sageを使ってVoでの周波数特性を計算してみましょう。


ここで紹介するSageのノートは、以下のURLで公開しています。

- http://www15191ue.sakura.ne.jp:8000/home/pub/50/

LCノッチ・フィルターを解析的に求めるために、Wikipediaから直列RLC回路の電源の図を引用します。


&ref(RLC_series_circuit_v1.svg.png);






入力電圧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)
$$


*** Sageで伝達関数をプロットする [#w0259720]
[[AnalogDiscoveryを試す/01-CR積分回路]]の場合には、伝達関数の振幅特性と位相特性を計算してからプロットしましたが、
今回は伝達関数から直接振幅特性と位相特性をプロットしてみます。

上記の式から伝達関数を以下の様に定義します。


$$ 
H(s) = \frac{V_O(s)}{V_i(s)} = \frac{Ls + \frac{1}{Cs}}{ R + Ls + \frac{1}{Cs}} 
$$


以下の方法は、伝達関数Hの形が異なるだけで、他は[[AnalogDiscoveryを試す/02-CR微分回路]]と同じです。

Sageへの入力:
#pre{{
# 伝達関数から周波数特性を求める
(s, f,R,C,L) = var('s f R C L')
H = (L*s + 1/(C*s))/(R + L*s +1/(C*s)) 
}}

表示すると、
Sageへの入力:
#pre{{
show(H)
}}

&ref(eq6.png);


ラプラス変数sをjω、ω=2πfを代入すると、
Sageへの入力:
#pre{{
# s = jω, ω= 2πfを代入すると
H(f) = H.subs_expr(s == 2*i*pi*f)

}}

db単位で表示するために、toDb関数を以下の様に定義します。
#pre{{
# 電気ではデジベルで表示するため、toDb関数を定義する
def toDb(v):
    return 20*log(abs(v), 10) 
}}

振幅特性をプロットします。
Sageへの入力:
#pre{{
# 直接表示すると'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) 
}}

&ref(gain_notch.png);




位相特性は、定義から以下の様になります。
#pre{{
# 位相は以下の様になる
Phi(f) = arctan(imaginary(H(f))/real(H(f)))
}}

位相を度で表示するために、toDeg関数を以下の様に定義します。
#pre{{
def toDeg(v):
    return v*180/pi 
}}

位相特性をプロットすると以下の様になります。


Sageへの入力:
#pre{{
# プロットに少し時間がかかります。

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) 
}}

&ref(phase_notch.png);



** コメント [#j514b4a9]
#vote(おもしろかった[1],そうでもない[0],わかりずらい[0])
#vote(おもしろかった[2],そうでもない[0],わかりずらい[0])


皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。

スパム防止に画像の文字列も入力してください。
#comment_kcaptcha

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc