組み込みマイクロコントローラーによるデジタルフィルタリングの理解
PowerQuadユニットのDualBiquad IIRエンジンを詳しく見て、時間領域でデータサンプルをフィルタリングおよび処理するために広く使用されている方法について学びます。 LPC55S69MCUで。
時間の経過とともに、または時間領域で収集されたデータサンプルを処理する場合、最も基本的な操作の1つは、データを「フィルタリング」することです。特に組み込みマイクロコントローラーの場合、データをデジタルフィルター処理して最良の結果を達成し、CPUを解放して他のタスクを実行する一般的な方法を理解することが重要です。
この記事では、時間領域でデータサンプルをフィルタリングおよび処理するために広く使用されている方法について学習します。また、LPC55S69MCUのPowerQuadユニットのDualBiquad IIRエンジンを詳しく見てみましょう。これは、多くのフィルタリングのユースケースで役立つ多用途のDSPビルディングブロックです。
連続的にサンプリングされたデータの一般的なフィルター
時間領域でデータをサンプリングする場合、データは既知の固定レートで継続的に収集されます。時間領域フィルターは、このデータを入力として受け入れ、何らかの方法で変更された新しい信号を出力します。フィルタの出力は、別の時間領域信号であり、さらに処理するか、デジタル-アナログコンバータ(DAC)に転送することができます。
通常、フィルターは正弦波にどのように応答するかという観点からアプローチします。入力信号を単純な正弦波と見なすと、フィルターは入力の振幅と位相を調整できます。複素信号をフィルターに適用すると、信号の正弦波成分の振幅と位相が調整されます。フィルタが周波数範囲でどのように動作するかは、周波数応答と呼ばれます。
時間領域での標準的な操作は、いわゆる有限インパルス応答(FIR)フィルターによって実行されます。このフィルターは、最新のデータサンプルを以前に収集された要素と混合して、次の出力サンプルを取得します。
図1。 入力の履歴を使用したサンプルフィルター処理によるサンプル。
このようなフィルターを実装する1つの方法は、以前のサンプルを配列に格納し、簡単な方程式を使用してそれらを結合することです。
x [n] //最新の入力
x [n-1]、x [n-2] //前の2つの入力サンプル
y [n] //次の出力サンプル
y [n] =b0 * x [n] + b1 * x [n-1] + b2 * x [n-2]
この特定の擬似コードスニペットは、最新のサンプルと以前の2つのデータサンプルを組み合わせたものです。次の出力サンプルを取得するために結果を合計する前に、各データサンプルに個別の定数係数を乗算します。要約すると、これは単純な積和演算を表しており、定数係数と履歴の長さがフィルターの周波数応答を制御します。
係数に適切な値を選択することで、さまざまなタイプのフィルターを作成できます。フィルタが高周波を減衰させる場合、ローパスフィルタとして機能します。低周波数を減衰させることにより、結果のフィルターはハイパスフィルターとして機能します。 2つのアプローチを組み合わせて、バンドパスフィルターを作成することもできます。
FIRフィルターは概念的には単純ですが、周波数応答を正確に制御するには、かなりの数の以前のデータサンプルが必要になる場合があります。このフィルターは理解と実装が簡単ですが、従来のCPUで実行するのは、特に中程度のサイズの履歴では面倒な場合があります。これは、すべてのサンプルが出力を決定するために多くの乗算および加算演算を必要とするためです。
必要な履歴の量を減らす1つの方法は、次の出力サンプルを計算するときに、以前に決定されたフィルター出力を使用することです。これは、無限インパルス応答フィルター(IIR)と呼ばれる別のクラスのデジタルフィルターのルートです。
//この例では、以前に確立された命名規則を使用しています
y [n] =b0 * x [n] + b1 * x [n-1] + b2 * x [n-2] + a1 * y [n-1] + a1 * y [n-2]
上記の例は、バイクアッドフィルターとして知られるIIRフィルターの特殊なケースです。これは、カスケード接続してより大きなフィルターを構築できる一般的なビルディングブロックです。このアプローチでは、FIRフィルターと比較して、必要な周波数応答を実現するために必要な係数が少なくなります。このアプローチを使用する場合、考慮すべき特別なトレードオフがあります。フィードバックを使用すると、係数が正しく選択されていない場合にフィルターが振動する可能性があります。
また、すべての一般的なユースケースの係数を自動的に生成できる多くのツールが存在します。フィルタ係数を計算するための「クックブック」を見つけるのが一般的です。
図2。 係数を自動的に生成する多くのツールの1つ。
PowerQuad IIRBiquadエンジンの使用
LPC55S69 PowerQuadユニットには、IIRバイクアッドフィルターを計算するための専用ハードウェアが組み込まれています。収集されたデータサンプルをフィルタリングするためにPowerQuadを使用すると、CPUは他のタスクを実行できるようになります。
上で説明したように、フィルターアルゴリズムの実装は複雑ではありませんが、CPU時間を大幅に削減する可能性があります。 LPC55S69 MCUのPowerQuadユニットには、多くのフィルタリングや複雑な数学演算用に最適化された専用ハードウェアが含まれています。 AHBバスとArm®Cortex®-M33コプロセッサインターフェースを介して接続されています。
LPC55S69の標準開発環境は、無料のEclipseベースのIDEMCUXpressoです。 LPC55S69 SDKには多くの便利な例が含まれており、そのうちのいくつかはPowerQuadサンプルアプリケーションです。
図3。 PowerQuadデジタルフィルターの例を選択します。
「powerquad_filter」サンプルプロジェクトには、さまざまなフィルター構成の例がいくつか含まれています。 「powerquad_filter.c」ファイルには、基本的なフィルター設定を示すいくつかの関数があります。
以前の記事では、最も簡単な実装である「ダイレクトフォームI」を使用するフィルターについて説明しました。ただし、PowerQuadは、結果を変更せずに乗算および加算演算のフローを再調整するため、入力と出力の両方の履歴を保存する必要のない「ダイレクトフォームII」になります。代わりに、中間履歴v [n]が保存され、フィルター状態とも呼ばれます。
AHBバス上の少数のレジスタは、IIRフィルター操作用にPowerQuadをセットアップするための状態と係数を格納するために使用されます。 SDKの例では、フィルターの状態はPQ_BiquadRestoreInternalState関数で初期化されます。
それが完了すると、フィルターはデータサンプルを処理する準備が整います。これは、fsl_powerquad_filter.cのPQ_VectorBiquadDf2F32関数で行われます:
図4。 ベクトル化されたIIRフィルターの実装
この関数は、8の倍数の入力サンプルのブロックを処理するように設計されています。データは、MCR命令を使用して、LPC55S69のメインプロセッシングコアのレジスタから、接続されているコプロセッサ(この場合はPowerQuad)に転送できます。
次に、PowerQuadがフィルタリング作業を実行します。これは、LPC55S69のCortex-M33コアのいずれかで実行する場合よりも、多くの乗算および加算操作を実行するためのはるかに効率的な方法です。 PowerQuadが完了すると、MCR命令を使用して結果にアクセスできます。これにより、データがコプロセッサーから内部CPUレジスタに戻されます。
デジタルフィルタリング用のデュアルバイクアッドIIRエンジン
LPC55S69 MCUには、フィルタリングと複雑な数学演算を高速化するのに役立つPowerQuadユニット(2つの別個のバイクアッドエンジンを含む)が付属しています。 AHBバスレジスタはPowerQuadIIR機能を設定するために使用され、データはコプロセッサインターフェイスを介してPowerQuadコアとCortex-M33コアの間で交換されます。
MCUXpressoのLPC55S69SDKは良い出発点です。ただし、コードは理解しやすいように設計されているため、最適化されていません。 PowerQuadはフィルタリングアプリケーションを大幅に高速化できますが、CPUはPowerQuadコプロセッサとの間でデータを転送する必要があることに注意してください。
NXPには、ソフトウェアの構成を支援するための便利なIIRバイクアッドフィルター設計および視覚化ツールがあります。 NXPのコミュニティページでは、LPC55S69MCUのPowerQuadユニットとその機能についても詳しく説明しています。
業界記事は、業界パートナーが編集コンテンツに適さない方法でAll About Circuitsの読者と有用なニュース、メッセージ、テクノロジーを共有できるようにするコンテンツの形式です。すべての業界記事は、読者に有用なニュース、技術的専門知識、またはストーリーを提供することを目的とした厳格な編集ガイドラインの対象となります。業界記事で表明されている見解や意見はパートナーのものであり、必ずしもAll AboutCircuitsやそのライターのものではありません。
埋め込み