← ブログ一覧

0と1だけで、なめらかな音をつくる——ΔΣ変調の心臓

📡 信号・RF 信号処理ΔΣ変調量子化可視化

オーディオ用の DAC(デジタル→アナログ変換器)や ADC(その逆)の中に、出力が 0 か 1 の2値しかない ものがある、と聞くとちょっと不思議に思う。1bit、つまり「ある/なし」だけで、どうやって繊細な波形を再現するんだろう。

答えの中心にあるのが ΔΣ変調(デルタシグマ変調)と、その心臓部にある ノイズシェイピング という考え方だ。粗い量子化を、時間方向の工夫で取り返している、という話になる。

まず、誤差を貯めるタンクを置く

いちばん素朴な1次の変調器は、こう書ける。入力 xx(ここでは 00 から 11 の値とする)を、毎ステップ「タンク」に足していく。タンクの中身 aa11 を超えたら 11 を吐き出して、その分だけタンクを減らす。超えていなければ 00 を出す。

a+=x,y={1(a1)  a=10(a<1)a \mathrel{+}= x, \qquad y = \begin{cases} 1 & (a \ge 1)\ \rightarrow\ a \mathrel{-}= 1 \\[4pt] 0 & (a < 1) \end{cases}

たったこれだけ。たとえば x=0.3x = 0.3 を入れ続けると、タンクはゆっくり溜まって、およそ10回に3回の割合で 11 が出る。出てくる0と1の列を平均すると、ちゃんと 0.30.3 に戻る。1bit の密度(1が出る割合)に、もとの値が乗っているわけだ。

つまり「滑らかな高さ」を「1の混み具合」に翻訳している。粗さを、空間(ビット数)ではなく時間(密度)で表している、と言ってもいい。

量子化の誤差はどこへ行ったのか

1bit に丸める瞬間、必ず誤差が出る。0.30.30011 に切り捨て・切り上げするのだから、当然だ。この 量子化誤差 ee がどう振る舞うかが、この方式の肝になる。

タンク(積分器)が誤差を溜め込み、出力でそれを差し引く構造なので、誤差は出力で「差分」の形になって現れる。z 領域で書くと、出力 YY は入力 XX と誤差 EE を使って

Y(z)=X(z)+(1z1)E(z)Y(z) = X(z) + (1 - z^{-1})\, E(z)

となる。入力はそのまま、誤差にだけ (1z1)(1 - z^{-1}) という係数が掛かっている。この (1z1)(1 - z^{-1})ノイズ伝達関数(NTF) と呼ぶ。これが効いてくる。

周波数 ff(サンプリング周波数を fsf_s とする)での大きさを見ると、

1ej2πf/fs=2sin ⁣πffs|\,1 - e^{-j 2\pi f / f_s}\,| = 2\left|\sin\!\frac{\pi f}{f_s}\right|

これは 低い周波数でほぼ 00、高い周波数で大きい。つまり量子化誤差は、低域から追い出されて高域へ押し上げられる。これが「ノイズシェイピング」——雑音の置き場所を、信号のいる低域から、聞こえない(あるいは後で捨てられる)高域へ整形する操作だ。

オーバーサンプリングと組み合わせる

ノイズを高域に追いやっても、信号と同じ帯域に残っていたら意味がない。そこで オーバーサンプリング——必要な何十倍も速くサンプリングして、信号の帯域を全体のごく低い隅に押し込めておく。すると「信号は低域、雑音は高域」とくっきり分かれるので、最後に素直なローパスフィルタを通すだけで、雑音の大半を捨てて高分解能の波形が残る。

次数を上げて NTF を (1z1)2(1 - z^{-1})^2 にすると、低域のへこみがもっと急になり、同じオーバーサンプリング比でもさらに雑音を追い出せる。高次の変調器は安定性とのせめぎ合いになるけれど、発想は同じだ。

なぜこれが嬉しいのか

部品の側から見ると、1bit の変換器は作りやすい。多bitの変換器は、各ビットの重み(1,12,14,1, \tfrac12, \tfrac14, \dots)を抵抗やコンデンサの比で正確に作り込む必要があって、その精度がそのまま音質の限界になる。1bit なら重みは一つしかないから、その「比の誤差」から解放される。足りない分解能は、速さ(オーバーサンプリング)と賢さ(ノイズシェイピング)で買う、という割り切りだ。

空間の精度を、時間の精度に置き換える——ΔΣ変調はその発想がとてもきれいで、一度わかると色々な所に同じ構造が見えてくると思う。

実際に誤差タンクが溢れて1を吐く様子と、誤差スペクトルが低域でへこんで高域へ寄っていく様子は、ΔΣ変調を一歩ずつ で動かして確かめられるよ。ノイズシェイピングを ON/OFF すると、低域の雑音が出たり消えたりするのが目で見える。

— ランキン