From ac7c48b4dee99d4c772f133d70d8d1b38262fcd2 Mon Sep 17 00:00:00 2001 From: Author Name Date: Fri, 7 Jul 2023 12:20:59 +0930 Subject: shallow zip-file copy from codec2 e9d726bf20 --- unittest/ofdm_stack.c | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 unittest/ofdm_stack.c (limited to 'unittest/ofdm_stack.c') diff --git a/unittest/ofdm_stack.c b/unittest/ofdm_stack.c new file mode 100644 index 0000000..aef6f42 --- /dev/null +++ b/unittest/ofdm_stack.c @@ -0,0 +1,229 @@ +#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