#include <inttypes.h>
#include <math.h>
#include <stdio.h>
#include <immintrin.h>
#include <volk/volk_avx_intrinsics.h>
#include <pmmintrin.h>
#include <volk/volk_sse3_intrinsics.h>
#include <volk/volk_sse_intrinsics.h>
#include <xmmintrin.h>
#include <arm_neon.h>
Go to the source code of this file.
|
static void | volk_32fc_magnitude_32f_u_avx (float *magnitudeVector, const lv_32fc_t *complexVector, unsigned int num_points) |
|
static void | volk_32fc_magnitude_32f_u_sse3 (float *magnitudeVector, const lv_32fc_t *complexVector, unsigned int num_points) |
|
static void | volk_32fc_magnitude_32f_u_sse (float *magnitudeVector, const lv_32fc_t *complexVector, unsigned int num_points) |
|
static void | volk_32fc_magnitude_32f_generic (float *magnitudeVector, const lv_32fc_t *complexVector, unsigned int num_points) |
|
static void | volk_32fc_magnitude_32f_a_avx (float *magnitudeVector, const lv_32fc_t *complexVector, unsigned int num_points) |
|
static void | volk_32fc_magnitude_32f_a_sse3 (float *magnitudeVector, const lv_32fc_t *complexVector, unsigned int num_points) |
|
static void | volk_32fc_magnitude_32f_a_sse (float *magnitudeVector, const lv_32fc_t *complexVector, unsigned int num_points) |
|
static void | volk_32fc_magnitude_32f_a_generic (float *magnitudeVector, const lv_32fc_t *complexVector, unsigned int num_points) |
|
static void | volk_32fc_magnitude_32f_neon (float *magnitudeVector, const lv_32fc_t *complexVector, unsigned int num_points) |
|
static void | volk_32fc_magnitude_32f_neon_fancy_sweet (float *magnitudeVector, const lv_32fc_t *complexVector, unsigned int num_points) |
| Calculates the magnitude of the complexVector and stores the results in the magnitudeVector. More...
|
|
◆ INCLUDED_volk_32fc_magnitude_32f_a_H
#define INCLUDED_volk_32fc_magnitude_32f_a_H |
◆ volk_32fc_magnitude_32f_a_avx()
static void volk_32fc_magnitude_32f_a_avx |
( |
float * |
magnitudeVector, |
|
|
const lv_32fc_t * |
complexVector, |
|
|
unsigned int |
num_points |
|
) |
| |
|
inlinestatic |
◆ volk_32fc_magnitude_32f_a_generic()
static void volk_32fc_magnitude_32f_a_generic |
( |
float * |
magnitudeVector, |
|
|
const lv_32fc_t * |
complexVector, |
|
|
unsigned int |
num_points |
|
) |
| |
|
inlinestatic |
◆ volk_32fc_magnitude_32f_a_sse()
static void volk_32fc_magnitude_32f_a_sse |
( |
float * |
magnitudeVector, |
|
|
const lv_32fc_t * |
complexVector, |
|
|
unsigned int |
num_points |
|
) |
| |
|
inlinestatic |
◆ volk_32fc_magnitude_32f_a_sse3()
static void volk_32fc_magnitude_32f_a_sse3 |
( |
float * |
magnitudeVector, |
|
|
const lv_32fc_t * |
complexVector, |
|
|
unsigned int |
num_points |
|
) |
| |
|
inlinestatic |
◆ volk_32fc_magnitude_32f_generic()
static void volk_32fc_magnitude_32f_generic |
( |
float * |
magnitudeVector, |
|
|
const lv_32fc_t * |
complexVector, |
|
|
unsigned int |
num_points |
|
) |
| |
|
inlinestatic |
◆ volk_32fc_magnitude_32f_neon()
static void volk_32fc_magnitude_32f_neon |
( |
float * |
magnitudeVector, |
|
|
const lv_32fc_t * |
complexVector, |
|
|
unsigned int |
num_points |
|
) |
| |
|
inlinestatic |
◆ volk_32fc_magnitude_32f_neon_fancy_sweet()
static void volk_32fc_magnitude_32f_neon_fancy_sweet |
( |
float * |
magnitudeVector, |
|
|
const lv_32fc_t * |
complexVector, |
|
|
unsigned int |
num_points |
|
) |
| |
|
inlinestatic |
Calculates the magnitude of the complexVector and stores the results in the magnitudeVector.
This is an approximation from "Streamlining Digital Signal Processing" by Richard Lyons. Apparently max error is about 1% and mean error is about 0.6%. The basic idea is to do a weighted sum of the abs. value of imag and real parts where weight A is always assigned to max(imag, real) and B is always min(imag,real). There are two pairs of cofficients chosen based on whether min <= 0.4142 max. This method is called equiripple-error magnitude estimation proposed by Filip in '73
- Parameters
-
complexVector | The vector containing the complex input values |
magnitudeVector | The vector containing the real output values |
num_points | The number of complex values in complexVector to be calculated and stored into cVector |
◆ volk_32fc_magnitude_32f_u_avx()
static void volk_32fc_magnitude_32f_u_avx |
( |
float * |
magnitudeVector, |
|
|
const lv_32fc_t * |
complexVector, |
|
|
unsigned int |
num_points |
|
) |
| |
|
inlinestatic |
◆ volk_32fc_magnitude_32f_u_sse()
static void volk_32fc_magnitude_32f_u_sse |
( |
float * |
magnitudeVector, |
|
|
const lv_32fc_t * |
complexVector, |
|
|
unsigned int |
num_points |
|
) |
| |
|
inlinestatic |
◆ volk_32fc_magnitude_32f_u_sse3()
static void volk_32fc_magnitude_32f_u_sse3 |
( |
float * |
magnitudeVector, |
|
|
const lv_32fc_t * |
complexVector, |
|
|
unsigned int |
num_points |
|
) |
| |
|
inlinestatic |