arm_cmplx_mult_cmplx_q15関数
2つの複素配列の各要素を乗算する

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

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

引数と戻り値


説明(イメージ)

乗算後は32ビットになる。その後17ビット右シフトして16ビットに収める。

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

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

 : 中略

arm_cmplx_mult_cmplx_q15( a, b, c, 3 );

この関数を実行するとcの中に結果が入っている。
配列の要素数はそれぞれ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 (虚数部)
c[0] = (a[0] b[0] >> 17) - (a[1] b[1] >> 17) = 4801 = 0x12C1


下の写真は最初の複素乗算の虚数部。
a[0] = 10000 -> 0x2710 (実数部)
a[1] = 20000 -> 0x4E20 (虚数部)
b[0] = 13579 -> 0x350B (実数部)
b[1] = -24680 -> 0x9F98 (虚数部)
c[1] = (a[0] b[1] >> 17) + (a[1] b[0] >> 17) = 188 = 0x00BC


下の写真は2番目の複素乗算の実数部。
a[2] = 30000 -> 0x7530 (実数部)
a[3] = -11111 -> 0xD499 (虚数部)
b[2] = 9999 -> 0x270F (実数部)
b[3] = -8888 -> 0xDD48 (虚数部)
c[2] = (a[2] b[2] >> 17) - (a[3] b[3] >> 17) = 1535 = 0x05FF


下の写真は2番目の複素乗算の虚数部。
a[2] = 30000 -> 0x7530 (実数部)
a[3] = -11111 -> 0xD499 (虚数部)
b[2] = 9999 -> 0x270F (実数部)
b[3] = -8888 -> 0xDD48 (虚数部)
c[3] = (a[2] b[3] >> 17) + (a[3] b[2] >> 17) = -2883 = 0xF4BD


まめ知識
乗算は複素数どうしの乗算である。
乗算後に17ビット右シフトして16ビットに収めている。Q3.13フォーマットになる。

戻る

Top Page