ダイレクトコンバージョンとデュアルコンバージョン

備忘録です。例のビーコンモニタで、48kHz IQ サンプリングの音声から、必要な信号だけ 2kHz サンプリングで取り出す上で、できるだけ演算量の少ないディジタル信号処理の実装を考えています*1。もしかすると定石があるのかも知れませんが、いくつかアイデアを考え、その演算量を見積もってみました。

A 案

  1. 目的の信号をベースバンドまで(複素正弦波キャリアで)周波数シフトする。
  2. 複素 FIR フィルタに通して、目的の信号を取り出す。
  3. ダウン・サンプリングする。

B 案

  1. 複素 FIR フィルタに通して、目的の信号を取り出す。
  2. 目的の信号をベースバンドまで(複素正弦波キャリアで)周波数シフトする。
  3. ダウン・サンプリングする。

C 案

  1. 一度、ゆるやかな実係数 FIR フィルタで(後段のダウン・サンプリングでエイリアシングが出ない程度まで)帯域を狭める。
  2. 一段目のダウン・サンプリングをする。(例えば、48kHz 標本化から 24kHz 標本化まで落とす。)
  3. 複素 FIR フィルタに通して、目的の信号を取り出す。
  4. ベースバンドまで周波数シフトする。
  5. 二段目のダウン・サンプリングで、所望のレートまで落とす。

今回の例では、C 案が一番演算量が少ないことが分かりました。A 案と B 案では、いずれも同じ急峻なフィルタを必要とし、またサンプリングレートが高いので、演算量が膨大になります。C 案では、多段(デュアルコンバージョン?)の処理が必要ですが、結果的に演算量が少なくなります。
なお、同じ C 案でも、最初のダウン・サンプリングでどこまで周波数を落とすかによって演算量が異なりました。いくつかのダウン・サンプリング(いずれも整数比)を検討し、今回は一段目で 48kHz 標本化から 16kHz 12kHz 標本化に変換する方法が良さそうに思えました。

後記

計算が間違っていました。12kHz に落とすのが、処理量最小みたいです。

*1:アナログだと、また別の視点が必要なのでしょう。