アプリケーションノート

カスタムリアルタイムフィルターによるノイズとトランジェントの低減

Mokuクラウドコンパイルの実装

3月に更新27、2024

このアプリケーションノートでは、Moku Cloud Compile とマルチインストゥルメントモードを利用して、一般的な移動平均フィルターを開発する方法を説明します。オシロスコープと周波数応答アナライザーの両方を使用して、この基本的な有限インパルス応答 (FIR) フィルターを調べます。次に、次を使用して 5 点中央値フィルターを開発、展開、および検査します。 Moku:Pro, Moku:Labまたは Moku:Go デバイス。この方法で線形フィルタと非線形フィルタを組み合わせると、多くの制御またはセンシング アプリケーションで過渡現象を効果的に除去し、ノイズを低減できます。

Mokuクラウドコンパイル

Moku Cloud Compile (MCC) は、カスタム ハードウェア記述言語 (HDL) コードを迅速にコンパイルして Moku デバイスに展開できるようにする Liquid Instruments サービスです。 MCC は、Moku 内の FPGA をカスタム コードにオープンし、ユーザーが特定の機能を開発できるようにします。カスタム関数の導入に役立つさまざまな例とサポートを提供します。

 

移動平均フィルター

移動平均フィルターは、非常に簡単に言うと、連続する信号サンプルの数 (n) の平均です。方程式は次のとおりです。

ここで、x(t) は離散時系列入力信号、y(t) は出力信号です。たとえば、n = 4 の場合は、次のようになります。

この単純なフィルターは、信号内のノイズを低減するのに非常に便利です。無相関のランダム (ホワイト) ノイズの場合、この移動平均関数はノイズを除去し、鋭いステップ応答を維持するのに最適ですが、阻止帯域のパフォーマンスは低くなります。これをハードウェアで実装すると、加算器と 2 つの除算だけが必要となるため、ハードウェア リソースが限られている場合に便利です。ハードウェアでの任意の数による除算は、FPGA では単純ではありません。通常、このフィルターは、n が 2 の累乗 (つまり、n = XNUMX^N) であることを保証し、除算を N バイナリ ビットの右シフトに減らすことによって実装されます。

図 1: バイナリビット単位のシフト

ハードウェアを直接実装すると、図 2 のようになります。

図 2: 移動平均を実装する一連の加算

この実装には 2^N-1 個の加算器が必要となり、ハードウェアの点で高価になります。一連の深い加算器では、適切なタイミング パフォーマンスを満たすためにクロック レジスタも必要になる可能性があります。次のことを理解することで、これを改善できます。

したがって、より一般的には図 3のようになります。

図 3: アキュムレータの実装

これにより、各出力が前の出力と現在の入力に依存していることが認識されます。 これで、移動平均関数をアキュムレータ、2 つの減算関数、および 2^N 除算のためのビット単位の右シフトが続く n 段シフト レジスタに縮小しました (図3)。 N > 4の場合、このハードウェア節約は重要になり、制限要因は2^N ステージシフトレジスタです。 さらに、タイミング制約を満たすためにクロックされる要素をさらに追加する必要はありません。

 

VHDLの実装

図4は、VHDL実装のコアを示しています。 このフィルターのコアは非常にシンプルで、コードはわずか 12行です。 p_moving_averageは最後の N 個のサンプルの時間履歴です。8行目は最新の入力を先頭に追加し、最も古い入力を削除しています。 ライン9では、アキュムレータ r_acc が新しい入力を加算しており、ライン10では出力に必要なビット単位のシフト (除算) を生成しています。

図 4: 移動平均 VHDL コード

コンパイルとデプロイ

この VHDL コードのコンパイルと合成は簡単です。始めるには、にアクセスしてください コンパイル.liquidinstruments.comをクリックし、コードをアップロードして、ビルドを選択します。 Liquid Instruments サーバーは、コードを実装するために FPGA 上で必要なハードウェア構成を定義するファイルまたはビットストリームを生成します。 Moku:Go および Moku:Lab の場合、コンパイルには約 5 分かかります。 Moku:Pro の場合、FPGA のサイズがはるかに大きいため、20 分近くかかります。

コンパイルとデプロイの詳細については、こちらをご覧ください。

 

MCC 移動平均フィルターのテスト

この移動平均フィルタをテストするには、図5に示すように、Moku:Goのマルチ機器モード (MiM) を使用します。このモードでは、サンプルレート 31.25 MHz の 2つの計測器を導入できます。 また、このフィルターを Moku:Pro でテストすることも可能です。これにより、MiM で 4つの同時計測器と 312.5 MHz の入力サンプルレートが可能になります。

 

スロット 1 には Moku Cloud Compile 移動平均フィルターが含まれ、スロット 2 にはオシロスコープ機器が含まれます。オシロスコープを使用して、アナログデジタル (ADC) 入力 1 から供給されるフィルター処理された信号とフィルター処理されていない信号を観察します。オシロスコープには、テスト信号の生成に使用される波形発生器も統合されています。この場合、オシロスコープの内蔵波形発生器を使用して 2 kHz の方形波を生成し、それを出力 1 に駆動します。信号を外部で 60 dB 減衰させ、Moku:Go のノイズ フロア近くまで駆動します。次に、この信号を入力 1 に戻します。

 

 

図 5: マルチ機器モードでのフィルターテストのセットアップ

図 6 では、青いトレースに減衰後のノイズの多い方形波が見られます。赤いトレースは、非常にきれいな方形波を持つ移動平均器の出力を示しています。これは、MCC と MiM の 1つのスロットを使用して有効になる便利なノイズ低減技術です。

図 6: MCC 移動平均フィルターを使用したノイズ低減

したがって、この最も単純なフィルタはノイズを低減するのに役立ちます。また、計算量も非常に軽く、必要なのはアキュムレータ、減算器、ビット単位のシフトのみです。これは、Moku:Pro では 312.5 MSa/s、Moku:Go では 31.25 MSa/s という非常に高速で実行できることを意味します。

ノイズ電力に注目すると、この平均フィルタによってノイズ電力が 2 分の XNUMX に低減されることがわかります。N;ノイズ振幅は√2で減少しますN。私たちの実装では N=8 を使用しているため、ノイズ振幅は元の 6.25% (1/16) に低減されるはずです。

図 7 は、振幅がそれぞれ 161.2 mV と 9.162 mV の Moku:Go 入力ノイズ (青) と移動平均信号 (赤) を示しています。このことから、フィルター後のノイズの振幅は、元のノイズの予想係数 1/16、つまり 9.162 / 161.2 mV = 0.057に近いことがわかります。このフィルターは動作しており、期待を満たしています。

MCC - 平均化された入力ノイズ

図 7: 平均入力ノイズ

周波数応答

Moku 周波数応答アナライザー (FRA) 機器を使用すると、移動平均の周波数応答を簡単に決定できます。 FRA は、出力で周波数掃引正弦波を駆動し、その結果の入力での振幅と位相を測定します。図 8 はテストのセットアップを示しています。

図 8: 周波数応答アナライザー MiM 構成

図9は、MCC フィルターの周波数応答を示しています。これを理想的な移動平均フィルターの MATLAB プロットである図10と比較すると、移動平均フィルターが特に良好な阻止帯域減衰にならないことがわかります。

移動平均フィルタの周波数応答

図 9: 移動平均フィルターの周波数応答

                                                                                       理想的な移動平均フィルターの MATLAB プロット

図 10: 理想的な移動平均フィルターの MATLAB プロット

メディアンフィルター

メディアンフィルターは、小さな移動ウィンドウの中央値を決定する非線形フィルターです。入力サンプルはウィンドウを通過し、出力は任意の時点でのサンプルの中央値になります。移動平均フィルタは均一に分布したランダム ノイズのフィルタリングに適していますが、メディアン フィルタは非常に短いスパイクやインパルス ノイズのフィルタリングに適しています。画像処理に使用されることが多いですが、より一般的な信号処理にも役立ちます。

通常、ウィンドウの長さとして奇数のサンプル (3、5、または7ポイント) が選択されます。これは、出力が単に値順ウィンドウの中央のサンプルであることを意味します。

 

VHDLの実装

図11に、VHDLによる5点中央値関数の実装を示します。クロック信号の立ち上がりエッジごとに、図11の関数は5つの入力サンプルを低い値から高い値へと並べ替えます。この並べ替えは、12行目から20行目までの2つのネストされた「for」ループで行われます。したがって、中央値はソートされたウィンドウの3番目のサンプルとなり、これが22行目の出力に割り当てられます。

図 11: メディアン フィルターの VHDL コード

オシロスコープと Moku Cloud Compile スロットをオシロスコープの波形ジェネレータで使用することにより、移動平均フィルタと同じ方法でメディアン フィルタの時間領域パフォーマンスを分析できます。

図12は、ノイズピークが大幅に減少し、フィルタ未処理のノイズのピークツーピーク測定値がフィルタ後の 3.66 mV から 305 μV に低下していることを示しています。これは1/12の削減であり、移動平均フィルター(1/16) ほど効果的ではありません。

図 12: メディアン フィルターの時間領域のパフォーマンス

メディアン フィルターの重要な機能はインパルス ノイズを除去することであるため、インパルスを追加した方形波を使用してそのパフォーマンスも調べます。図 13 は、前縁のスパイクと低レベル途中のスパイクを持つ方形波を示しています (青のチャネル B)。フィルタリングされた信号は、メディアン フィルタによってスパイクが除去されたものの、鋭い立ち上がりエッジと立ち下がりエッジが保持された後の方形波を示しています (赤色のチャネル A)。

中央値でスパイクノイズを除去

図 13: スパイク ノイズを除去する中央値

このメディアンフィルターを、MCC クロックレートが 31.25 MHz の Moku:Goでコンパイルしてテストしました。 ただし、この例をMoku:Proでテストする場合、クロックレートが 312.5 MHz に増加したため、実装を調整する必要がありました。 図11の実装では、変数を使用してネストしたforループを使用します。 これにより、Moku:Proクロックレートの3.2 ns 周期を超える伝播遅延 (図14) を持つ、大規模で深い組み合わせロジックネットが合成されます。 タイミングを満たすためには、クロックされる要素間のロジックの伝播遅延がクロック周期よりも小さくなければなりません。

ロジックによる伝播遅延

図 14: ロジックによる伝播遅延

大きな論理ブロックをレジスタまたはクロック要素によって区切られたセグメントに分割する必要があります。 VHDL では、変数ではなく信号を使用してこれを実現します。この場合、コーディングを容易にするためにロジックを5つの段階に分割します。入力から出力までの遅延が約5クロックサイクルであるため、このアプリケーションには適しています。

図 15 は、この XNUMX 段階のパイプライン化中央値アルゴリズムの XNUMX 段階を示しています。ダウンロード可能なプロジェクト ファイルで完全な VHDL を見つけます。 こちら.

図 15: パイプライン化されたメディアン フィルターの XNUMX ステージ

Moku:Proメディアンフィルターテスト

MiM の Moku:Pro と任意波形発生器 (AWG) を使用して、ノイズ スパイクのある方形波を作成します。次に、AWG の出力を MCC メディアン フィルターに接続し、オシロスコープで効果を観察します。

この MiM セットアップを図 16 に示します。図 17 に示すように AWG を構成しました。その出力は Moku:Pro の出力 3 にアナログ信号を駆動し、同軸ケーブルを介して入力 3 にループされます。 Moku Cloud Compile スロットのメディアン フィルターを使用し、オシロスコープを使用してパフォーマンスを観察しました。

図 16: Moku:Pro メディアン フィルター テスト システム

最後に、図 18に示すように、メディアンフィルターの性能を観察します。メディアンフィルターは、方形波の鋭いエッジを保持しながら、インパルスを除去しています。ステージングされたクロックパイプラインの挿入によって生じる処理遅延により、約44 ns の遅延が発生します。

任意波形発生器、インパルスを含む方形波

図 17: 任意波形発生器、インパルスを含む方形波

 

Moku:Pro メディアンフィルター操作

図 18: Moku:Proメディアンフィルターの操作

まとめ

このアプリケーション ノートでは、移動平均フィルターとメディアン フィルターの実装について説明しました。これらを実装するために、Moku Cloud Compile を利用してフィルターを構築し、それらを Moku:Go デバイスにデプロイしました。次に、増加した Moku:Pro クロック レートとの互換性を確保するために設計を変更しました。 MCC フィルターの動作を検証するために、マルチ機器モードを使用して、完全にカスタマイズ可能なフィルター、オシロスコープ、および任意波形発生器を接続しました。この実装により、デジタル信号処理アプリケーションで信号エッジを維持しながら効率的なノイズ低減が可能になります。

コードのダウンロード

アプリケーションノートのコードは、こちらからダウンロードできます。

Moku:デモ版

macOS および Windows 用の Moku: アプリは、次のサイトからダウンロードできます。 ウェブサイト。デモ モードはハードウェアなしで動作し、Moku:Go、Moku:Lab、または Moku:Pro の使用方法を紹介します。 Moku: アプリは次の目的でも利用できます。 iPadOS Apple App Storeで。

ご質問がありますか、または印刷可能なバージョンが必要ですか?

連絡先: support@liquidinstruments.com.

参照

【1] www.mathworks.com/help/dsp/ug/how-is-moving-average-filter-Difference-from-an-fir-filter.html