ディジタル信号処理による信号発生とエイリアス(12)

今回は、ランプ波形サンプリングに相当する処理の実現について考えてみます。
FM音源のオペレータの話題で、フェーズ・ジェネレータの話が出てきましたが、サイン波 ROM を使わずに、フェーズ・アキュムレータの値をそのまま信号として取り出せば、のこぎり波発生装置となります。
フェーズ・アキュムレータを N ビット幅とし、アキュムレータからのオーバーフローを無視するなら、累算結果が 2^N を超えると、ただちにラップアラウンドして、ゼロ付近の値になりますから、これは理想のこぎり波をサンプリングしたものと考えられます。
ランプ波形サンプリングにするには、立下り部 (急斜辺) を意図的に追加する処理をする必要があります。
立下り部の幅が広ければ広いほどエイリアスの量は減りますが、同時にベースバンド帯域の高調波の量も減ってしまいますから、立下り部は、周波数によらず、1 サンプル分だけとします。
2 サンプル分以上に渡る処理では処理量も増えてしまいます。

左の図の赤色の線が通常のフェーズ・アキュムレータの (仮想的な) 変化の様子です。
縦軸はフェーズ・アキュムレータに蓄積されている数値で、0 から 2^N まで、横軸は時間で、両者とも連続のアナログ量とした場合の変化が赤色の線で示されています。
実際のディジタル値は、線の上の赤色の点で示してあります。
サンプリング周期は T で、フェーズ・アキュムレータの増分は f で表します。
仮想的な 1 サンプリング周期幅の立下り部を青色の線で示してあります。
本来は、T の間に 2^N から 0 まで立ち下がるわけですが、その間に、のこぎり波は f 増加するので、その合計として図のような線となります。 
このあたりの事情は、アナログ・シンセの「リワインド方式 VCO」の話と同様です。
のこぎり波が立ち下がったことは、フェーズ・アキュムレータのオーバーフロー (キャリーフラグ) で検出できます。
オーバーフロー後のフェーズ・アキュムレータのサンプル値を y (図の下側の赤色の点) とすると、これに補正値 (r とする) を加えて、図の青色の点に置き換えて出力します。 フェーズ・アキュムレータ自体の値は変更しません。
特別扱いするのは、オーバーフローを検出したサンプルについてだけで、それ以降のオーバーフローなしのサンプルは、フェーズ・アキュムレータの値そのものを出力します。
補正量 r は、この図から、幾何的な計算により求められます。 途中経過は省略して、結果だけ示すと、
\qquad\qquad r = \frac{2^{\small N}}{f} ( f - y )
となります。
この式には、2^N / f という除算が現れていますが、F-NUMBER テーブルを使ったピッチ計算では、実際に除算をすることなく、2^N / f の値を求めることができます。
そのあたりのことは、次回以降に説明します。