예제 #1
0
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()
예제 #2
0
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);
}