* サンプリングレート変換 その3 [#oefd5352]

本題のサンプリングレート変換の話に入りましょう.

** 1/n のサンプリング周波数にダウンコンバート [#o21b51d4]

例として,サンプリング周波数 16 kHz の信号をサンプリング周波数 8 kHz,つまり 1/2 のサンプリング周波数に変換することを考えてみましょう.

16 kHz のサンプリング値を
 ( 1, 2, 3, 4, 5, 6, ... )
とします.
これを 8 kHz のサンプリング周波数に変換するために,単純にサンプルを間引いてみましょう.
 ( 1,    3,    5,    ... )

この操作を周波数領域で見てみましょう.

#ref(downsample_wrong.png,center)

サンプリング周波数 16 kHz の信号には,最大で 8 kHz までの信号が入っている可能性があります.
この信号を単純に間引きして 8 kHz の信号に変換した場合,4 kHz 〜 8 kHz の成分が折り返し歪みとして現れることになります.

折り返し歪みが現れないようにするには,どうすればいいのでしょうか.
サンプリングの時同様に間引き前に 4 kHz 〜 8 kHz の成分を除去すればいいのです.
その後でサンプリング値を間引けば折り返し歪みは現れません.

#ref(downsample_ok.png,center)

** m 倍のサンプリング周波数にアップコンバート [#c75218a3]

今度は m 倍のサンプリング周波数に変換する場合について.
例として,8 kHz サンプリングの信号を 16 kHz サンプリングに変換する場合を考えてみます.

まず,サンプル値を水増しします.
その1で見たようにサンプリングとは「インパルス(ヒゲのように鋭い波形)列への変換」です.
8 kHz サンプリングの波形をそのまま 16 kHz サンプリングに持っていくには,間に 0 を挿入すればいいことになります.

 ( 1,    2,    3,    4, ... )
         ↓
 ( 1, 0, 2, 0, 3, 0, 4, 0, ... )

で,このままでは 8 kHz サンプリング時に現れた 4 kHz 〜 8 kHz の鏡像も実在する信号として扱われてしまうので,これを除去します.

これで終了です.

#ref(upsample_ok.png,center)

** m/n 倍のサンプリング周波数に変換 [#tda31d91]

今度は m/n 倍のサンプリング周波数に変換する場合を考えてみます.
例えば,44.1 kHz サンプリングの信号を 48 kHz に変換する場合はこれに当たります.
48000 / 44100 = 160 / 147 倍の変換です.

これは,上記の「m 倍に変換」と「1/n に変換」を組み合わせれば実現できます.
単純に処理をつなぎ合わせてみると

+ m 倍にサンプリング列を水増し
+ 鏡像をカット
+ 高い周波数をカット
+ n サンプルごとに間引き

となります.
が,「鏡像をカット」「高い周波数をカット」という2つの処理は1回の処理にまとめることができます.
まとめてしまうと

+ m 倍にサンプリング列を水増し
+ 変換前・変換後のサンプリング周波数で低いほうの周波数の 1/2 の周波数以上の成分をカット
+ n サンプルごとに間引き

となります.

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS