サンプリング周波数変換
目次
サンプリング周波数を変換する理由#
サンプリング周波数が異なるシステム間でデジタルデータを受け渡しするためには、サンプリング周波数を変換する必要があります。
例えば PCM オーディオの場合、CD や MD のサンプリング周波数は 44.1 kHz ですが、DVD-Audio は 48 kHz / 96 kHz / 192 kHz、YouTube なら 48 kHz です。そのため、例えば CD の音声信号を DVD や YouTube で使用するために、送信側か受信側のどちらかでサンプリング周波数を変換することになります。
AD 変換時のオーバーサンプリングなどでもサンプリング周波数変換が使用されます。
サンプリング周波数変換の概要#
デジタル信号は、時間方向・振幅方向それぞれに離散化された信号です。時間方向の離散化を標本化、振幅方向の離散化を量子化といいます。
サンプリング周波数変換は、時間方向に離散化されたデータの間隔を変換する処理です。
- サンプリング周波数を下げるときは、1 個のサンプルを取り出すごとにそれに続くサンプルを捨て去ります。
- サンプリング周波数を上げるときは、1 個のサンプルを取り出すごとに新たなデータを追加(挿入)します。
| 処理 | 処理名 | 処理方法 | LPF カットオフ |
|---|---|---|---|
| サンプリング周波数を下げる | 間引き(デシメーション) | 1 つのサンプルを取り出した後、続くサンプルを捨てる | 変換後のナイキスト周波数 |
| サンプリング周波数を上げる | 補間(インタポレーション) | 1 つのサンプルを取り出した後、0 を挿入する | 変換前のナイキスト周波数 |
変換比は正の整数のみ#
周波数変換の比は必ず正の整数です。サンプリング周波数を下げる場合は「整数分の 1」、上げる場合は「整数倍」になります。
「整数分の 1」「整数倍」ではない周波数へ変換したい場合は、間引きと補間を組み合わせて目的の周波数に変換します。
間引きと補間の用語#
| 処理 | 別名 | 係数の呼び方 |
|---|---|---|
| サンプリング周波数を下げる | 間引き・デシメーション | 間引き係数 / Decimation Factor |
| サンプリング周波数を上げる | 補間・インタポレーション | 補間係数 / Interpolation Factor |
間引き(デシメーション)#
変換前のサンプリング周波数 $f_1$ を、低速な $f_2$ に変換する場合を考えます。
ダウンサンプリング#
1 個のサンプルに対して、それに続く $\left(\dfrac{f_1}{f_2} - 1\right)$ 個を捨てます。この処理をダウンサンプリングといいます。
ダウンサンプリング・アップサンプリングという言葉は、文脈によっては間引き・補間全体を指すこともあるので注意が必要です。
アンチエイリアシング(間引き前の LPF)#
データを捨て去るだけでは、折り返し雑音により波形が歪んでしまいます。そのため、データを捨てる前にローパスフィルタをかける必要があります。これは標本化の際にアンチエイリアシングフィルタをかけるのと同じ考え方です。
このローパスフィルタを**間引きフィルタ(デシメーションフィルタ)**といいます。カットオフ周波数は変換後のナイキスト周波数 $f_2/2$ とします。
補間(インタポレーション)#
変換前のサンプリング周波数 $f_1$ を、高速な $f_2$ に変換する場合を考えます。
アップサンプリング#
各サンプルの後に、$\left(\dfrac{f_2}{f_1} - 1\right)$ 個のサンプルを挿入します。追加するサンプルの値は 0 です。この処理をアップサンプリングといいます。
0 を追加しただけでは波形はギザギザしています(折り返し雑音を拾っている状態)。
アンチエイリアシング(補間後の LPF)#
折り返し雑音を除去するために、0 を挿入した後にローパスフィルタをかけます。カットオフ周波数は変換前のナイキスト周波数 $f_1/2$ とします。
このローパスフィルタを**補間フィルタ(インタポレーションフィルタ)**といいます。
フィルタ設計例#
サンプリング周波数を 240 Hz から 960 Hz に上げる場合:
- サンプリング周波数:240 Hz
- 補間係数:4
- ローパスフィルタ:FIR フィルタ(35 タップ、カットオフ周波数:120 Hz)
カットオフ周波数は変換前のナイキスト周波数である 120 Hz に設定します。
ポイント: ローパスフィルタのカットオフ周波数は、間引きでも補間でも、低速側のナイキスト周波数です。
一般的なサンプリング周波数変換#
間引きや補間だけでは実現できない周波数変換を行うときは、間引きと補間を組み合わせます。
周波数変換の手順#
$f_1$ から $f_2$ へ直接変換できないので、別の周波数 $f_3$ に補間してから間引きを行います。一時的に使用する周波数 $f_3$ は、$f_1$ と $f_2$ の最小公倍数です。
$$ f_1 \xrightarrow{\text{補間}} f_3 \xrightarrow{\text{間引き}} f_2 $$アンチエイリアシング(LPF は 1 回でよい)#
補間と間引きを 1 回ずつ行うため、ローパスフィルタを 2 回かけるように思われますが、実際には 1 回で大丈夫です。
どちらもローパスフィルタなので、低い方のカットオフ周波数のフィルタを 1 回かければ折り返しひずみの原因となる信号を除去できます。
$$ \text{カットオフ周波数} = \min\!\left(\frac{f_1}{2},\ \frac{f_2}{2}\right) $$$f_1$・$f_2$ のうちナイキスト周波数が低い方より高い成分を 1 つのローパスフィルタで取り除けば、折り返し雑音は発生しません。
まとめ#
| 処理 | カットオフ周波数 |
|---|---|
| 間引き(f₁ → f₂、f₁ > f₂) | f₂ / 2(変換後ナイキスト周波数) |
| 補間(f₁ → f₂、f₁ < f₂) | f₁ / 2(変換前ナイキスト周波数) |
| 間引き+補間の組み合わせ | min(f₁/2, f₂/2) |
カットオフ周波数は常に低速側のナイキスト周波数に設定することで、折り返し雑音を防ぐことができます。