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ビットに収める。 使用例(サンプルソースの一部)
配列の要素数はそれぞれ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ビット右シフトしていることに注意。 |