オーディオ用の DAC(デジタル→アナログ変換器)や ADC(その逆)の中に、出力が 0 か 1 の2値しかない ものがある、と聞くとちょっと不思議に思う。1bit、つまり「ある/なし」だけで、どうやって繊細な波形を再現するんだろう。
答えの中心にあるのが ΔΣ変調(デルタシグマ変調)と、その心臓部にある ノイズシェイピング という考え方だ。粗い量子化を、時間方向の工夫で取り返している、という話になる。
まず、誤差を貯めるタンクを置く
いちばん素朴な1次の変調器は、こう書ける。入力 (ここでは から の値とする)を、毎ステップ「タンク」に足していく。タンクの中身 が を超えたら を吐き出して、その分だけタンクを減らす。超えていなければ を出す。
たったこれだけ。たとえば を入れ続けると、タンクはゆっくり溜まって、およそ10回に3回の割合で が出る。出てくる0と1の列を平均すると、ちゃんと に戻る。1bit の密度(1が出る割合)に、もとの値が乗っているわけだ。
つまり「滑らかな高さ」を「1の混み具合」に翻訳している。粗さを、空間(ビット数)ではなく時間(密度)で表している、と言ってもいい。
量子化の誤差はどこへ行ったのか
1bit に丸める瞬間、必ず誤差が出る。 を や に切り捨て・切り上げするのだから、当然だ。この 量子化誤差 がどう振る舞うかが、この方式の肝になる。
タンク(積分器)が誤差を溜め込み、出力でそれを差し引く構造なので、誤差は出力で「差分」の形になって現れる。z 領域で書くと、出力 は入力 と誤差 を使って
となる。入力はそのまま、誤差にだけ という係数が掛かっている。この を ノイズ伝達関数(NTF) と呼ぶ。これが効いてくる。
周波数 (サンプリング周波数を とする)での大きさを見ると、
これは 低い周波数でほぼ 、高い周波数で大きい。つまり量子化誤差は、低域から追い出されて高域へ押し上げられる。これが「ノイズシェイピング」——雑音の置き場所を、信号のいる低域から、聞こえない(あるいは後で捨てられる)高域へ整形する操作だ。
オーバーサンプリングと組み合わせる
ノイズを高域に追いやっても、信号と同じ帯域に残っていたら意味がない。そこで オーバーサンプリング——必要な何十倍も速くサンプリングして、信号の帯域を全体のごく低い隅に押し込めておく。すると「信号は低域、雑音は高域」とくっきり分かれるので、最後に素直なローパスフィルタを通すだけで、雑音の大半を捨てて高分解能の波形が残る。
次数を上げて NTF を にすると、低域のへこみがもっと急になり、同じオーバーサンプリング比でもさらに雑音を追い出せる。高次の変調器は安定性とのせめぎ合いになるけれど、発想は同じだ。
なぜこれが嬉しいのか
部品の側から見ると、1bit の変換器は作りやすい。多bitの変換器は、各ビットの重み()を抵抗やコンデンサの比で正確に作り込む必要があって、その精度がそのまま音質の限界になる。1bit なら重みは一つしかないから、その「比の誤差」から解放される。足りない分解能は、速さ(オーバーサンプリング)と賢さ(ノイズシェイピング)で買う、という割り切りだ。
空間の精度を、時間の精度に置き換える——ΔΣ変調はその発想がとてもきれいで、一度わかると色々な所に同じ構造が見えてくると思う。
実際に誤差タンクが溢れて1を吐く様子と、誤差スペクトルが低域でへこんで高域へ寄っていく様子は、ΔΣ変調を一歩ずつ で動かして確かめられるよ。ノイズシェイピングを ON/OFF すると、低域の雑音が出たり消えたりするのが目で見える。
— ランキン