arm_scale_q15関数
配列の各要素を乗算・シフトする

関数のソース(CMSIS 2.0以上をダウンロード・インストールする必要あり)
CMSIS_2_00\CMSIS\DSP_Lib\Source\Cortex-M4-M3\BasicMathFunctions\arm_scale_q15.c

サンプルソース(DFFSKN40基板付属CD-ROMに収録)
IARprojects\src\projects\arm_scale

引数と戻り値


説明(イメージ)


使用例(サンプルソースの一部)

q15_t a[] = {10000, -10000, 32767, -32768};
q15_t c[] = {0, 0, 0, 0};

 : 中略

arm_scale_q15( a, 3276, 1, c, 4 );

この関数を実行すると配列cの中に結果が入っている。

実験
上記のサンプルソースをDFFSKN40基板(デジタルフィルター社)にて実験した。Cortex-M4マイコンはPK40X256VMD100(Kinetis, フリースケール社)搭載。演算結果をLCDに16進数で表示している。

下の写真はn = 0のとき。
a[0] = 10,000, scaleFactor = 3,276, shift = 1なので、
10,000 * 3,276 = 32,760,000
16進数で: 0x 01F3 E0C0
2進数で: 0001 1111 0011 1110 0000 1100 0000
15-1=14ビット右シフトで 0000 0111 1100 1111
16進数で: 0x 07CF
10進数で: 1999 = c[0]


下の写真はn = 1のとき。
a[1] = -10,000, scaleFactor = 3,276, shift = 1なので、
-10,000 * 3,276 = -32,760,000
16進数で: 0x FE0C 1F40
2進数で: 1111 1110 0000 1100 0001 1111 0100 0000
15-1=14ビット右シフトで 1111 1000 0011 0000
16進数で: 0x F830
10進数で: -2000 = c[1]


下の写真はn = 2のとき。
a[2] = 32,767, scaleFactor = 3,276, shift = 1なので、
32,767 * 3,276 = 107,344,692
16進数で: 0x 0665 F334
2進数で: 0000 0110 0110 0101 1111 0011 0011 0100
15-1=14ビット右シフトで 0001 1001 1001 0111
16進数で: 0x 1997
10進数で: 6551 = c[2]


下の写真はn = 3のとき。
a[3] = -32,768, scaleFactor = 3,276, shift = 1なので、
-32,768 * 3,276 = 107,347,968
16進数で: 0x 0665 F334
2進数で: 1111 1001 1001 1010 0000 0000 0000 0000
15-1=14ビット右シフトで 1110 0110 0110 1000
16進数で: 0x E668
10進数で: -6552 = c[3]


まめ知識
shiftの符号が正だと左シフト、負だと右シフトとなる。

戻る

Top Page