シグマデルタ変調 PWM (3)

具体的な実験の手順としては、

  • Pakurino (Arduino) 用に ΣDM への入力として DC (直流) 出力だけでなく、各種の波形を重畳して出力できるスケッチを作成
  • その出力の時間波形とスペクトルを、「efu」氏作のフリーソフトウェア「WaveSpectra」で観測

という方法で行っています。
オシロで観測もしてみたのですが、かなり垂直軸のゲインを上げなければならず、帯域を制限しても 20 MHz と広いため、ノイズが多くなって見にくくなったので、PC のオーディオ入力を利用する方法をとりました。
また、Pakurino では、前の世代の Arduino と同様に、RS232C シリアル信号から 5V TTL レベルに変換する基板を外付けして利用しており、変換基板を接続したままではチャージポンプ内蔵 RS232C インターフェース IC の発生する 15 kHz 程度のノイズが乗ってしまうので、測定時には RS232C 基板は外しています。
USB-シリアル IC を使っている本物の Arduino ではノイズの問題はどうなのか、興味があります。
今回は、1 次 ΣDM での結果を示したいと思います。
まず、1 次 ΣDM への入力として、整数部を n、小数部を f として n.f と表現した場合に、小数部 f = 0 の場合を考えます。
下の図で b7 から b0 までが全てゼロの場合です。


左の図からも分かる通り、「sdm_acc1」は 16 ビット幅でも 8 ビット幅でも小数部のみを保持する形になります。
もし、入力の小数部がゼロならば、何回計算を続けても sdm_acc1 の初期状態から全く変化せず、当然、整数部への桁上がりもなく、整数部には何の変化もなく量子化器を抜けて出力されます。

つまり、入力の小数部がゼロならば、PWM には整数部がそのまま出力され、通常の PWM の場合と変化がないことになります。
2 次以上の ΣDM に対しては、1 次の場合と違って、一般にこのようなことは言えません。
小数部がゼロ、つまり、8 ビット幅での表現で 0x00 の場合の「WaveSpectra」での観測結果を下に示します。

マザーボード上のオーディオ入力を利用しており、16 ビット、96 kHz サンプリングで入力しています。
図の上側が時間波形で、下側がスペクトルです。
スペクトルの表示は、レベルが最大の成分を 0 dB として表示するオプション「シフト : Norm」にしています。
レベルが最大になっているのは 50 Hz のハムの成分で、図の右端近くに 約 800 Hz カットオフの LPF でかなり減衰した PWM 周波数の 31.25 kHz の成分も見られます。
通常の PWM と同じ振る舞いですから、現れているのは主にバックグラウンドのノイズで、 ΣDM に起因するノイズはありません。
次は 5 ビットの小数部 f = 1 の場合、つまり 8 ビット幅の表現では 0x08 の場合です。

この場合では、約 1 kHz, 約 2 kHz, 約 3 kHz ... に明確なスペクトル成分が現れており、時間波形でも振動があるのが分かります。
その基本波の周波数は正確には 31.25 kHz / 32 = 976.5625 Hz となります。
これは、通常の Phase correct PWM で 13 ビット分解能を得る場合の PWM 周波数と同じです。
ΣDM への入力の b2 〜 b0 は常にゼロに保つことにしていますから、変化し得る小数部は b7 〜 b3 の 5 ビットです。 つまり、1 次 ΣDM の内部状態としては 32 通りしかありません。
外部入力が定常的に変化がない状態では、内部状態だけで出力が決まりますから、原理的に長さ 33 以上のシーケンスを出力することは不可能で、長さ 32 のシーケンスが最長となります。
小数部が 0x08 の場合、具体的には、シーケンス長 32 のうち 31 回連続で整数部 n がそのまま出力され、1回だけ (n+1) が出力されるという繰り返しになります。
これはサンプル値系での「インパルス列」となるので、フーリエ変換で周波数域に変換した場合も「インパルス列」になります。
上の結果は、カットオフ周波数約 800 Hz の 3 次LPF を通過した出力を見ているので、2 倍波、3 倍波となるにしたがってレベルが下がっています。
下のグラフはカットオフ周波数約 8 kHz の 3 次 LPF を使った場合の結果です。

PWM 周波数の 31.25 kHz に対してカットオフ周波数 8 kHz は十分小さくないので、31.25 kHz の成分が最大となっています。 時間波形も、この 31.25 kHz の成分により、黒く塗りつぶされたようになっています。
LPF のカットオフ周波数付近以上の周波数では、フィルタの減衰域に入って、高調波のレベルが下がっているのが分かります。
さらに、フィルタの通過域内である 5 kHz くらいの成分までは基本波とほぼ同じレベル、つまり、インパルス列に対するスペクトルの形であることが分かります。
次回は、直流以外の波形に対する結果を示したいと思います。