Files
paparazzi/doc/pprz_algebra/scalar.tex
T

73 lines
2.0 KiB
TeX

\section{Scalar}
For scalar values are a few functions available
\subsection{Multiplication and Rightshift}
Represents $ a \multiplication b $ with a right shift about \textit{r}. This becomes close to
\begin{equation}
2^{-r} a \multiplication b
\end{equation}
but it is not the same.
\inHfile{INT\_MULT\_RSHIFT(a, b, r)}{pprz\_algebra\_int}
\subsection{$\sqrt x$ Squareroot}
Calculates the squareroot $y = \sqrt x$. The function uses the Babylonian method.
\begin{equation}
y_{n+1} = \frac 1 2 \left( y_n + \frac{x}{y_n} \right)
\end{equation}
\inHfile{INT32\_SQRT(out,in)}{pprz\_algebra\_int}
\subsection{atan2() 4-quadrant arctangent}
Calculates the 4-quadrant arctangent of two values, x and y:
\begin{equation}
a = atan2(y,x)
\end{equation}
The function uses a trick, which is desribed in detail at
\begin{itemize}
\item http://www.dspguru.com/comp.dsp/tricks/alg/fxdatan2.htm
\end{itemize}
In short:
\begin{figure}[h!]
\centering
\begin{tabular}{ccc}
\begin{minipage}{4cm}
\centering
\includegraphics[width=4cm]{xyvalues}
\end{minipage}
&
\begin{minipage}{4cm}
\centering
\includegraphics[width=4cm]{ratiofunction}
\end{minipage}
&
\begin{minipage}{5cm}
\centering
\includegraphics[width=4cm]{atan2_alternate}
\end{minipage}
\\
(a) x/y-values &
(b) ratio function &
(c) comparison of the result (blue)
\\
& & and the real value (red)
\end{tabular}
\caption{alternate atan2 function} \label{alternate atan2 function}
\end{figure}
If you have a set of x/y values (figure \ref{alternate atan2 function}a), you can compute the ratio (figure \ref{alternate atan2 function}b) of them:
\begin{equation}
r = \frac{x+y}{x-y}
\end{equation}
and transform this ratio very close to the real values (figure \ref{alternate atan2 function}c) using
\begin{equation}
\alpha = \tfrac \pi 4 (1-r)
\end{equation}
or (more accurate) using
\begin{equation}
\alpha_2 = 0.1963 \multiplication r^3 -0.9817 \multiplication r + \tfrac \pi 4
\end{equation}
\inHfile{INT32\_ATAN2(a, y, x)}{pprz\_algebra\_int}
\inHfile{INT32\_ATAN2\_2(a, y, x)}{pprz\_algebra\_int}