Z変換
デジタルフィルタの式(差分方程式)を多項式の割り算に置き換えて、周波数特性や安定性を調べる道具(Z変換)について説明します。
<注意>
このページでは、数式を表示するためにMathJaxを使用しています。ブラウザの設定でスクリプト実行をブロックしている場合、ページ内の数式が正しく表示されません。
Z変換とは
サンプルの並び\(\ x[0],\ x[1],\ x[2],\ \dots\ \)を、1つの式にまとめて表します。
定義 (Z変換)
\[ X(z) = \sum_{n=0}^{\infty} x[n]\, z^{-n} = x[0] + x[1]z^{-1} + x[2]z^{-2} + \cdots \]
\(\ z^{-n}\ \)は、「\(\ n\ \)サンプル目の値」であることを表す目印です。
こうしておくと、サンプルの並びの操作が、式の計算に置き換わります。
定理
- 並びどうしの和のZ変換は、Z変換の和になる。定数倍も同じ。
- 並びを\(\ k\ \)サンプル遅らせたもの\(\ x[n-k]\ \)のZ変換は、\(\ z^{-k}X(z)\ \)である。
2つ目の性質から、\(\ z^{-1}\ \)を掛けることは、1サンプル遅らせることにあたります。
フィルタの図で、遅延を\(\ z^{-1}\ \)と書いた箱で表すのはこのためです。
伝達関数
サンプリングとデジタルフィルタのIIRフィルタの式(差分方程式、差分方程式)の両辺をZ変換します。
\[ y[n] = \sum_{k=0}^{N-1} b_k\, x[n-k] + \sum_{k=1}^{M} a_k\, y[n-k] \]\[ Y(z) = \left(\sum_{k=0}^{N-1} b_k z^{-k}\right) X(z) + \left(\sum_{k=1}^{M} a_k z^{-k}\right) Y(z) \]\(\ Y(z)\ \)について解くと、出力は入力に、次の\(\ H(z)\ \)を掛けたものになります。
定義 (伝達関数)
\[ H(z) = \frac{Y(z)}{X(z)} = \frac{b_0 + b_1 z^{-1} + \cdots + b_{N-1} z^{-(N-1)}}{1 - a_1 z^{-1} - \cdots - a_M z^{-M}} \]
サンプルを1つずつ追う計算が、多項式の割り算1つにまとまりました。
2つのフィルタを続けて通すと、全体の伝達関数は、それぞれの伝達関数の積になります。
周波数特性
伝達関数に\(\ z = e^{i\omega}\ \)(\(\ \omega = 2\pi f/F_s\ \))を代入すると、周波数\(\ f\ \)の正弦波に対するフィルタの倍率と位相のずれが得られます。
定理
周波数\(\ f\ \)の正弦波を入れると、出力は振幅が\(\ |H(e^{i\omega})|\ \)倍、位相が\(\ \arg H(e^{i\omega})\ \)だけずれた正弦波になる。
\(\ z = e^{i\omega}\ \)は、複素数の平面で、半径1の円(単位円)の上の点です。
周波数を0からナイキスト周波数\(\ F_s/2\ \)まで上げることは、単位円の上を、\(\ z = 1\ \)から\(\ z = -1\ \)まで半周することにあたります。
FIRフィルタ(分母が1)の場合、これはサンプリングとデジタルフィルタの「FIRフィルタの周波数特性」の式そのものです。
極と零点
伝達関数の分子を0にする\(\ z\ \)を零点、分母を0にする\(\ z\ \)を極と言います。
分母の多項式は、差分方程式の特性方程式と同じものなので、極は特性方程式の解です。
定理 (安定性)
フィルタが安定である(入力が有限なら出力も有限で、インパルスの応答が0に近づく)のは、すべての極が単位円の内側にあるときである。
極と零点の位置から、周波数特性の形がおおよそ分かります。
- 単位円の上の点\(\ e^{i\omega}\ \)が極に近づくと、\(\ |H|\ \)は大きくなる(その周波数が強調される)。
- 零点に近づくと、\(\ |H|\ \)は小さくなる(零点が単位円の上にあれば、その周波数は完全に消える)。

例: 1次のローパスフィルタ
出力を、前の出力と入力の重み付きの平均にします。
\[ y[n] = a\,y[n-1] + (1-a)\,x[n], \qquad H(z) = \frac{1-a}{1 - a z^{-1}} \]極は\(\ z = a\ \)です。
\(\ 0 < a < 1\ \)なら、極は単位円の内側の\(\ z = 1\ \)(周波数0)の側にあるので、低い音を通し、高い音を弱めます。

\(\ a\ \)が1に近いほど、極が\(\ z = 1\ \)に近づき、高い音を強く弱めます。
直流(\(\ f = 0\ \))での倍率は、どの\(\ a\ \)でも1(0dB)です。
差分方程式の例(目標へなめらかに近づける)と同じ式で、音に使えばこもった音に、値に使えばなめらかな動きになります。
例: くし形フィルタとエコー
\(\ D\ \)サンプル前の出力を\(\ g\ \)倍して足し戻すと、次の伝達関数になります。
\[ y[n] = x[n] + g\,y[n-D], \qquad H(z) = \frac{1}{1 - g z^{-D}} \]極は\(\ z^D = g\ \)の解で、絶対値\(\ g^{1/D}\ \)の円の上に、等間隔に\(\ D\ \)個並びます。

極のある向きの周波数、つまり\(\ F_s/D\ \)の整数倍で倍率が山になり、その間で谷になります。
櫛の歯のような形なので、くし形フィルタと言います。
図の例(\(\ D = 8,\ g = 0.7\ \))では、4kHzおきに+10.5dBの山と−4.6dBの谷が並びます。
DSPのエコーは、ディレイが16ミリ秒単位(512サンプル単位)と長く、間にFIRフィルタも入りますが、フィードバックの部分は同じ形です(エコーを使う)。
FIRフィルタを無視すると、ディレイ16ミリ秒なら\(\ 32000/512 = 62.5\ \)Hzおきに山が並びます。
\(\ g\ \)(EFB)を1に近づけると、極が単位円に近づき、山が鋭くなって、特定の高さの音が長く響くようになります。
\(\ |g| \ge 1\ \)では極が単位円の外に出て、発散します。
例: BRRのフィルタ
BRRの復号は、4ビットの値\(\ s\ \)(粒度を掛けたもの)に、過去の2つの出力に係数を掛けたものを足します。
\[ y[n] = s[n] + a_1\,y[n-1] + a_2\,y[n-2], \qquad H(z) = \frac{1}{1 - a_1 z^{-1} - a_2 z^{-2}} \]| フィルタ | \(\ a_1\ \) | \(\ a_2\ \) | 極 | 極の絶対値 | 直流の倍率 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | なし | - | 1(0dB) |
| 1 | 15/16 | 0 | 0.9375 | 0.9375 | 16(24dB) |
| 2 | 61/32 | −15/16 | \(\ 0.953 \pm 0.170i\ \) | 0.968 | 32(30dB) |
| 3 | 115/64 | −13/16 | \(\ 0.898 \pm 0.073i\ \) | 0.901 | 64(36dB) |
どのフィルタも、極は単位円の内側の、周波数0に近いところにあり、低い成分を大きく、高い成分を小さくする(低い音を作りやすい)性質を持っています。

フィルタ2は、極が単位円に近く、偏角も少しあるので、ピッチ$1000(32kHz)で再生したとき約890Hzに鋭い山があります。
ピッチを変えると、この周波数も同じ割合で変わります。
BRRの4ビットの値は、このフィルタを通して元の波形を復元するための「差分」です。
なめらかで低い成分の多い波形は、フィルタ2や3を使うと、小さな差分で表せます。
多くのBRRのエンコーダは、ブロックごとに、元の波形との誤差が最も小さくなるフィルタを選んでいます。
一方で、極が単位円に近いフィルタは、差分に含まれる誤差も大きく増幅するので、急な変化の多い波形では、かえって雑音が増えることがあります。