パルス密度変調(PDM)とは
パルス
密度変調(Pulse-density modulation、PDM)は、
デジタル信号を用いてアナログ信号を表現するための
変調方式の一つです。
パルス符号変調(PCM)が入力信号を異なる重みのパルス
符号に変換するのに対し、PDMでは入力信号をパルスの相対的な
密度に変換することで情報を伝達します。
PDMとPWMの違い
パルス幅変調(PWM)は、スイッチング周波数が固定されており、1つのサンプルに対応する全てのパルスが
デジタル信号内で連続している、PDMの特殊なケースと見なすことができます。例えば、8ビット分解能で50%の電圧を表す場合、PWM波形は128クロックサイクルでオンになり、残りの128サイクルでオフになります。一方、PDMでは同じクロックレートで、信号は他のサイクルごとにオンとオフを交互に切り替えます。両方の波形の
平均は50%になりますが、PDM信号の方がより頻繁に切り替わるのが特徴です。ただし、100%や0%のレベルでは、PWMとPDMは同じ波形になります。
PDMの数学的表現
PDMのビット列では、1は正極性のパルス(+A)、0は負極性のパルス(-A)に対応します。数学的には、次のように表すことができます。
math
x[n] = -A(-1)^{a[n]}
ここで、x[n]は二極ビット列(-Aまたは+A)、a[n]は対応する二極ビット列(0または1)を表します。全て1の連続は最大振幅(正)、全て0の連続は最小振幅(負)、1と0が交互の場合は振幅値ゼロに対応します。このバイポーラPDMビット列を
ローパスフィルタ処理することで、元の連続振幅波形を復元できます。
PDMの例
例えば、100回サンプリングされた正弦波の1
周期は、PDMビット列として以下のように表現できます。
010101101111011111111111111111111011111011011010101001001000000100000000000000000001000010010101
より高い周波数の正弦波の2
周期は、次のようになります。
0101101111111111111101101010010000000000000100010011011101111111111111011010100100000000000000100101
これらの例からわかるように、PDMでは正弦波の山では1の
密度が高く、谷では1の
密度が低くなります。
アナログ-デジタル変換
PDMビット列は、
ΔΣ変調のプロセスを経てアナログ信号から
符号化されます。このプロセスでは、アナログ信号の振幅に応じて1または0を生成する1ビット量子化器が使用されます。1と0は、それぞれ信号の上昇または下降に対応します。現実のアナログ信号は完全に一方向であることは稀なため、1と0が表す実際の振幅との差である
量子化誤差が発生します。この誤差はΔΣプロセスループで負にフィードバックされ、
量子化誤差を
平均化する効果があります。
デジタル-アナログ変換
1ビットDACの出力は、信号のPDMエンコーディングと同じになります。PDM信号をアナログ信号にデコードするプロセスは比較的単純で、PDM信号を
ローパスフィルタに通すだけです。
ローパスフィルタは本質的に信号を
平均化するため、パルスの
平均振幅は時間経過に伴うパルス
密度によって測定され、
ローパスフィルタがデコードに必要な唯一の要素となります。
生物学との関係
動物の神経系における情報表現の一つの方法として、感覚ニューロンの発火レートに関連する信号の大きさによるレートコーディングが知られています。PDMとの直接的な類似性として、各ニューロンでのイベント(活動電位)は1ビット(パルス)を表し、ニューロンの発火レートがパルス
密度を表していると考えられます。
PDMのアルゴリズム
PDMのデジタルモデルは、
ΔΣ変調器のデジタルモデルから導出できます。離散時間領域の信号をx[n]、1次
ΔΣ変調器の出力をy[n]とすると、離散周波数領域における
ΔΣ変調器の操作は以下のように表されます。
math
Y(z) = X(z) + E(z)(1 - z^{-1})
この式を整理すると、
math
Y(z) = E(z) +
X(z) - Y(z)z^{-1}
ここで、E(z)は
ΔΣ変調器の周波数領域
量子化誤差です。1-z^(-1)は
ハイパスフィルタを表すため、低周波ではE(z)の出力Y(z)に対する寄与は小さく、高周波では大きくなります。これは、
ΔΣ変調器のノイズシェーピングを示しており、量子化ノイズが低周波から高周波へと押しやられることを意味します。
逆
Z変換を用いることで、
ΔΣ変調器の入力と離散時間領域の出力とを関連付ける差分方程式に変換できます。
math
y[n] = x[n] + e[n] - e[n-1]
ここで、出力サンプルy[n]は実行中の
量子化誤差e[n]によって決まり、かつy[n]は1ビットで表されるため、2つの値しかとることができません。便宜的にy[n] = ±1と定義します。
math
y[n] = sgn(x[n] - e[n-1])
math
e[n] ← y[n] - (x[n] - e[n-1]) = sgn(x[n] - e[n-1]) - (x[n] - e[n-1])
この結果、最終的に入力サンプルx[n]はフィードバックされます。
疑似コードで表現すると、以下のようになります。
// 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の応用
PDMは、ソニーの
Super Audio CD(SACD)フォーマットで
Direct Stream Digitalという名前でエンコーディングとして使用されています。また、1本のデータ線でPDM
ステレオオーディオを送信するシステムもあります。この場合、マスタクロックの立ち上がりエッジが左チャネルからのビットを示し、立ち下がりエッジが右チャネルからのビットを示すというように、信号が多重化されています。
まとめ
PDMは、アナログ信号を効率的にデジタル表現するための重要な技術であり、オーディオ処理、通信、生物学における情報表現など、多岐にわたる分野で活用されています。