arm_shift_q15関数
配列の各要素をシフトする

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

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

引数と戻り値


説明(イメージ)


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

q15_t a[] = {10000, -10000, 20000, -2000};
q15_t c[] = {0, 0, 0, 0};

 : 中略

arm_shift_q15( a, 1, c, 4 );

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

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

下の写真はn = 0のとき。
a[0] = 10,000, shiftBits = 1なので、
16進数で: 0x 2710
2進数で: 0010 0111 0001 0000
1ビット左シフトで 0100 1110 0010 0000
16進数で: 0x 4E20
10進数で: 20,000 = c[0]


下の写真はn = 1のとき。
a[1] = 12,345, shiftBits = 1なので、
16進数で: 0x 3039
2進数で: 0011 0000 0011 1001
1ビット左シフトで 0110 0000 0111 0010
16進数で: 0x 6072
10進数で: 24,690 = c[1]


下の写真はn = 2のとき。
a[2] = -12,345, shiftBits = 1なので、
16進数で: 0x CFC7
2進数で: 1100 1111 1100 0111
1ビット左シフトで 1001 1111 1000 1110
16進数で: 0x 9F8E
10進数で: -24,690 = c[2]


下の写真はn = 3のとき。
a[3] = 20,000, shiftBits = 1なので、
16進数で: 0x 4E20
2進数で: 0100 1110 0010 0000
1ビット左シフトで 1001 1100 0100 0000 ←正の数なのにMSBが1になっている。
この場合正の最大値で飽和させる。
16進数で: 0x 7FFF
10進数で: 32,767 = c[3]


まめ知識
shiftBitsの符号が正だと左シフト、負だと右シフトとなる。左シフトの場合LSB側は0で埋められる。右シフトの場合MSB側はMSBの値で埋められる。

戻る

Top Page