void iqconverter_int16_process(iqconveter_int16_t *cnv, int16_t *samples, int len) { int i; for (i = 0; i < len; i += 4) { samples[i + 0] = -samples[i + 0]; samples[i + 1] = -samples[i + 1] >> 1; //samples[i + 2] = samples[i + 2]; samples[i + 3] = samples[i + 3] >> 1; } fir_interleaved(cnv, samples, len); delay_interleaved(cnv, samples + 1, len); }
static void translate_fs_4(iqconverter_int16_t *cnv, int16_t *samples, int len) { int i; for (i = 0; i < len; i += 4) { samples[i + 0] = -samples[i + 0]; samples[i + 1] = -samples[i + 1] >> 1; //samples[i + 2] = samples[i + 2]; samples[i + 3] = samples[i + 3] >> 1; } fir_interleaved(cnv, samples, len); delay_interleaved(cnv, samples + 1, len); }
static void translate_fs_4(iqconverter_float_t *cnv, float *samples, int len) { int i; float hbc = cnv->hbc; #if defined(USE_SSE2) float *buf = samples; __m128 vec; __m128 rot = _mm_set_ps(hbc, 1.0f, -hbc, -1.0f); for (i = 0; i < len / 4; i++, buf +=4) { vec = _mm_loadu_ps(buf); vec = _mm_mul_ps(vec, rot); _mm_storeu_ps(buf, vec); } #else int j; for (i = 0; i < len / 4; i++) { j = i << 2; samples[j + 0] = -samples[j + 0]; samples[j + 1] = -samples[j + 1] * hbc; //samples[j + 2] = samples[j + 2]; samples[j + 3] = samples[j + 3] * hbc; } #endif fir_interleaved(cnv, samples, len); delay_interleaved(cnv, samples + 1, len); }