40#ifndef INCLUDED_volk_32fc_s32f_power_spectrum_32f_a_H
41#define INCLUDED_volk_32fc_s32f_power_spectrum_32f_a_H
52 const float normalizationFactor,
53 unsigned int num_points)
56 const float normFactSq = 1.0 / (normalizationFactor * normalizationFactor);
80 volk_32fc_magnitude_squared_32f(logPowerOutput, complexFFTInput, num_points);
83 volk_32f_s32f_multiply_32f(logPowerOutput, logPowerOutput, normFactSq, num_points);
87 volk_32f_log2_32f(logPowerOutput, logPowerOutput, num_points);
88 volk_32f_s32f_multiply_32f(
100 const float normalizationFactor,
101 unsigned int num_points)
103 float* logPowerOutputPtr = logPowerOutput;
104 const lv_32fc_t* complexFFTInputPtr = complexFFTInput;
105 const float iNormalizationFactor = 1.0 / normalizationFactor;
107 unsigned int quarter_points = num_points / 4;
108 float32x4x2_t fft_vec;
109 float32x4_t log_pwr_vec;
110 float32x4_t mag_squared_vec;
112 const float inv_ln10_10 = 4.34294481903f;
114 for (number = 0; number < quarter_points; number++) {
116 fft_vec = vld2q_f32((
float*)complexFFTInputPtr);
120 fft_vec.val[0] = vmulq_n_f32(fft_vec.val[0], iNormalizationFactor);
121 fft_vec.val[1] = vmulq_n_f32(fft_vec.val[1], iNormalizationFactor);
123 log_pwr_vec = vmulq_n_f32(
_vlogq_f32(mag_squared_vec), inv_ln10_10);
125 vst1q_f32(logPowerOutputPtr, log_pwr_vec);
127 complexFFTInputPtr += 4;
128 logPowerOutputPtr += 4;
132 for (number = quarter_points * 4; number < num_points; number++) {
133 const float real =
lv_creal(*complexFFTInputPtr) * iNormalizationFactor;
134 const float imag =
lv_cimag(*complexFFTInputPtr) * iNormalizationFactor;
138 complexFFTInputPtr++;
static void volk_32fc_s32f_power_spectrum_32f_generic(float *logPowerOutput, const lv_32fc_t *complexFFTInput, const float normalizationFactor, unsigned int num_points)
Definition volk_32fc_s32f_power_spectrum_32f.h:50
static void volk_32fc_s32f_power_spectrum_32f_neon(float *logPowerOutput, const lv_32fc_t *complexFFTInput, const float normalizationFactor, unsigned int num_points)
Definition volk_32fc_s32f_power_spectrum_32f.h:98
#define volk_log2to10factor
Definition volk_common.h:165
static float log2f_non_ieee(float f)
Definition volk_common.h:155
#define __VOLK_PREFETCH(addr)
Definition volk_common.h:68
#define lv_cimag(x)
Definition volk_complex.h:98
#define lv_creal(x)
Definition volk_complex.h:96
float complex lv_32fc_t
Definition volk_complex.h:74
static float32x4_t _vlogq_f32(float32x4_t x)
Definition volk_neon_intrinsics.h:143
static float32x4_t _vmagnitudesquaredq_f32(float32x4x2_t cmplxValue)
Definition volk_neon_intrinsics.h:73