2018年1月31日水曜日

Arduino LFO LPFの検討

MCP4922の後段に入れるLPFを検討しました。仕様により100Hzまでの波形(ただしサイン波だけではない)でよく、サンプリング周波数が15kHz程度なので8kHzをカットオフ周波数として実験しました。

あまり複雑な回路は組みたくないので、CR2次、CR4次、4次アクティブフィルタを比較しました。

回路図


2次CR LPF

fc = 1 / (2 * π * C * R) ≒ 7962Hz の1次CR LPFを2段直結しました。

4次CR LPF

同じく1次CR LPFを4段直結しました。

4次VCVS LPF バターワース特性

VCVS(正帰還、サレンキ-)フィルタは高周波数で利得が上がってしまう欠点がありますが、マルチフィードバック(多重帰還)フィルタより部品数が少なく済み、位相も反転しないメリットがあります。

参考「サレンキー型フィルタの阻止域特性を改善 (1/2)」「Filtering 101 : サレンキー回路 vs 多重帰還回路

4次バターワース特性は「OPアンプ大全」に載っている<表4-2>バターワース設計表から

ステージ Q F0
1段目 0.5412 1.0000
2段目 1.3065 1.0000

「OKAWA Electric Design」のフィルター計算ツールを使って定数を求めました。(一部手持ちのもので近い値に変更しています)

AC解析


2次CR LPF

15kHzでの減衰率は-16dB程度です。10kHzから100kHzの減衰を見ると、だいたい40dB/decになっています。

4次CR LPF

15kHzでの減衰率は-34dB程度です。10kHzから100kHzの減衰を見ると、だいたい62dB/decになっています。

4次VCVS LPF バターワース特性

なぜだか通過域のゲインが-3dBになってしまいました(@@?

15kHzでの減衰率は-27dB程度です。通過域と比較すると-24dB程度。10kHzから100kHzの減衰を見ると、だいたい80dB/decになっています。

4次CR LPFと比較するとカットオフ周波数付近の肩が急峻になっています。

過渡解析


2次CR LPF

4次CR LPF

4次VCVS LPF バターワース特性

CR LPFの2次、4次は波形がなまっているだけですが、4次VCVS LPF バターワース特性は立ち上がりが速い代わりにオーバーシュートが現れています。

WaveSpectraで測定


Arduino LFOで50Hzのサイン波を出力してWaveSpectraでスペクトラムを見てみました。

4次VCVS LPF バターワース特性 ブレッドボード配線図


OPAMP: NJM13404
電源: 5V/3.3V安定化電源 Ver.2

Arduinoの電源: 単3✕6
Audio I/F: TASCAM US-144 MKII Guitar入力
窓関数: FlatTop
Avg: 40
DDSテーブルサイズ: 12bit✕2048

フィルタなし

2次CR LPF

4次CR LPF

4次VCVS LPF バターワース特性

単純に50Hzのサイン波の綺麗さで比較すると4次CR LPFが良さそうです。

ステップ応答


Arduino LFOで50Hzの矩形波を出力してオシロで測定しました。

フィルタなし

2次CR LPF

4次CR LPF

4次VCVS LPF バターワース特性

ステップ応答はシミュレーションと同じく、CR LPFは次数が高いとなまりが大きくなり、4次VCVS LPF バターワース特性は立ち上がりが急峻でオーバーシュートが出ています。

どれにするかは悩み中。