工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> 埋め込み

LPC55S69MCUでの高速フーリエ変換の計算

この記事では、LPC55S69 MCUが高速フーリエ変換(FFT)を計算できるようにするPowerQuadの別の部分である変換エンジンについて説明します。

>

NXPのLPC55S69マイクロコントローラには、さまざまなアプリケーションに適した多くの機能が含まれています。 LPC55S69 MCUとそのPowerQuadユニットには、さまざまなタスクを完了するために使用される独自のコンポーネント(BiquadおよびTransform Engines)が含まれており、メインCPUコアを他の目的のために解放します。

前回の記事「組み込みマイクロコントローラーを使用したデジタルフィルタリングについて」では、時間領域でデータサンプルをフィルタリングおよび処理するために広く使用されているさまざまな方法について説明しました。そのために、LPC55S69のPowerQuadユニットのBiquadエンジンを利用しました。

この記事では、LPC55S69 MCUが高速フーリエ変換(FFT)を計算できるようにするPowerQuadの別の部分である変換エンジンについて説明します。

離散フーリエ変換について

長さや温度などの日常的な測定を扱う場合、測定される特定のもののサイズと温度を決定するための一連のツールが存在します。時間領域信号の場合、測定ツールの選択はそれほど明白ではない可能性があります。図1に示されている次の信号の例を検討してください。

図1。 一定の間隔でサンプリングされた入力信号。

この信号をどのように測定、理解、説明できますか?可能な選択肢は、振幅、頻度、または統計からの方法で計算されたいくつかの値です。開始する1つの方法は、図2に示すように、既知の正弦波に対して対象の信号を測定することです。

図2。 正弦波ゲージ信号の隣の入力信号。どちらも同じ数のサンプルを持っています。

正弦波の振幅と周波数は簡単に固定でき、識別できるため、正弦波を入力信号と比較することができます。正しく行われた場合、入力信号と正弦波の間の内積の結果の値は、入力信号がゲージとどの程度相関しているかを定量化します。そのため、入力信号とゲージ信号を同じ長さの離散入力配列と考えるのが合理的であり、内積の計算が容易になります。

結果はスカラーであり、その大きさは入力信号が正弦波ゲージ信号とどの程度相関しているかに比例します。内積演算は、多くの乗算および加算演算に要約されます。これは、組み込みマイクロコントローラーを使用したデジタルフィルタリングについてで説明したのと同じ演算です。

この方法では、すぐに良い結果が得られます。ただし、この方法を適用した場合に機能しない特定のケースがあります。入力信号がゲージと同じ周波数の正弦波であるが、その位相がゲージに対して90度シフトしている場合、前述の方法の出力はゼロになります。目視検査では、ゲージと入力信号の間に相関関係があるように見えますが、説明する必要のある詳細があります。

図3。 新しいゲージ信号は、古いものと比較して90度位相シフトされています。

この動作は、薄い紙片の「長さ」を測定することと比較できます。定規を使用して紙片の片側の長さを決定する場合、紙の長さは10インチ、幅は1インチになることがあります。両方の数値は正しいですが、両方の測定値を取得するには、定規を90度回転させる必要がありました。両方の数値は技術的に正しく、それらを一緒に使用して、紙の真の「サイズ」(長さと幅)を取得できます。入力信号に関してこの問題を克服するために、図4に示すように、2番目のゲージを使用できます。

図4。 両方のゲージ信号を使用して、入力信号をより適切に定量化できます。

2つのゲージ(紫と緑で表示)の唯一の違いは、90度の位相シフトです。前の例えでは、これは定規を回転させるのと同じです。内積は、入力信号と各ゲージの間で計算され、最終出力が得られます。これにより、2つの値AとBが得られ、それぞれに入力がゲージの1つとどの程度相関しているかが含まれます。通常、これらは単一の複素数と見なされます:

output =B + i * A

次のステップは、入力信号をさまざまな周波数のゲージの範囲と比較することです(図5)。

図5。 複数のゲージを適用することもできます。緑のものは紫のものと比較して90度ずれています。

画像が示すように、最終結果にはいくつかの異なるゲージが組み込まれています。虚数部(紫色で表示)は、上記の2ゲージの例と同様に、緑色の信号(実数部)と比較して90度位相シフトされています。異なるゲージの数に制限はありません。

離散フーリエ変換(DFT)と呼ばれるこの手法を使用すると、問題の対象となるすべての周波数で出力のスペクトルが生成されます。テクニックを数学的に次のように述べることができます:

式1。 DFTの数学的記述。

ここで、Nは入力信号のサンプル数、kは(コ)サイン基準ゲージの周波数です。

高速フーリエ変換(FFT)の制限

FFTは、DFTを計算するための数値的に効率的な方法であり、上記の方法と比較して、乗算と加算の演算が少なくて済みます。ただし、入力にはいくつかの制限があります。

  1. 入力の長さは2の累乗でなければなりません。
  2. 任意の入力長と出力の周波数間隔は許可されていません。出力ビンは、入力信号のサンプルレートを入力のサンプル数で割った間隔で配置されます。たとえば、入力が48 kHzでサンプリングされた256ポイントの信号である場合、出力アレイは187 Hz(48.000を256で割った値)の間隔の周波数に対応します。
  3. 入力が実数で構成されている場合(たとえば、ADCから取得したサンプル)、出力は対称になります。たとえば、入力が64個のサンプルで構成されている場合、FFT結果も64個の複素数で構成されます。ただし、出力配列の後半には、前半の複素共役が含まれています。

PowerQuadFFTエンジンの使用

DFT / FFT演算の背後にある数学は、単純な乗算および加算演算によって実行できます。これは、LPC55S69MCUのPowerQuadなどの専用コプロセッサーに数学演算をアウトソーシングするのに理想的です。このため、メインCPUコアは他のタスクを自由に実行できます。

PowerQuad FFTエンジンの利用は単純なプロセスであり、公式SDKには、コプロセッシング機能を示すサンプルプロジェクトが付属しています。特に、powerquad_transformと呼ばれる1つの例は、FFT計算プロセスを示しています。

powerquad_transform.cファイルには、さまざまなFFTエンジンモードをテストするいくつかの関数が含まれています。それらの1つは、PQ_RFFTFixed16Example関数です。この例では、16ビット整数データを受け入れるようにPowerQuadを初期化します。 PowerQuad変換エンジンは整数のみをサポートするため、浮動小数点データは事前​​に固定小数点値に変換する必要があります。

FILTER_INPUT_LENは、入力サンプルの数を定義します。結果の値の実数部と虚数部を格納する必要があるため、出力配列は2倍の長さになります。

図6。 コードのこの部分は、テストデータと期待される結果を定義します。

最後の配列には、結果を検証するためのテストデータが含まれています。上記のように、配列の後半に複素共役が含まれていることに注意してください。さらに、共役は等しくありません(たとえば、ペア76、-50、および77,49)。とにかく、データが初期化されると、次のデータ構造を使用してPowerQuadを構成します。

図7。 サンプルプログラムのこの部分は、PowerQuadユニットを構成および初期化します。

アルゴリズムがオーバーフローしないように、入力をダウンスケールする必要があります。このプロセスは、上の画像の2行目で発生します。 FILTER_INPUTA_PRESCALERは、32(2の5乗)サンプルがあるため、5に設定されます。事前スケーリングはPowerQuadのもう1つのハードウェア機能であり、予想されるテスト結果で観察された不正確さの理由である可能性があります。

すべてがセットアップされると、入力領域と出力領域の場所がPowerQuadユニットに渡されます。これは、PQ_transformRFFT関数で行われます。このメソッドは、いくつかの構成レジスタを設定し、制御レジスタに書き込むことによってPowerQuadを起動します。この例では、CPUはPowerQuadが終了するのを待ちます。待機は必ずしも必要ではなく、CPUが他のタスクを実行している間、PowerQuadは非同期で計算を実行できます。

数学演算にPowerQuadを利用する

PowerQuadは、LPC5500MCUシリーズのさまざまなデバイスで利用できる複雑な数学演算用のコプロセッサーです。 FFTを効率的に計算するための特別なエンジンが含まれており、メインのCPUコアから独立して実行できます。 LPC55S69 MCUのSDKには、PowerQuadをセットアップして使用する方法の例が含まれています。

NXPのコミュニティページには、LPC55S69 MCUを中心とした広範な情報、ディスカッション、記事が含まれています。

業界記事は、業界パートナーが編集コンテンツに適さない方法でAll About Circuitsの読者と有用なニュース、メッセージ、テクノロジーを共有できるようにするコンテンツの形式です。すべての業界記事は、読者に有用なニュース、技術的専門知識、またはストーリーを提供することを目的とした厳格な編集ガイドラインの対象となります。業界記事で表明されている見解や意見はパートナーのものであり、必ずしもAll AboutCircuitsやそのライターのものではありません。


埋め込み

  1. クラウドコンピューティングと仮想化の関係を理解する
  2. 最高のクラウドコンピューティングコースは何ですか?
  3. サーバーレスの採用を拡大する上での最大の障害
  4. クラウドコンピューティングインフラストラクチャ;基本を理解する
  5. 大きな勝利:ゲームにおけるクラウドコンピューティング
  6. なぜクラウドに移行するのですか?クラウドコンピューティングの10のメリット
  7. 英国のクラウドコンピューティングの仕事トップ10
  8. AIコンピューティングのためのニューロモルフィックチップの主張
  9. アドバンテックは、NVIDIAを使用してクラウドからエッジへの高速コンピューティングを実現します
  10. エッジコンピューティング革命をリードする6つの組織タイプ
  11. IoTとエッジコンピューティングの関係