ΔΣを一歩ずつ — 誤差タンクと1ビット出力

なめらかな入力(例えば 0.3)を、0 か 1 だけの出力で表す。秘密は「誤差を捨てずに溜める」こと。入力を誤差タンクに足していって、1 を超えた瞬間に 1 を吐き、溢れたぶんだけ残す。これを繰り返すと、1ビットしか無いのに、ならせば(平均すれば)入力に戻る。これが ノイズシェイピング=ΔΣ変調の素の姿だよ。

「素の丸め(OFF)」に切り替えると、タンクを使わずに毎回ただ近いほうへ丸める。一定の 0.3 は毎回 0 に丸まって平らなまま——だから OFF だとパタパタしない。OFF=誤差を持ち越すループ(ΔΣの心臓)を外した状態で、ΔΣをOFFにするのと同じこと。Δ(差分)もΣ(積分)もそのループの中の操作だから、OFFはそれを止めて、量子化器だけを裸で残す、ということだよ。← /play に戻る

毎ステップ、誤差タンクがやっている計算
  1. そそぐ:前のステップで残った水(=持ち越した誤差)に、いまの入力をそそぐ。=左の図の青い水位が入力ぶんだけ上がる。
    つまり 水位 = 前の残り + 入力
  2. くらべる:その水位が 縁(=1、タンク上ふちの橙の破線)に届いたかを見る。
  3. 吐く:届いたら出力は 1。そして縁のぶん(ちょうど 1)だけ水を抜く(青がストンと下がって ▲1! が出る)。抜いたあとに残った水が、次へ持ち越す誤差になる。届いてなければ出力は 0、水はそのまま溜めておく。

右の図はその結果:青の階段=出力の 0/1、灰の破線=入力、=1ビット列を窓ぶんならした移動平均による簡易復元(低域だけ取り出す)。出力は 0 か 1 だけなのに、抜いた誤差を捨てず次へ回すから、平均すれば入力にそろう。下の「計算」欄に、いま図のどの数を足し引きしているかが 1 ステップごとに出るよ。

式にするとこの2つ ──
作る側(青いタンク)残り(今) = 残り(前) + 入力 − 出力。前のステップの残りが次の水位になって、誤差が代々つながっていく。
読む側(橙の簡易復元)簡易復元 = 直近 win 個の出力の平均(移動平均=ならし)。窓ぶん平均する都合で、約 win/2 サンプルだけ遅れる。

※ この復元は単純な移動平均ローパスで、教材用の簡易版です。実際の ΔΣ ADC/DAC では、もっと急峻なローパス/デシメーションフィルタを使います。
※ このデモはディザなしなので、一定入力では 0.50 → 0101…0.30 → 0010010… のような周期的なビット列が出ます。これはバグではなく、低次・ディザなしΔΣの idle tone / limit cycle という性質。実機では高次化・ディザ・アナログノイズで目立ちにくくします。

モード
入力
0.30
簡易復元の窓
16
※ 1ビット列を移動平均でならして低域成分を取り出す窓(=簡易復元)。広い=滑らかだが遅延大/狭い=遅延小だがギザつく
サンプリング
×1
※ 1周期あたりのサンプル数(オーバーサンプリング)。上げるほど同じ波形を細かくサンプリングし、簡易復元が信号にぴったり追従する。表示サンプル数も連動して増やし、OSを上げても1周期が見えるようにしてある。さざ波・階段で効く
下は誤差スペクトル=「出力 − 入力」のざっくり DFT(直近128サンプル)。ONでは誤差が低域(信号の住む所)に残りにくく、高域へ押し上げられる——これがノイズシェイピングの正体。OFF(素の丸め)に切り替えると、低域にも誤差が残るのが見える。一定入力では、idle tone に対応するとがった線も出るよ。
※ ざっくり DFT(窓かけ・自動スケール)の模式表示で、絶対的な雑音電力を測るものではありません。