arm_sqrt_q15関数
sqrt(平方根)を求める

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

サンプルソース(DFFSKN40基板付属CD-ROMに収録)
IARprojects\src\projects\arm_sqrt

引数と戻り値


説明(イメージ)




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

q15_t x[] = {30000, 16384, 8192, 3276};
q15_t sqrtVal[] = {0, 0, 0, 0};

 : 中略

for(n = 0; n < 4; n++) stat = arm_sqrt_q15( x[n], sqrtVal+n );


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

下の写真はn = 0のとき。
x[0] = 30,000(16進で0x7530)なので、30,000 / 32,768 = 0.91552 という意味。
演算結果sqrtVal[0] = 0x 7A77、10進で31,351、すなわち31,351 / 32,768 = 0.95676


下の写真はn = 1のとき。
x[1] = 16,384(16進で0x4000)なので、16,384 / 32,768 = 0.5 という意味。
演算結果sqrtVal[1] = 0x 5A82、10進で23,170、すなわち23,170 / 32,768 = 0.70709


下の写真はn = 2のとき。
x[2] = 8,192(16進で0x2000)なので、8,192 / 32,768 = 0.25 という意味。
演算結果sqrtVal[2] = 0x 3FFF、10進で16,383、すなわち16,383 / 32,768 = 0.49996


下の写真はn = 3のとき。
x[3] = 3,276(16進で0x0CCC)なので、3,276 / 32,768 = 0.1 という意味。
演算結果sqrtVal[3] = 0x 2877、10進で10,359、すなわち10,359 / 32,768 = 0.31613


まめ知識
いわゆるニュートン法で平方根を求める。漸化式は10回繰り返す。逆数を求めるのにarm_recip_q15という関数を使う。

戻る

Top Page