iqconverter_float_t *iqconverter_float_create(const float *hb_kernel, int len) { int i, j; size_t buffer_size; iqconverter_float_t *cnv = (iqconverter_float_t *) _aligned_malloc(sizeof(iqconverter_float_t), DEFAULT_ALIGNMENT); cnv->len = len / 2 + 1; cnv->hbc = hb_kernel[len / 2]; buffer_size = cnv->len * sizeof(float); cnv->fir_kernel = (float *) _aligned_malloc(buffer_size, DEFAULT_ALIGNMENT); cnv->fir_queue = (float *) _aligned_malloc(buffer_size * SIZE_FACTOR, DEFAULT_ALIGNMENT); cnv->delay_line = (float *) _aligned_malloc(buffer_size / 2, DEFAULT_ALIGNMENT); iqconverter_float_reset(cnv); for (i = 0, j = 0; i < cnv->len; i++, j += 2) { cnv->fir_kernel[i] = hb_kernel[j]; } return cnv; }
iqconverter_float_t *iqconverter_float_create(const float *hb_kernel, int len) { int i, j; #ifdef USE_SSE2 int original_length; int padding; #endif size_t buffer_size; iqconverter_float_t *cnv = (iqconverter_float_t *) _aligned_malloc(sizeof(iqconverter_float_t), DEFAULT_ALIGNMENT); cnv->len = len / 2 + 1; cnv->hbc = hb_kernel[len / 2]; #ifdef USE_SSE2 original_length = cnv->len; padding = 0; while (cnv->len % 8 != 0) { cnv->len++; padding++; } #endif buffer_size = cnv->len * sizeof(float); cnv->fir_kernel = (float *) _aligned_malloc(buffer_size, DEFAULT_ALIGNMENT); cnv->fir_queue = (float *) _aligned_malloc(buffer_size * SIZE_FACTOR, DEFAULT_ALIGNMENT); cnv->delay_line = (float *) _aligned_malloc(buffer_size / 2, DEFAULT_ALIGNMENT); iqconverter_float_reset(cnv); #ifdef USE_SSE2 for (i = 0; i < padding / 2; i++) { cnv->fir_kernel[cnv->len - i - 1] = 0; cnv->fir_kernel[i] = 0; } for (i = 0, j = 0; i < original_length; i++, j += 2) { cnv->fir_kernel[i + padding / 2] = hb_kernel[j]; } #else for (i = 0, j = 0; i < cnv->len; i++, j += 2) { cnv->fir_kernel[i] = hb_kernel[j]; } #endif return cnv; }