3 次 Sallen-Key LPF は以下の特徴をもつ。
2 次 Sallen-Key はゲイン ≥ 3 で発振する。実用上は 2 以下だろう。 一方、多重帰還型はゲインを上げても発振しない、のは良いんだが 通過帯域特性が同じなら Sallen-Key より高 Q で使うためノイズで損なのと素子感度が高いのが難だ。 同じオペアンプ 1 個までなら 3 次 Sallen-Key を構成しとくとそのあたりは問題が少ない。
ただし、定数決定はとってもムズい。
上図はベッセル特性な 3 次 Sallen-Key ローパス例。今度作る予定のやつ。 2次 Sallen-Key に 1 次 RCフィルタ(R1, C1 の部分) を直付けしたような構成をもつ。 RCフィルタと 2次 Sallen-Key の間にバッファを挟んで分離する教科書な構成なら FilterPro などをつかって容易に計算できるんだけども。
前置された RCフィルタ(これはオペアンプの周波数限界をこえても働く) の効果が 2 次フィルタを構成する部分のフィードスルーとうちけしあって、オペアンプの限界付近(10MHzあたり)から先で遮断特性が ほぼフラットになることに注意。奇数次 Sallen-Key の特徴である。 その先、100MHz を越えるとハネ上がってくるのは C1 のインダクタンス(1nH位)によって前置 RCフィルタの効果がなくなることによるもので、 フィルタする部分が無くなるんだからしょうがない。どんな方式でも一緒。
ちなみに構成上 RCフィルタが前置されているようにみえる 2 次多重帰還型 LPF も同じ理由でフィードスルーを起こさない。
オペアンプの限界を越えると -40dB/dec → -20dB/dec と傾斜が緩くなるだけだ。ただ
その傾斜緩和のタイミングは 2次 Sallen-Key のハネ上がりよりも少し早い。
まあ -40dB/dec → +20dB/dec とハネる 2次 Sallen-Key よりはどんなんでもマシかもだが。
... えっと、いちおう公平のために記すと、奇数次多重帰還型 LPF も偶数次サレンキーと同様にフィードスルーを起こす。
コンデンサのインピーダンス XC = 1/(s*C) に注意してキルヒホッフの法則な計算を maxima 上で:![]()
注釈みっつ。
(%i5) (Vin - V1)/R1 + (V2 - V1)/R2 - V1*s*C1; // Node1 の電流の和 (%o5) (Vin-V1)/R1+(V2-V1)/R2-C1*s*V1 (%i6) (V1 - V2)/R2 + (V3 - V2)/R3 + (Vout - V2)*s*C2; // Node2 の電流の和 (%o6) C2*s*(Vout-V2)+(V3-V2)/R3+(V1-V2)/R2 (%i7) (V2 - V3)/R3 - V3*s*C3; // Node3 の電流の和 (%o7) (V2-V3)/R3-C3*s*V3 (%i9) solve( [%i5, %i6, %i7, Vout - K*V3], [Vout, V1, V2, V3]); // 各結節点それぞれで電流和はゼロ。 (%o9) [[Vout= ... なんちゃら長い式が一杯 ]] (%i11) %o9[1][1]; (%o11) Vout=(K*Vin)/(以下略) // Vout の結果を取り出した。 (%i12) %o9[1][1] / Vin; // 伝達関数 T(s) = Vout/Vin. (%o12) Vout/Vin=(K)/(以下略) (%i14) rhs(%o12); // 右辺を得る。 (%o14) (K)/(以下略) (%i15) T : %o14; // 関数 T として定義とく。 (%o15) (K)/(以下略)
T(s) = K/(C1*C2*C3*R1*R2*R3*s^3 + (C1*C3*R1*(R3+R2)+C2*C3*(R2+R1)*R3+C1*C2*(1-K)*R1*R2)*s^2 + (C3*(R3+R2+R1)+C2*(1-K)*(R2+R1)+C1*R1)*s + 1) ... 1.
K は DC ゲインで上図では K = (R4 + R5)/R5. 読む気をなくす式だがどーせ人が読むわけじゃないから無問題。ともかく出た。
ところで一般の 1 次、2 次 LPF の伝達関数:
T1(s) = 1 / (s + 1) ... 2, T2(s) = 1 / (s^2 + s/Q + 1) ... 3.
3 次 LPF の伝達関数はというと 2.式、3.式の積になるわけだが、これをそのまま掛けて良いのは 両者の遮断周波数が同じケースだけである。そうでない場合はスケーリングが必要だ。 バターワース特性では同じなので、とりあえずそのまま掛けると、
を得る。4-1.式はゲイン K があるとした場合。 バターワース特性なら Q = 1 のはずで、この時点で代入したほうが式は簡単だが後々の見通しのために残す。
T3(s) = 1 / (s^3 + (1+1/Q)*s^2 + (1+1/Q)*s + 1) ... 4, T'3(s) = K / (s^3 + (1+1/Q)*s^2 + (1+1/Q)*s + 1) ... 4-1.
一般性を失わずに C1*C2*C3*R1*R2*R3 = 1 と仮定することができ、1.式と 4-1.式の分母の係数を比較して
(C1*C3*R1*(R3+R2)+C2*C3*(R2+R1)*R3+C1*C2*(1-K)*R1*R2) = 1 + 1/Q ... 5, (C3*(R3+R2+R1)+C2*(1-K)*(R2+R1)+C1*R1) = 1 + 1/Q ... 6, C1*C2*C3*R1*R2*R3 = 1 ... 7.
変数は C1, C2, C3, R1, R2, R3, Q, K の 8 つ、式は 3 つだから自由度はあと 5 つ。 R1 = R2 = R3 = 1, Q = 1, K = 1 と指定して解いて C1 = 1.3926, C2 = 3.5468, C3 = 0.2024 を得る。 テキストに落す気力がなくなったので wxMaxima からそのままイメージを持って来た:
ふたつほど虚数を含む解があるが、もちろんそんなのは捨てる。 なお、declare(C1, real) などと定義域を実数指定しても虚数解を自動的に捨ててくれたりはしない。 assume(C1 > 0) すら効かない。一応やるこたやっといたが。![]()
黒線がバターワース、青線が定数を揃えたほう。簡単な定数なわりに綺麗なグラフだが、ほんのすこし Q が高いし、傾斜も緩い。 この定数比、たまに出てくるけど理論値そのものはあんまりよくないな。![]()
なお、「同じ抵抗値」ってのはけっこう重要で、フィルタの形を変えないままで遮断周波数の微調整がやりやすいのは良い。 E シリーズが「ほぼ」等比数列つうても厳密に等比数列じゃないから、 1:1 以外の定数比があると、こういう素子感度の高いトコではグラフを水平移動させ辛い。
目標とするフィルタの形から遮断周波数 Fn と Q を拾ってくるに Texas Instruments の Filter Pro を使った。 1 次項と 2 次項に因数分解した、そのまんまの形でいいときは Filter Pro の結果が使えるのは上図の通りだが、 今必要なのは右下にグレーな表に出てる Fn と Q の組だけだ。
そして Fn の実際の値そのものも要らない。 Real part の Fnreal と Section A の FnA の比の 3 乗根を a と置いて、次項で使う。
a = (Fnreal / FnA)1/3 ... 8.
それぞれ周波数を a^2 倍、1/a倍することに相当する。両者掛けて
T1'(s) = 1 / ((s/(a^2)) + 1) ... 2', T2'(s) = 1 / ((a*s)^2 + (a*s)/Q + 1) ... 3'.
T3'(s) = 1/ (s^3 + (a^2 + 1/(a*Q))*s^2 + (a/Q + 1/a^2)*s + 1). ... 4'.つまり 5.式、6.式は次のようになる。
(C1*C3*R1*(R3+R2)+C2*C3*(R2+R1)*R3+C1*C2*(1-K)*R1*R2) = (a^2 + 1/(a*Q)) ... 5', (C3*(R3+R2+R1)+C2*(1-K)*(R2+R1)+C1*R1) = (a/Q + 1/a^2) ... 6', C1*C2*C3*R1*R2*R3 = 1 ... 7'.
周波数比 a^3 = 0.905^3, 二次側 Q = 1.7062 (チェビシェフ型、リプル ±0.5dB) ならば、 C1 = 1.568, C2 = 10.46, C3 = 0.0610 を得る。
出しといてナンだがチェビシェフだと遠目にバターワースとの差が少ないな。 ベッセル型のほうが遅延特性の平坦性で分かりやすかろってことで 線形遅延、通過帯域内位相差 0.05 度を FilterPro に出させると、周波数比 0.9069^3, 二次側 Q = 0.80261、 ここからただちに R1 = R2 = R3 = 1 のとき C1 = 1.487, C2 = 2.349, C3 = 0.2863 を得て、シミュレーション結果:
FilterPro の結果そのものは 1 次用 + 2 次用でオペアンプが二つ要るかんね。それを一つにまとめるところに意義がある。
上図は 5次 Sallen-Key LPF。一般の Nth-order がどうなるかは自明ってことで。 ともかくこの 5 次 Sallen-Key の伝達関数を 3rd order のと同様にして解く。ノード毎の式は機械的で、 maxima への入力はたかがしれている。解かせた結果はそうでもないが:
T5(s) = K / (C1*C2*C3*C4*C5*R1*R2*R3*R4*R5*s^5 + (R2*(C1*R1*(C2*R3*(C4*C5*R5 + C3*C5*R5 + C3*(C4*(1-K) + C5)*R4) + C3*C4*C5*R4*R5 + C2*C4*C5*R4*R5) + C2*C3*C4*C5*R3*R4*R5) + R1*(C2*C3*C4*C5*R3*R4*R5 + C1*C3*C4*C5*R3*R4*R5))*s^4 + (R1*(C1*(R3*(C4*C5*R5 + C3*C5*R5 + C3*(C4*(1-K) + C5)*R4) + C4*C5*R4*R5) + C2*R3*(C4*C5*R5 + C3*C5*R5 + C3*(C4*(1-K) + C5)*R4) + C3*C4*C5*R4*R5 + C2*C4*C5*R4*R5) + R2*(C1*R1*(C2*(C5*R5 + (C4*(1-K) + C5)*R4) + C4*C5*R5 + C3*C5*R5 + C3*(C4*(1-K) + C5)*R4 + C2*(C4*(1-K) + C5 + C3)*R3) + C2*R3*(C4*C5*R5 + C3*C5*R5 + C3*(C4*(1-K) + C5)*R4) + C3*C4*C5*R4*R5 + C2*C4*C5*R4*R5) + C3*C4*C5*R3*R4*R5)*s^3 + (R1*(C1*(C5*R5 + (C4*(1-K) + C5)*R4 + (C4*(1-K) + C5 + C3)*R3) + C2*(C5*R5 + (C4*(1-K) + C5)*R4) + C4*C5*R5 + C3*C5*R5 + C3*(C4*(1-K) + C5)*R4 + C2*(C4*(1-K) + C5 + C3)*R3) + R2*(C2*(C5*R5 + (C4*(1-K) + C5)*R4) + C4*C5*R5 + C3*C5*R5 + C3*(C4*(1-K) + C5)*R4 + C2*(C4*(1-K) + C5 + C3)*R3 + C1*(C4*(1-K) + C2*(1-K) + C5 + C3)*R1) + R3*(C4*C5*R5 + C3*C5*R5 + C3*(C4*(1-K) + C5)*R4) + C4*C5*R4*R5)*s^2 + (C5*R5 + (C4*(1-K) + C5)*R4 + (C4*(1-K) + C5 + C3)*R3 + (C4*(1-K) + C2*(1-K) + C5 + C3)*R2 + (C4*(1-K) + C2*(1-K) + C5 + C3 + C1)*R1)*s + 1).
1 次 + 2 次 + 2 次のやつと辺々比較させ、 R1 = R2 = R3 = R4 = R5, K = 1 としてバターワースを解かせると 20 分後に maxima がお亡くなりになられた。合掌。 ちなみに理由は out of memory.
解探査を simplex 法で書いて、 R1 = R2 = R3 = R4 = R5, K = 2 のとき、C1 = 2.20660, C2 = 1.21720, C3 = 1.62915, C4 = 0.74154, C5 = 0.30854 を得た。 つまりこんなの:
アンプ 1 個で綺麗に -100dB/dec 出ている。![]()
K = 1 だと容易に安定しなかったのだが、K = 2 にしたらあっさり R = constant で出た。ふむ。
なお、他の奴と違ってコンデンサの定数がえらく細かく、算出値そのものを使っている。 素子感度がとんでなく高くて適当に丸めることが出来ないためで、現実に実装するのはしんどいと思われる。
有理 LPF の伝達関数の分母は実数係数の多項式で、2n 次ならば n 組の共役解、2n+1 次ならば n 組の共役解と実数解を 1 つ持つ。
3 次の LPF を 2 つ掛けると、かならず実数解を 2 つ以上含むので、実数解を持たないように構成される 6 次 LPFにすることはできない。
奇数次フィルタを含める場合は、奇数次 + 偶数次 + 偶数次 + 偶数次 + ... という構成でなければならない。