Functions | |
float16_t | arm_householder_f16 (const float16_t *pSrc, const float16_t threshold, uint32_t blockSize, float16_t *pOut) |
Householder transform of a half floating point vector. | |
float32_t | arm_householder_f32 (const float32_t *pSrc, const float32_t threshold, uint32_t blockSize, float32_t *pOut) |
Householder transform of a floating point vector. | |
float64_t | arm_householder_f64 (const float64_t *pSrc, const float64_t threshold, uint32_t blockSize, float64_t *pOut) |
Householder transform of a double floating point vector. | |
Computes the Householder transform of a vector x.
The Householder transform of x is a vector v with
\[ v_0 = 1 \]
and a scalar \(\beta\) such that:
\[ P = I - \beta v v^T \]
is an orthogonal matrix and
\[ P x = ||x||_2 e_1 \]
So P is an hyperplane reflection such that the image of x is proportional to \(e_1\).
\(e_1\) is the vector of coordinates:
\[ \begin{pmatrix} 1 \\ 0 \\ \vdots \\ \end{pmatrix} \]
If x is already proportional to \(e_1\) then the matrix P should be the identity.
Thus, \(\beta\) should be 0 and in this case the vector v can also be null.
But how do we detect that x is already proportional to \(e_1\).
If x
\[ x = \begin{pmatrix} x_0 \\ xr \\ \end{pmatrix} \]
where \(xr\) is a vector.
The algorithm is computing the norm squared of this vector:
\[ ||xr||^2 \]
and this value is compared to a threshold
. If the value is smaller than the threshold
, the algorithm is returning 0 for \(\beta\) and the householder vector.
This threshold
is an argument of the function.
Default values are provided in the header dsp/matrix_functions.h
like for instance DEFAULT_HOUSEHOLDER_THRESHOLD_F32
float16_t arm_householder_f16 | ( | const float16_t * | pSrc, |
const float16_t | threshold, | ||
uint32_t | blockSize, | ||
float16_t * | pOut | ||
) |
Householder transform of a half floating point vector.
[in] | pSrc | points to the input vector. |
[in] | threshold | norm2 threshold. |
[in] | blockSize | dimension of the vector space. |
[out] | pOut | points to the output vector. |
float32_t arm_householder_f32 | ( | const float32_t * | pSrc, |
const float32_t | threshold, | ||
uint32_t | blockSize, | ||
float32_t * | pOut | ||
) |
Householder transform of a floating point vector.
[in] | pSrc | points to the input vector. |
[in] | threshold | norm2 threshold. |
[in] | blockSize | dimension of the vector space. |
[out] | pOut | points to the output vector. |
float64_t arm_householder_f64 | ( | const float64_t * | pSrc, |
const float64_t | threshold, | ||
uint32_t | blockSize, | ||
float64_t * | pOut | ||
) |
Householder transform of a double floating point vector.
[in] | pSrc | points to the input vector. |
[in] | threshold | norm2 threshold. |
[in] | blockSize | dimension of the vector space. |
[out] | pOut | points to the output vector. |