LabVIEWおよびLabVIEW FPGAでのFIR(有限インパルス応答)フィルタの実装方法

更新しました Dec 30, 2024

環境

ハードウェア

  • PXIe-5763

ソフトウェア

  • LabVIEW
  • LabVIEW FPGA Module

FIR(有限インパルス応答)フィルタは、特定の周波数成分を除去する目的で測定アプリケーションでよく使用されます。FFT(高速フーリエ変換)はデータを周波数領域に変換し、データセットをフィルタリングするために使用できますが、測定中にリアルタイムでデータをフィルタリングする場合には適していません。そのような場合にはFIRフィルタが必要です。このガイドでは、FIRフィルタの原理とLabVIEWおよびLabVIEW FPGAでの実装方法について簡単に説明します。

FIRフィルタの原理

FIRフィルタは加算と乗算の組み合わせで構成されています。単一のピークのFFTスペクトルを調べると(図1)、すべての周波数成分が均等に含まれています(図2)。例えばハイパスフィルタでは特定の低周波成分を除去し、低周波成分がない周波数スペクトルを生成します(図4)。図4のような適切なフィルタリングを行うスペクトルを時間領域に変換すると、波形は「小さな波」のようになります(図3)。

pngファイル

これは、元の時間領域データの各データポイントに「小さな波」を乗算し、それらを合計することでハイパスフィルタを適用したのと同じ結果を得ることができることを示しています。これがFIRフィルタの基本原理です。

 

LabVIEWでのFIRフィルタの実装

FIRフィルタを手動で適用するには、元の時間領域データポイントを操作するための係数セットを作成する必要があります。これらの係数は通常「タップ」と呼ばれます。この例では13タップを使用してFIRフィルタを実行します(図5)。タップは図3で得られた「小さな波」から導出されます。これらのタップを時間領域の波形に適用すると、元の周波数領域スペクトルと同じフィルタリング効果が得られます(図6)。タップは周波数領域スペクトルの逆FFTによって作成されるためです。

f2.png

ここでは下図の通り、LabVIEWのFilter.viを使用してFIRフィルタを適用する例(青)と図5に示すタップを使用して手動で計算する例(赤)を確認します。

f5.png

対象のデータには10 Hz、200 Hz、および450 Hzの正弦波とホワイトノイズが含まれています(図7および8)。FIRフィルタの周波数領域データを調べると(図6)、10 Hz成分がなく、200 Hz成分が50%減少し、450 Hz成分には影響がないことがわかります。したがって、このFIRフィルタは10 Hz成分を完全に除去し、200 Hz成分を50%減衰させます。Filter.vi(青)と手動FIRフィルタリング(赤)の結果を以下に示します。Filter.viはSignal Processing > Waveform Conditioning > Filterにあります。

f3.png

結果を見ると、10 Hz 成分が消え、200 Hz 成分が 50% 減少していることがわかります。この VI では、手動の方法がデータ セットに適用されますが、この計算を各データ ポイントごとに個別に実行して、結果をリアルタイムで監視できることが重要です (より詳細な説明と図は以下の FPGA セクションで確認できます)。

 

再構成可能スコープとFlexRIO用のLabVIEW FPGAでのFIRフィルタの実装

FPGA では、データ ポイントを非常に低いレイテンシで取得および操作できます。各データポイントをフィルタリングするには、FIR フィルタがよく使用されます。LabVIEW FPGA では、FIR Compilerは再構成可能スコープと FlexRIO で非常に便利です。この機能は、Programming > Xilinx IP > Digital Signal Processing > Filterにあります。詳細なマニュアルはXilinx のページで入手できます。

f6 FIR フィルター.png

この関数は、各データ ポイントに対して次の計算を実行します。基本的な計算は、前のセクションで説明した手動の方法と同じです。各データ ポイントはタップで乗算され、各時点ごとに合計されます。これは、サイクルごとに 1 つのデータ ポイントを読み取る FPGA の FIR フィルタリングの例です。

FPGA の FIR.png

FPGA VI がサイクルごとに複数のデータ ポイントを読み取る場合、FPGA ロジックはより複雑になります。FIR フィルタでは、「入力サンプリング周波数」と「クロック周波数」を入力して、並列入力用に構成する必要があります。たとえば、NI 5763 は 125 MHz でサイクルごとに 4 つのデータ ポイントを読み取ります。したがって、「クロック周波数」は 125 MHz、「入力サンプリング周波数」は 500 MHz です。FIR コンパイラは、「並列入力の数」を 4 として自動的に計算します。並列入力が増えると、FPGA のサイズが増加します。

次のステップ

タップに関しては、適切な係数を選択する必要があります。たとえば、周波数領域スペクトルのカットオフ周波数のエッジが急すぎると、信号は時間領域全体に広がります。さらに、FIR フィルターを FPGA に組み込むには、多くの場合、FPGA とフィルタ設計の両方に対する深い理解が必要です。

fx.png