パルス密度変調

パルス密度変調（パルスみつどへんちょう、英:Pulse-density modulation、PDM）はデジタル信号でアナログ信号を表現するのに使われる変調方式の一つ。 パルス符号変調（PCM）では、入力信号を異なる重みのパルス符号に変換するが、PDMでは、入力信号をパルスの相対密度に変換する。 パルス幅変調(PWM)はスイッチング周波数が固定され、1つのサンプルに対応する全てのパルスがデジタル信号内で連続しているPDMの特殊な場合である。8ビット分解能の50%電圧の場合、PWM波形は128クロックサイクルでオンになり、残りの128サイクルでオフになる。PDM及び同じクロックレートでは、信号は他のサイクルごとにオンオフを交互に切り替える。両方の波形の平均は50%だが、PDM信号の方がより頻度高く切り替わる。100%か0%レベルの場合、これらは同じである。 パルス密度変調のビット列において、1は正極性のパルス(+A)、0は負極性のパルス(-A)に対応する。数学的には以下のように表すことができる。 x [ n ] = − A ( − 1 ) a [ n ]   {\displaystyle x[n]=-A(-1)^{a[n]}\ } x[n]は二極ビット列（-Aまたは+A）で、a[n]は対応する二極ビット列（0か1） 全て1からなるランは最大（正の）振幅値に対応し、全て0からなるランは最小（負の）振幅値に対応し、1と0が交互のものは振幅値ゼロに対応する。連続振幅波形は、バイポーラPDMビット列をローパスフィルタすることで取り戻すことができる。 100回サンプリングされ、PDMビット列として表される三角関数の正弦関数の1周期は以下のようになる。 0101011011110111111111111111111111011111101101101010100100100000010000000000000000000001000010010101 それより高い周波数の正弦波の2周期は以下のようになる。 0101101111111111111101101010010000000000000100010011011101111111111111011010100100000000000000100101 パルス密度変調では、正弦波の山には1が高密度であり、谷では1が低密度である。 PDMビット列は、ΔΣ変調の過程を介してアナログ信号から符号化される。この過程ではアナログ信号の振幅に応じて1や0を生成する1ビット量子化器が使用される。1や0は、それぞれ上りか下りの信号に対応する。現実世界では、アナログ信号は全てが一方向というのはまれなので、1や0とそれが表す実際の振幅の差である量子化誤差が存在する。この誤差はΔΣ過程ループで負にフィードバックされる。このようにして、全ての誤差は他の全ての量子化測定値及びその誤差に連続的に影響を及ぼすこととなる。これは量子化誤差を平均化する効果がある。 1ビットDACの出力は、信号のPDMエンコーディングと同じである。 PDM信号をアナログ信号にデコードする過程は単純である。PDM信号をローパスフィルタに通すだけである。ローパスフィルタが本質的には信号を平均化するためである。パルスの平均振幅は経時のパルス密度により測定されるので、ローパスフィルタがデコードの過程において必要とされる唯一のものである。 特に有名なものとしては、動物の神経系が感覚や他の情報を表す方法の1つに、感覚ニューロンの点火レートに関連する信号の大きさによるレートコーディングがある。直接的なアナロジーでは、各ニューロンでの出来事（活動電位と呼ばれる）はパルス密度を表すニューロンの点火レートで1ビット（パルス）を表す。 パルス密度変調のディジタルモデルは、ΔΣ変調器のディジタルモデルから得ることができる。離散時間領域の信号  x [ n ] {\displaystyle x[n]}  を1次ΔΣ変調器への入力とみなし、 y [ n ] {\displaystyle y[n]}  を出力とする。離散周波数領域において、ΔΣ変調器の操作は次のように表される。 Y ( z ) = X ( z ) + E ( z ) ( 1 − z − 1 ) {\displaystyle Y(z)=X(z)+E(z)\left(1-z^{-1}\right)} 整理すると Y ( z ) = E ( z ) + [ X ( z ) − Y ( z ) z − 1 ] ( 1 1 − z − 1 ) . {\displaystyle Y(z)=E(z)+\left[X(z)-Y(z)z^{-1}\right]\left({\frac {1}{1-z^{-1}}}\right).} ここで、 E ( z ) {\displaystyle E(z)}  はΔΣ変調器の周波数領域量子化誤差である。 1 − z − 1 {\displaystyle 1-z^{-1}}  はハイパスフィルタを表しているので、低周波では E ( z ) {\displaystyle E(z)}  の出力  Y ( z ) {\displaystyle Y(z)}  に対する寄与は小さく、高周波では大きくなる。これはΔΣ変調器のノイズシェイピングを示している。量子化ノイズは低周波から高周波の範囲へ「プッシュ」されます。 逆Z変換を使うことで、ΔΣ変調器の入力と離散時間領域の出力とを関連付ける差分方程式に変換することができる。 y [ n ] = x [ n ] + e [ n ] − e [ n − 1 ] {\displaystyle y[n]=x[n]+e[n]-e[n-1]} このとき考慮すべき制約が2つ出てくる。1つは各ステップにおいて、出力サンプル  y [ n ] {\displaystyle y[n]}  は「実行中」の量子化誤差  e [ n ] {\displaystyle e[n]}   y [ n ] {\displaystyle y[n]}  は1ビットとして表され2つの値しかとることができないということである。便利であるので y [ n ] = ± 1 {\displaystyle y[n]=\pm 1} y [ n ] = sgn ⁡ ( x [ n ] − e [ n − 1 ] ) = { + 1 x [ n ] > e [ n − 1 ] − 1 x [ n ] < e [ n − 1 ] = ( x [ n ] − e [ n − 1 ] ) + e [ n ] {\displaystyle {\begin{aligned}y[n]&=\operatorname {sgn}(x[n]-e[n-1])\\\\&={\begin{cases}+1&x[n]>e[n-1]\\-1&x[n]<e[n-1]\end{cases}}\\\\&=(x[n]-e[n-1])+e[n]\\\end{aligned}}} e [ n ] ← y [ n ] − ( x [ n ] − e [ n − 1 ] ) = sgn ⁡ ( x [ n ] − e [ n − 1 ] ) − ( x [ n ] − e [ n − 1 ] ) {\displaystyle e[n]\leftarrow y[n]-(x[n]-e[n-1])=\operatorname {sgn}(x[n]-e[n-1])-(x[n]-e[n-1])} これにより最終的に入力サンプル  x [ n ] {\displaystyle x[n]} フィードバックされる。 次の疑似コードはこのパルス密度変調の信号をPDM信号に変換するアルゴリズムを実行するものである。 // Encode samples into pulse-density modulation // using a first-order sigma-delta modulator function pdm(real[0..s] x, real qe = 0) // initial running error is zero var int[0..s] y for n from 0 to s if x[n] >= qe y[n] := 1 else y[n] := -1 qe := y[n] - x[n] + qe return y, qe // return output and running error PDMはソニーのSuper Audio CD(SACD)フォーマットでDirect Stream Digitalという名前で使用されているエンコーディングである。 1本のデータ線でPDMステレオオーディオを送信するシステムもある。マスタクロックの立ちあがりエッジは、左チャネルからのビットを示しており、立ち下がりエッジは右チャネルからのビットを示している。