2つの平方和の平方根の高速近似
アルファとベータの値が異なっていても、アルゴリズムで同じ値を与える点の軌跡
アルファ マックスプラスベータミニアルゴリズム [1] は、2つの平方の和 の平方根 の高速近似です。2つの平方の和の平方根は ピタゴラスの加算 としても知られ、 2辺の長さが与えられたときに直角三角形の斜辺、 2 次元 ベクトルの ノルム 、または 実部 と 虚部が与えられたときに 複素数 z = a + bi の 大きさを 見つけることができるため、便利な関数です 。
|
ず
|
=
1つの
2
+
b
2
{\displaystyle |z|={\sqrt {a^{2}+b^{2}}}}
このアルゴリズムは、平方および平方根演算の実行を避け、代わりに比較、乗算、加算などの単純な演算を使用します。アルゴリズムの α および β パラメータの選択によっては、乗算演算を単純な 2 進数のシフトにまで削減できるため、高速デジタル回路での実装に特に適しています。
近似値は と表現されます。
ここで は a と b の絶対値の最大値 、 は a と b の絶対値の最小値です 。
|
ず
|
=
α
ま
1つの
x
+
β
ま
私
ん
、
{\displaystyle |z|=\alpha \,\mathbf {最大} +\beta \,\mathbf {最小} ,}
ま
1つの
x
{\displaystyle \mathbf {最大値} }
ま
私
ん
{\displaystyle \mathbf {分} }
最も近い近似値として、および の最適値は および となり 、最大誤差は 3.96% になります。
α
{\displaystyle \alpha}
β
{\displaystyle \beta}
α
0
=
2
コス
π
8
1
+
コス
π
8
=
0.960433870103...
{\displaystyle \alpha _{0}={\frac {2\cos {\frac {\pi }{8}}}{1+\cos {\frac {\pi }{8}}}=0.960433870103。 ..}
β
0
=
2
罪
π
8
1
+
コス
π
8
=
0.397824734759...
{\displaystyle \beta _{0}={\frac {2\sin {\frac {\pi }{8}}}{1+\cos {\frac {\pi }{8}}}=0.397824734759。 ..}
改善点
のとき 、が 0 に近い 軸の近くで は より小さくなります(これは幾何学的に不可能です)。 が大きい場合は常に 結果を に置き換えて 、基本的に線を 2 つの異なるセグメントに分割することで、これを修正できます。
α
<
1
{\displaystyle \alpha <1}
|
ず
|
{\displaystyle |z|}
ま
1つの
x
{\displaystyle \mathbf {最大値} }
ま
私
ん
{\displaystyle \mathbf {分} }
ま
1つの
x
{\displaystyle \mathbf {最大値} }
|
ず
|
=
最大
(
ま
1つの
x
、
α
ま
1つの
x
+
β
ま
私
ん
)
。
{\displaystyle |z|=\max(\mathbf {Max} ,\alpha \,\mathbf {Max} +\beta \,\mathbf {Min} ).}
ハードウェアによっては、この改善はほぼ無料になります。
この改善を使用すると、間隔全体にわたって近い一致が不要になるため、どのパラメータ値が最適であるかが変わります。したがって、値を低くし たり高くしたりすることで 、精度をさらに高めることができます。
α
{\displaystyle \alpha}
β
{\displaystyle \beta}
精度の向上: このように線を 2 つに分割する場合、最初のセグメントを よりも良い推定値に置き換え 、それに応じて と を調整することで、精度をさらに向上させることができます 。
ま
1つの
x
{\displaystyle \mathbf {最大値} }
α
{\displaystyle \alpha}
β
{\displaystyle \beta}
|
ず
|
=
最大
(
|
ず
0
|
、
|
ず
1
|
)
、
{\displaystyle |z|=\max {\big (}|z_{0}|,|z_{1}|{\big )},}
|
ず
0
|
=
α
0
ま
1つの
x
+
β
0
ま
私
ん
、
{\displaystyle |z_{0}|=\alpha _{0}\,\mathbf {最大} +\beta _{0}\,\mathbf {最小} ,}
|
ず
1
|
=
α
1
ま
1つの
x
+
β
1
ま
私
ん
。
{\displaystyle |z_{1}|=\alpha _{1}\,\mathbf {最大} +\beta _{1}\,\mathbf {最小} 。}
ただし、ゼロ以外の値の場合は 、少なくとも 1 つの追加加算といくつかのビット シフト (または乗算) が必要になり、コストがほぼ 2 倍になり、ハードウェアによっては、そもそも近似値を使用する目的が達成されない可能性があることに注意してください。
β
0
{\displaystyle \beta _{0}}
参照
Hypot は 、オーバーフローやアンダーフローに対しても安全な正確な関数またはアルゴリズムです。
参考文献
^ Assim、Ara Abdulsatar Assim (2021)。「高速ベクトル振幅とアークタンジェント近似器のASIC実装」。 コンピューティング、通信、制御 。71 (4): 7–14。doi :10.18721/ JCSTCS.14401 。
Lyons, Richard G. デジタル信号処理の理解、セクション 13.2。Prentice Hall、2004 ISBN 0-13-108989-7 。
グリフィン、グラント。DSP トリック: マグニチュード推定器。
外部リンク