サンプリングレート変換 その3

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

1/n のサンプリング周波数にダウンコンバート

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

16 kHz のサンプリング値を

( 1, 2, 3, 4, 5, 6, ... )

とします. これを 8 kHz のサンプリング周波数に変換するために,単純にサンプルを間引いてみましょう.

( 1,    3,    5,    ... )

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

downsample_wrong.png

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

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

downsample_ok.png

m 倍のサンプリング周波数にアップコンバート

今度は 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 の鏡像も実在する信号として扱われてしまうので,これを除去します.

これで終了です.

upsample_ok.png

m/n 倍のサンプリング周波数に変換

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

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

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

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

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

となります.


添付ファイル: fileupsample_ok.png 515件 [詳細] filedownsample_ok.png 543件 [詳細] filedownsample_wrong.png 518件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-08-14 (木) 22:37:50 (5756d)