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

引数と戻り値


説明(イメージ)


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

q15_t a[] = {10000, -12345, -20000, 30000, -32768, -32768};
q15_t c[] = {0, 0, 0};

 : 中略

arm_cmplx_mag_q15( a, c, 3 );

この関数を実行すると配列cの中に結果が入っている。
配列の要素数はそれぞれ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フォーマットになる。
極値でもオーバフローしない。

戻る

Top Page