SDRトランシーバー4号機(SDR#4)の製作「CICフィルタの検討」


写真はSDR#4で使用予定のSTM32マイコンボードの評価の様子。

2024.4.10

はじめに
 新たな製作プロジェクト「お気に入りのSDRトランシーバー4号機の製作」、今回はCICフィルターとデシメーションについて検討します。
 CICフィルターとデシメーションはSDR#4で初めて使う要素技術で、まずはエクセルで動作や特性確認からスタートです。

CICフィルターとは
 数100kHzの入力をADする場合、入力周波数の2倍以上のサンプリング周波数でADしますが、そのままのサンプリングでは、フィルター処理のタップ 数が多くなりすぎ、マイコンでの処理が重くなってきます。音声データに必要帯域は数10kHzもあれば十分で、サンプリングデーターを間引き(デシメーション) します。間引いた結果の新たなサンプリング周波数のエイリアシス対策として、間引く前にフィルター(CICフィルター)を通します。

デシメーションについて
 ADサンプリングをデシメーションした結果が最終出力のサンプリング周波数になります。最終のサンプリング周波数を1kHz単位の切りが良い周波数にして、かつ 必要な帯域幅を確保する周波数を選択しようとすると、選択範囲は限られてきます。
 今回は、ADサンプリング1Msps、デシメーション1/25、出力サンプリング40kspsで検討します。通常、FIRの後にもデシメーションしますが、必要ならあらためて 1/5と1/5デシメーションでやってみます。

  特性確認について

 Cicフィルター特性は左図のようなExcelで簡単に確認できます。(図では表の一部を切り取って表示しています)。
 D3セルにサンプリング周波数kHzで 1000、D4セルにデシメーション 25、D5セルに段数 3を入力
 A8セルから下に0〜適当に100まで、B8セルに0.0001(0ではエラーになるので)、B9セルに=(D$3/D$4)*(A9/D$4)以下A100まで 、C8セルに=SIN($D$4*PI()*$B8/D$3)/SIN(PI()*$B8/D$3)を入力し108行目まで、
 D8セルに=D$5*20*LOG(ABS(C8))を入力し、108行目までセルの右下を引っ張って(オートフィル)入力します。

特性

 CICフィルターでは、カットオフ周波数や帯域特性等を指定してすることはなく、サンプリング周波数、デシメーションと段数で特性は決定されます。
 入力1MHzでデシメーション25としたので、1000/25kHz毎に減衰点がでます。
 デシメーションにより、サンプリングは40kとなったのでエイリシアスは20k以上となります。例として、21kの信号は19kに折り返されますが、 使用する帯域がDC〜10kHz程度にすれば、実用状は問題ありません。一方39k付近の信号は使用帯域内に折り返してくるので妨害となりますが、この付近の信号は十分に 減衰しているので、妨害になりません。

  ソースコード作成準備

 CICフィルターを実際にソースコードで記述するやり方が良く理解できませんでしたがExcelでシミュレーションした例がWebに紹介されていたので、 セルの内容を確認することで理解できました、参考になりました。残念ながら現在HPは終了になっています。
 左図は自分なりに、実機をターゲットにしたExcelです。
 設定として、ADサンプリング間隔1us、IF入力周波数と振幅 455kHz 2048、LOCAL信号は 440kHz 2048。
 A列に0から500番程度、B列に0から1usステップで500us程度まで、C7セルに式、=$E$3*SIN(2*PI()*$C$3*B7)入力し500ヶ分下まで入力、
 D7セルに式、=$E$4*SIN(2*PI()*$C$4*B7)入力し500ヶ分入力。
 E7セルに式、=C7*D7としてIFとLOCAL信号を乗算しMIX波形データ―を作成、以下500ヶ分を入力。CICフィルターへの入力波形データになります。
 F8セルに式、=E8+F7を入力し1ヶ前の信号と現在の信号を加算します、以下同様に、=E9+F8の様に500ヶ程度下まで引っ張ります。
 G8セルに式、=F8+G7、H8セルに、=G8+H7と入力し、同様に1ヶ前の信号と現在の信号を加算し、500ヶ程度入力。
 波形データ―を加算していくことで、値がどんどん大きくなり、いずれオーバーフローします。他の紹介例では、「オーバーフローしても、問題なし」 の記述ですが、処理に必要な桁数範囲があるので、別途ソース作成時に確認していきます。
 次にH列データを25ヶ毎に間引いて、J列に記入していきます、J列には適当にJ9に記入しましたが、J10などでもOKです。I列には間引いたデータの時間を 記入。
 K10セルに式、=J10-J9を入力し現在のデータから1ヶ前のデータを減算します、同様にK11セルにJ11-J10と入力し下まで引っ張ります。
  同様にL11にK11-K10の値、M12にL12-L11の値を記入していき、M列に15ヶ程度のデータを作成します。  

ExcelグラフMIX出力を見てみる
 

左図は(クリックで拡大)、IF信号とLOCAL信号のMIX出力。Excel表B列(サンプリング間隔)とE列をグラフ化したもので 450kHz成分と450-440kHzの差成分が見てとれます。
 本来なら、450+440kHz成分もあるはずですが、Excelのグラフ機能では表示出来ていません。

Excelグラフで見てみる間引き出力

左図は(クリックで拡大)、CIC間引き出力。Excel表I列(サンプリング間隔)とM列をグラフ化したものです。散布図の近似がちょっといびつですが フィルターがかかりデータ間引きされた10kHz成分が見てとれます。
 本来なら、450+440kHz成分もあるはずですが、Excelのグラフ機能では表示出来ていません。

今後の予定
 CICとデシメーションの組み方について判ったところで、次回は実際にプログラムを作成して実行時間などを確認していきます。

   Top Menu