void ofdmoqamframe64sync_execute(ofdmoqamframe64sync _q, float complex * _x, unsigned int _n) { unsigned int i; float complex x; for (i=0; i<_n; i++) { x = _x[i]; #if DEBUG_OFDMOQAMFRAME64SYNC windowcf_push(_q->debug_x,x); #endif _q->num_samples++; // coarse gain correction //x *= _q->g; // compensate for CFO nco_crcf_mix_down(_q->nco_rx, x, &x); // push sample into analysis filter banks float complex x_delay0; float complex x_delay1; windowcf_index(_q->input_buffer,0, &x_delay0); // full symbol delay windowcf_index(_q->input_buffer,32,&x_delay1); // half symbol delay windowcf_push(_q->input_buffer,x); firpfbch_analyzer_push(_q->ca0, x_delay0); // push input sample firpfbch_analyzer_push(_q->ca1, x_delay1); // push delayed sample switch (_q->state) { case OFDMOQAMFRAME64SYNC_STATE_PLCPSHORT: ofdmoqamframe64sync_execute_plcpshort(_q,x); break; case OFDMOQAMFRAME64SYNC_STATE_PLCPLONG0: ofdmoqamframe64sync_execute_plcplong0(_q,x); break; case OFDMOQAMFRAME64SYNC_STATE_PLCPLONG1: ofdmoqamframe64sync_execute_plcplong1(_q,x); break; case OFDMOQAMFRAME64SYNC_STATE_RXSYMBOLS: ofdmoqamframe64sync_execute_rxsymbols(_q,x); break; default:; } } // for (i=0; i<_n; i++) } // ofdmoqamframe64sync_execute()
void firpfbch_analyzer_execute(firpfbch _c, float complex * _x, float complex * _y) { unsigned int i; for (i=0; i<_c->num_channels; i++) firpfbch_analyzer_push(_c,_x[i]); // run the analysis filters on the given input firpfbch_analyzer_run(_c,_y); // save the run state : IDFT input X -> X_prime firpfbch_analyzer_saverunstate(_c); }