arm_cmplx_dot_prod_q15関数
2つの複素配列の積和をとる

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

サンプルソース(DFFSKN40基板付属CD-ROMに収録) 2011/09/07追加
IARprojects\src\projects\arm_cmplx_dotp

引数と戻り値


説明(イメージ)

アキュムレータは64ビット、その後6ビット右シフトして32ビットに収める。

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

q15_t a[] = {10000, 20000, 30000, -11111, -22222, -12345};
q15_t b[] = {13579, -24680, 9999, -8888, 7777, 6666};
q31_t realout, imagout;

 : 中略

arm_cmplx_dot_prod_q15( a, b, 3, &realout, &imagout );

この関数を実行するとrealout, imagoutの中に結果が入っている。
配列の要素数はそれぞれ6、すなわち複素数の数は3になる。

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

下の写真は最初の複素数、これの実数部どうし、虚数部どうしをかけ合わせる。
a[0] = 10000 -> 0x2710 (実数部)
a[1] = 20000 -> 0x4E20 (虚数部)
b[0] = 13579 -> 0x350B (実数部)
b[1] = -24680 -> 0x9F98 (虚数部)


下の写真は2番目の複素数、これの実数部どうし、虚数部どうしをかけ合わせる。
a[2] = 30000 -> 0x7530 (実数部)
a[3] = -11111 -> 0xD499 (虚数部)
b[2] = 9999 -> 0x270F (実数部)
b[3] = -8888 -> 0xDD48 (虚数部)


下の写真は3番目の複素数、これの実数部どうし、虚数部どうしをかけ合わせる。
a[4] = -22222 -> 0xA932 (実数部)
a[5] = -12345 -> 0xCFC7 (虚数部)
b[4] = 7777 -> 0x1E61 (実数部)
b[5] = 6666 -> 0x1A0A (虚数部)


下の写真は積和の結果。
実数部が0x 003E B08D = 4,108,429
虚数部が0x FF8E 3DDB = -7,455,269


まめ知識
乗算はいわゆる「複素乗算」ではなく、実数部どうし、虚数部どうし、それぞれ独立してかけ合わせたもの。
累積後に6ビット右シフトしていることに注意。

戻る

Top Page