STM32のDSPを使う
お久しぶりです。もりゅーです。
今日はSTM32のDSP libraryで三角関数演算をしてみたいと思います。
環境
Windows10+STM32CubeIDE+NucleoG474RE
参考
以下のサイトが参考になります。
ioloa.com
簡単な使い方
1. CubeMXでの設定
プロジェクトの作り方などは他サイトさんを参照ください。特に特別なことはないです。
まずCubeMX画面で「Additional Software」を選択
開いた画面の左側で「CMSIS」を選択すると、こんな感じの画面になる。
始めてDSPなどを使用する場合はインストールが必要なので、右の方のinstallを選択
インストールが終わったらDSPでLibraryを選択しOK
CubeMXの左の方にAdditional Softwareが追加されるので、CMSIS DSPにチェックを入れる。
その後、コードを生成する。
こんな感じ(なんかエラーが出てるのは気にしないでください)
2. ライブラリファイルの設定
(なぜかここは手動。もしかしたら自動で持ってきてくれるオプションとかあるのだろうか・・・)
まず、CubeMXのrepositoryの以下のフォルダにある
・libarm_cortexM4lf_math.lib
・libarm_cortexM4lf_math.a
をプロジェクトの適当なところにインポートする。
なお、G4以外のシリーズを使う場合はフォルダが異なるので注意(特にCortexシリーズが異なるもの)
Paths and SymbolsでLibの設定を行う。
↑で置いたフォルダのパスを設定する。
3. 実際に使う
こんな感じのフォルダ構成になっているはず。
使用方法は簡単でCortex-M4の場合は以下のように書けば、中の関数を使用できる。
#define ARM_MATH_CM4 #include "arm_math.h"
4. 比較
比較したのは以下の三つ
・DSPの arm_sin_f32
・math.hのsinf
・学生時代にずっと使わせていただいていた軽量な三角関数
コンパクト三角関数 - ロボット工作研究室Wiki
なお、比較方法としては各演算を1000回繰り返し、
その間のタイマー(1usにつき1カウントインクリメントする設定)の進み量を演算時間とした
★DSPの arm_sin_f32 : 433 us
★math.hのsinf : 20789 us
★コンパクト三角関数 : 821 us
ちなみに最後の_hogeは sin(999)なのですが、真の値は
sin(999) = -0.0264607527....
なので、精度的には
math.h > DSP > コンパクト三角関数
ですね。