arm_abs_q15関数 |
配列の各要素の絶対値を求める |
関数のソース(CMSIS 2.0以上をダウンロード・インストールする必要あり) CMSIS_2_00\CMSIS\DSP_Lib\Source\Cortex-M4-M3\BasicMathFunctions\arm_abs_q15.c サンプルソース(DFFSKN40基板付属CD-ROMに収録) IARprojects\src\projects\arm_abs 引数と戻り値 説明(イメージ) 使用例(サンプルソースの一部)
実験 上記のサンプルソースをDFFSKN40基板(デジタルフィルター社)にて実験した。Cortex-M4マイコンはPK40X256VMD100(Kinetis, フリースケール社)搭載。演算結果をLCDに16進数で表示している。 下の写真はn = 0のとき。 a[0] = 10,000なので、 16進数で: 0x 2710 正の数なので絶対値は同じく: 0x 2710 10進数で: 10,000 = c[0] 下の写真はn = 1のとき。 a[1] = -12,345なので、 16進数で: 0x CFC7 2進数で: 1100 1111 1100 0111 ビット反転して: 0011 0000 0011 1000 1を足して: 0011 0000 0011 1001 16進数で: 0x 3039 10進数で: 12,345 = c[1] 下の写真はn = 2のとき。 a[2] = -32,767なので、 16進数で: 0x 8001 2進数で: 1000 0000 0000 0001 ビット反転して: 0111 1111 1111 1110 1を足して: 0111 1111 1111 1111 16進数で: 0x 7FFF 10進数で: 32,767 = c[2] 下の写真はn = 3のとき。 a[3] = -32,768なので、 16進数で: 0x 8000 2進数で: 1000 0000 0000 0000 ビット反転して: 0111 1111 1111 1111 1を足して: 1000 0000 0000 0000 ←正の数なのにMSBが1になっている。 その場合、正の最大値0111 1111 1111 1111で飽和させる。 16進数で: 0x 7FFF 10進数で: 32,767 = c[3] |