int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const std::complex *in = reinterpret_cast *>(input_items[0]); float *out = reinterpret_cast(output_items[0]); std::complex conjin[4], prod[4]; float angle[4]; gruel::high_res_timer_type t1, t2, tit; t1 = gruel::high_res_timer_now(); for(int i = 0; i < noutput_items; i+=4){ conjin[0] = conj(in[i]); conjin[1] = conj(in[i+1]); conjin[2] = conj(in[i+2]); conjin[3] = conj(in[i+3]); const std::complex *p1 = reinterpret_cast *>(&in[i+1]); const std::complex *p2 = reinterpret_cast *>(conjin); volk_32fc_x2_multiply_32fc_a(prod, p1, p2, 4); for(int j = 0; j < 4; j++) angle[j] = gr_fast_atan2f(imag(prod[j]), real(prod[j])); const float *p3 = reinterpret_cast(angle); volk_32f_s32f_multiply_32f_a(&out[i], p3, d_gain, 4); } t2 = gruel::high_res_timer_now(); tit = t2 - t1; printf(">> time to demod one [%d] buffer: %lld ticks\n", noutput_items, tit); return noutput_items; }