#include #include #include #include #include #include #include "comp.h" #include "ofdm_internal.h" #include "codec2_ofdm.h" #include "test_bits_ofdm.h" /* payload_data_bits */ #include "mpdecode_core.h" #define MAX_ERRORS 32 static int ofdm_bitsperframe; static int ofdm_rowsperframe; static int ofdm_nuwbits; static int ofdm_ntxtbits; static int ofdm_rx_offset; static int ofdm_data_bitsperframe; static int ofdm_samplesperframe; static int ofdm_max_samplesperframe; static int ofdm_rxbuf; static int ofdm_m; static int ofdm_ncp; // Forwards void run_modem(struct OFDM *ofdm, int tx_bits[], int rx_bits[], COMP tx_rx[]); void dummy_code(); ///////////////////////////////////////////////////////////// /// MAIN() int main(int argc, char *argv[]) { // Options int f, i, opt; int dummy = 0; // flag to use dummy code int frames = 1; // how many frames int print = 0; // flag to print all bits struct OFDM *ofdm; struct OFDM_CONFIG *ofdm_config; ofdm = ofdm_create(NULL); assert(ofdm != NULL); /* Get a copy of the actual modem config */ ofdm_config = ofdm_get_config_param(ofdm); ofdm_m = (int) (ofdm_config->fs / ofdm_config->rs); ofdm_ncp = (int) (ofdm_config->tcp * ofdm_config->fs); ofdm_bitsperframe = ofdm_get_bits_per_frame(ofdm); ofdm_rowsperframe = ofdm_bitsperframe / (ofdm_config->nc * ofdm_config->bps); ofdm_samplesperframe = ofdm_get_samples_per_frame(ofdm); ofdm_max_samplesperframe = ofdm_get_max_samples_per_frame(ofdm); ofdm_rxbuf = 3 * ofdm_samplesperframe + 3 * (ofdm_m + ofdm_ncp); ofdm_nuwbits = (ofdm_config->ns - 1) * ofdm_config->bps - ofdm_config->txtbits; ofdm_ntxtbits = ofdm_config->txtbits; ofdm_rx_offset = (ofdm_nuwbits + ofdm_ntxtbits); ofdm_data_bitsperframe = (ofdm_bitsperframe - ofdm_rx_offset); int tx_bits[ofdm_data_bitsperframe]; int rx_bits[ofdm_data_bitsperframe]; COMP tx_rx[ofdm_samplesperframe]; while ((opt = getopt(argc, argv, "df:p")) != -1) { switch (opt) { case 'd': dummy = 1; break; case 'f': frames = atoi(optarg); break; case 'p': print = 1; break; default: fprintf(stderr, "Usage: %s [-e] [-f ] [-p]\n", argv[0]); } } for (f = 0; f < frames; f++) { //////// // Prep inputs for(i=0; itx_uw[i]; } for(i=ofdm_nuwbits; irxbuf[ofdm_rxbuf-nin+i] = tx_rx[prx].real + tx_rx[prx].imag * I; } for (i=ofdm_samplesperframe ; irxbuf[ofdm_rxbuf-nin+i] = 0.0 + 0.0 * I; } /* disable estimators for initial testing */ ofdm_set_verbose(ofdm, false); ofdm_set_timing_enable(ofdm, true); ofdm_set_foff_est_enable(ofdm, true); ofdm_set_phase_est_enable(ofdm, true); ofdm->mean_amp = 1.0; nin = ofdm_get_nin(ofdm); /* Insert samples at end of buffer, set to zero if no samples available to disable phase estimation on future pilots on last frame of simulation. */ if ((Nsam-prx) < nin) { lnew = Nsam-prx; } else { lnew = nin; } for(i=0; i