2024年9月22日日曜日

STM32 CMSISのint→float変換の法則について

信号処理LOVERSの皆さんこんにちは.

STM32H723は、FLASH 512kB、RAM 512kB が内蔵されています.
広大で使いきれないだろうと思っていたのですが、FIRやFFTをドカドカ実装して遊んでいたら、
 FLASH 250kB
 RAM  200kB
も使ってしまって「あらまぁ」などと思っているところです.

それはさておき、、、便利に使っているCMSISには、配列演算関数がいろいろあります.
 arm_negate_f32()  配列符号反転
 arm_mult_f32()   配列同士の掛け算
 arm_copy_f32()   配列コピー

その中にint→float変換をする関数があります.
 arm_q31_to_float()  q31はint32のこと
この関数の変換法則ってどうなってるんですかね?

やってみました.この結論を見れば意味はわかりますよね?
つまり、int32範囲→-1~+1の範囲に写すという動作するのでした.

10進int32 10進int32     float
7fffffff  2147483647   1.000000e+00
7fffff     8388607   3.906250e-03
7fff       32767    1.525832e-05
7ff        2047    9.532087e-07
7f         127    5.913898e-08
7           7    3.259629e-09
0           0    0.000000e+00
8           8    3.725290e-09
80         128    5.960464e-08
800        2048    9.536743e-07
8000      32768     1.525879e-05
800000    8388608    3.906250e-03
80000000  -2147483648  -1.000000e+00

下半分は「負の整数になれ」というつもりでしたが符号拡張しないと負にならんでした.

かしこ

0 件のコメント:

コメントを投稿