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

前回の補足として、外部入力が一定値を取る場合の小数部 f の値と、1次 ΣDM 出力波形に含まれる周期変動の基本波の周波数の表を示します。
まず、f が 2 のべき (および 32 からそれを引いたもの) である場合の表を下に示します。
この場合は、基本波と高調波のレベルは等しくなります。

f (5 ビット) f (8 ビット) 周期 基本波 (kHz)
1, 31 0x08, 0xF8 32 0.9766
2, 30 0x10, 0xF0 16 1.9531
4, 28 0x20, 0xE0 8 3.9063
8, 24 0x40, 0xC0 4 7.8125
16 0x80 2 15.625

次は残りの f の値についての表で、この場合は基本波のレベルは高調波のレベルよりも小さくなります。

f (5 ビット) f (8 ビット) 周期 基本波 (kHz)
3, 5,
7, 9,
11, 13,
15, 17,
19, 21,
23, 25,
27, 29
0x18, 0x28,
0x38, 0x48,
0x58, 0x68,
0x78, 0x88,
0x98, 0xA8,
0xB8, 0xC8,
0xD8, 0xE8
32 0.9766
6, 10,
14, 18,
22, 26
0x30, 0x50,
0x70, 0x90,
0xB0, 0xD0
16 1.9531
12, 20 0x60, 0xA0 8 3.9063

上のふたつの表に示すように、出力波形に含まれる周波数成分の中で一番低いのが約 977 Hz であり、これ以下の周波数の成分は含まれません。
したがって、PWM 出力の LPF で約 977 Hz の成分を十分減衰させられるかどうかがポイントになります。
ここでの実験では、3 次バタワース LPF のカットオフ周波数は約 800 Hz ですから、977 Hz に対しては、十分な減衰が得られない状態で観察していることになります。
さて、ここからは ΣDM 入力に、整数部の 1LSB に相当する振幅 (p-p 値) の信号を重畳して観測した結果を示します。
最初は振幅 1LSB p-p の正弦波です。

Pakurino (Arduino) のスケッチは「FMmelody」を元に作成しているので、FM オペレータを使って正弦波は簡単に作成できます。
正弦波の周波数は 31.25 kHz / 1024 = 30.518 Hz に選んであります。
これは、20 Hz 以下では FFT 結果のウィンドウに表示されなくなりますし、PC のオーディオ・コーデックでは強制的に数 Hz のハイパス・フィルタが挿入されているので「サグ」による影響が大きくなるのを考慮したためです。
正弦波により、ΣDM の入力の小数部が時間的に変動しているので、DC の場合と違って、出力に明確な線スペクトルの成分は見られません。
出力スペクトルは、単に 1 次 ΣDM のノイズ・シェーピング作用により、高域に押しやられているノイズがカットオフ約 800 Hz の LPF により減衰されて、結局、数 100 Hz 付近にピークを持ち、それ以上、それ以下の周波数域でノイズレベルが下がるという形になっています。
次は、振幅 1LSB p-p の方形波です。
方形波は ΣDM の入力の整数部を半周期はそのまま、もう半周期は +1 することによって生成しています。
入力の小数部は、方形波の波形のどの時点でも一定であり、整数部が 1 LSB 分だけ変動します。
下のグラフは小数部がゼロの場合です。

方形波が「まっすぐ」ではなく「ハ」の字状になっているのは、「サグ」、つまり、AD 入力で直流および低い周波数の成分がカットされることによる歪みのせいです。
方形波の立ち上がり、立ち下がりでオーバーシュートが生じているのは、3 次バタワース LPF の過渡応答が見えているだけで、ΣDM の応答が振動的になっているわけではありません。
MIDI2CV としての応用では、このようなオーバーシュートが聴感上の問題とならないかどうか、実際に試してみる必要があります。
もし、問題となるのであれば、特性を緩やかにしてオーバーシュート量を減らす必要があります。
さて、この例では小数部はゼロですから、前に述べたように 1 次 ΣDM の作用はなく、通常の PWM と変わりありません。
スペクトルを見ても、単に、約 30 Hz の方形波の高調波が、約 800 Hz 以上では3次バタワース LPF で減衰しているというだけです。
次は小数部 f = 1 (8 ビット表現では 0x08) の場合です。

時間波形を見ると、トランジェントでのオーバーシュートがリンギングとして、ずっと続いているように見えますが、これはリンギングではなく、定常的に乗っている約 977 Hz の成分です。
スペクトルを見ると、約 30 Hz の方形波の高調波列のすきまから、約 1 kHz、約 2 kHz、約 3 kHz ... の ΣDM による線スペクトル成分が顔を覗かせているのが分かります。
方形波の基本波のレベルと、約 1 kHz の成分のレベルの差は 30 dB には達せず、20 数 dB といったところで、比率で言えば 1/20 程度でしょうか。 時間波形を見ても、その程度に見えます。
次は、階段波形の場合です。

波形は「下り」階段状になっていますが、これは PC オーディオ入力で極性が反転しているためで、実際の波形では「上り」階段状です。
「階段」波形は、のこぎり波を発生して、下位ビットをマスクすることによって実現しているので、この波形の振幅の p-p 値は整数部の 3/4 LSB で、他の波形よりも小さくなっています。
階段の「ステップサイズ」は 1/4 LSB で、階段の下から (図では上から)、0 LSB、1/4 LSB、1/2 LSB、3/4 LSB の4レベルになっています。
小数部 f = 1 として、 0 LSB の階段部分 (図では一番上) に約 977 Hz の成分が乗るような設定にしてあります。
「サグ」のため波形が歪んで、各ステップ間の距離が等間隔とはなりませんが、1/4 LSB の間隔 (音程で言えば半音の 1/8) がきちんと解像できていることが分かります。
次は、小数部の 32 レベルを全て出力する階段波形です。

階段波の周波数は約 3.8 Hz と低くなり、スペクトル表示には現れませんので、時間波形のみを示します。
この図では見にくいので、拡大版を (→こちら) に示します。
一番下 (図では一番上) の階段が f = 0 で、順に 1、2、... と進み、一番上 (図では一番下) の階段が f = 31 となります。
サグで大きく歪んでいますが、なんとか 32 レベルは解像しています。
f = 1 と f = 31 で約 977 Hz の成分が乗っているのも分かります。
次回以降は 2 次 ΣDM での結果を示します。