Vector Optimized Library of Kernels  3.0.0
Architecture-tuned implementations of math kernels
volk_32fc_magnitude_32f.h File Reference
#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.

Macros

#define INCLUDED_volk_32fc_magnitude_32f_a_H
 

Functions

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...
 

Macro Definition Documentation

◆ INCLUDED_volk_32fc_magnitude_32f_a_H

#define INCLUDED_volk_32fc_magnitude_32f_a_H

Function Documentation

◆ 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
complexVectorThe vector containing the complex input values
magnitudeVectorThe vector containing the real output values
num_pointsThe 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