arm_cmplx_mag_q15関数 |
複素配列の各要素の絶対値を求める |
関数のソース(CMSIS 2.0以上をダウンロード・インストールする必要あり) CMSIS_2_00\CMSIS\DSP_Lib\Source\Cortex-M4-M3\BasicMathFunctions\arm_cmplx_mag_q15.c サンプルソース(DFFSKN40基板付属CD-ROMに収録) 2011/09/08追加 IARprojects\src\projects\arm_cmplx_mag 引数と戻り値 説明(イメージ) 使用例(サンプルソースの一部)
配列の要素数はそれぞれ6、すなわち複素数の数は3になる。 実験 上記のサンプルソースをDFFSKN40基板(デジタルフィルター社)にて実験した。Cortex-M4マイコンはPK40X256VMD100(Kinetis, フリースケール社)搭載。演算結果をLCDに16進数で表示している。 下の写真はn = 0のとき。 a[0] = 10000 -> 0x2710 (実数部) a[1] = -12345 -> 0xCFC7 (虚数部) 10000^2 + (-12345)^2 = 252,399,025 17ビット右シフトして1925 (= 0x0785) <-- 3.13フォーマットで1925/8192 = 0.23498 arm_sqrt_q15関数で平方根をとって7936 (= 0x1F00) 結果は2.14フォーマットなので実数で7936/16384 = 0.48437という意味。 下の写真はn = 1のとき。 a[0] = -20000 -> 0xB1E0 (実数部) a[1] = 30000 -> 0x7530 (虚数部) (-20000^2) + 30000^2 = 1,300,000,000 17ビット右シフトして9918 (= 0x26BE) <-- 3.13フォーマットで9918/8192 = 1.21069 arm_sqrt_q15関数で平方根をとって18025 (= 0x4669) 結果は2.14フォーマットなので実数で18025/16384 = 1.10015という意味。 下の写真はn = 2のとき。 a[0] = -32768 -> 0x8000 (実数部) a[1] = -32768 -> 0x8000 (虚数部) (-32768^2) + (-32768^2) = 2,147,483,648 17ビット右シフトして16384 (= 0x4000) <-- 3.13フォーマットで16384/8192 = 2.00000 arm_sqrt_q15関数で平方根をとって23170 (= 0x5A82) 結果は2.14フォーマットなので実数で23170/16384 = 1.41418という意味。 まめ知識 (実数部自乗+虚数部自乗)の時点では3.13フォーマット。 arm_sqrt_q15関数の入力は1.15フォーマットであるがゆえ結果的に2.14フォーマットになる。 極値でもオーバフローしない。 |