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++;