diff options
| author | drowe67 <[email protected]> | 2023-07-14 12:36:50 +0930 |
|---|---|---|
| committer | David Rowe <[email protected]> | 2023-07-14 12:36:50 +0930 |
| commit | b86e88413d4c6ec428aaedb147f7675f28882fe4 (patch) | |
| tree | ce360925856e25d4343d59a37e2e6bac142d3752 /src/ofdm_mode.c | |
| parent | 0c2e969cfbe85548801eeb20ad8113969604892a (diff) | |
clang-format -i applied to src unittest misc
Diffstat (limited to 'src/ofdm_mode.c')
| -rw-r--r-- | src/ofdm_mode.c | 356 |
1 files changed, 226 insertions, 130 deletions
diff --git a/src/ofdm_mode.c b/src/ofdm_mode.c index 13f6e8c..6c1df32 100644 --- a/src/ofdm_mode.c +++ b/src/ofdm_mode.c @@ -10,144 +10,240 @@ #include <assert.h> #include <string.h> + #include "codec2_ofdm.h" #include "ofdm_internal.h" void ofdm_init_mode(char mode[], struct OFDM_CONFIG *config) { - assert(mode != NULL); - assert(config != NULL); + assert(mode != NULL); + assert(config != NULL); - assert(strlen(mode) < 16); - strcpy(config->mode, mode); + assert(strlen(mode) < 16); + strcpy(config->mode, mode); - /* Fill in default values - 700D */ + /* Fill in default values - 700D */ - config->nc = 17; /* Number of carriers */ - config->np = 1; - config->ns = 8; /* Number of Symbols per modem frame */ - config->ts = 0.018f; - config->tcp = .002f; /* Cyclic Prefix duration */ - config->tx_centre = 1500.0f; /* TX Carrier Frequency */ - config->rx_centre = 1500.0f; /* RX Carrier Frequency */ - config->fs = 8000.0f; /* Sample rate */ - config->txtbits = 4; - config->bps = 2; /* Bits per Symbol */ - config->nuwbits = 5 * config->bps; /* default is 5 symbols of Unique Word bits */ + config->nc = 17; /* Number of carriers */ + config->np = 1; + config->ns = 8; /* Number of Symbols per modem frame */ + config->ts = 0.018f; + config->tcp = .002f; /* Cyclic Prefix duration */ + config->tx_centre = 1500.0f; /* TX Carrier Frequency */ + config->rx_centre = 1500.0f; /* RX Carrier Frequency */ + config->fs = 8000.0f; /* Sample rate */ + config->txtbits = 4; + config->bps = 2; /* Bits per Symbol */ + config->nuwbits = + 5 * config->bps; /* default is 5 symbols of Unique Word bits */ + config->bad_uw_errors = 3; + config->ftwindowwidth = 32; + config->timing_mx_thresh = 0.30f; + config->edge_pilots = 1; + config->state_machine = "voice1"; + config->data_mode = ""; + config->codename = "HRA_112_112"; + config->clip_gain1 = 2.5; + config->clip_gain2 = 0.8; + config->clip_en = true; + config->tx_bpf_en = true; + config->rx_bpf_en = false; + config->amp_scale = 245E3; + config->foff_limiter = false; + memset(config->tx_uw, 0, MAX_UW_BITS); + + if (strcmp(mode, "700D") == 0) { + } else if (strcmp(mode, "700E") == 0) { + config->ts = 0.014; + config->tcp = 0.006; + config->nc = 21; + config->ns = 4; + config->edge_pilots = 0; + config->nuwbits = 12; config->bad_uw_errors = 3; - config->ftwindowwidth = 32; - config->timing_mx_thresh = 0.30f; - config->edge_pilots = 1; - config->state_machine = "voice1"; - config->data_mode = ""; - config->codename = "HRA_112_112"; + config->txtbits = 2; + config->state_machine = "voice2"; + config->amp_est_mode = 1; + config->ftwindowwidth = 80; + config->codename = "HRA_56_56"; + config->foff_limiter = true; + config->amp_scale = 155E3; + config->clip_gain1 = 3; + config->clip_gain2 = 0.8; + } else if ((strcmp(mode, "2020") == 0)) { + config->ts = 0.0205; + config->nc = 31; + config->codename = "HRAb_396_504"; + config->amp_scale = 167E3; config->clip_gain1 = 2.5; config->clip_gain2 = 0.8; - config->clip_en = true; - config->tx_bpf_en = true; - config->rx_bpf_en = false; - config->amp_scale = 245E3; - config->foff_limiter = false; - memset(config->tx_uw, 0, MAX_UW_BITS); - - if (strcmp(mode,"700D") == 0) { - } else if (strcmp(mode,"700E") == 0) { - config->ts = 0.014; config->tcp = 0.006; config->nc = 21; config->ns=4; - config->edge_pilots = 0; - config->nuwbits = 12; config->bad_uw_errors = 3; config->txtbits = 2; - config->state_machine = "voice2"; config->amp_est_mode = 1; - config->ftwindowwidth = 80; - config->codename = "HRA_56_56"; - config->foff_limiter = true; - config->amp_scale = 155E3; config->clip_gain1 = 3; config->clip_gain2 = 0.8; - } else if ((strcmp(mode,"2020") == 0)) { - config->ts = 0.0205; config->nc = 31; config->codename = "HRAb_396_504"; - config->amp_scale = 167E3; config->clip_gain1 = 2.5; config->clip_gain2 = 0.8; - } else if (strcmp(mode,"2020B") == 0) { - config->ts = 0.014; config->tcp = 0.004; config->nc = 29; config->ns=5; config->codename = "HRA_56_56"; - config->txtbits = 4; config->nuwbits = 8*2; config->bad_uw_errors = 5; - config->amp_scale = 130E3; config->clip_gain1 = 2.5; config->clip_gain2 = 0.8; - config->edge_pilots = 0; config->state_machine = "voice2"; - config->ftwindowwidth = 64; config->foff_limiter = true; - } else if (strcmp(mode,"2020C") == 0) { - config->ts = 0.014; config->tcp = 0.004; config->nc = 29; config->ns=5; config->codename = "H_212_158"; - config->txtbits = 4; config->nuwbits = 8*2; config->bad_uw_errors = 5; - config->amp_scale = 130E3; config->clip_gain1 = 2.5; config->clip_gain2 = 0.8; - config->edge_pilots = 0; config->state_machine = "voice2"; - config->ftwindowwidth = 64; config->foff_limiter = true; - } else if (strcmp(mode,"qam16") == 0) { - /* not in use yet */ - config->ns=5; config->np=5; config->tcp = 0.004; config->ts = 0.016; config->nc = 33; - config->bps=4; config->txtbits = 0; config->nuwbits = 15*4; config->bad_uw_errors = 5; - config->ftwindowwidth = 32; config->state_machine = "data"; config->amp_est_mode = 1; - config->tx_bpf_en = false; config->clip_en = false; - config->data_mode = "streaming"; - } else if (strcmp(mode,"datac0") == 0) { - config->ns=5; config->np=4; config->tcp = 0.006; config->ts = 0.016; config->nc = 9; - config->edge_pilots = 0; - config->txtbits = 0; config->nuwbits = 32; config->bad_uw_errors = 9; - config->state_machine = "data"; config->amp_est_mode = 1; - config->ftwindowwidth = 80; config->codename = "H_128_256_5"; - uint8_t uw[] = {1,1,0,0, 1,0,1,0, 1,1,1,1, 0,0,0,0}; - memcpy(config->tx_uw, uw, sizeof(uw)); - config->timing_mx_thresh = 0.08f; - config->data_mode = "streaming"; - config->amp_scale = 300E3; config->clip_gain1 = 2.2; config->clip_gain2 = 0.85; - } else if (strcmp(mode,"datac1") == 0) { - config->ns=5; config->np=38; config->tcp = 0.006; config->ts = 0.016; config->nc = 27; - config->edge_pilots = 0; - config->txtbits = 0; config->nuwbits = 16; config->bad_uw_errors = 6; - config->state_machine = "data"; config->amp_est_mode = 1; - config->ftwindowwidth = 80; config->codename = "H_4096_8192_3d"; - uint8_t uw[] = {1,1,0,0, 1,0,1,0, 1,1,1,1, 0,0,0,0}; - assert(sizeof(uw) == config->nuwbits); - memcpy(config->tx_uw, uw, config->nuwbits); - config->timing_mx_thresh = 0.10f; - config->data_mode = "streaming"; - config->amp_scale = 145E3; config->clip_gain1 = 2.7; config->clip_gain2 = 0.8; - } else if (strcmp(mode,"datac3") == 0) { - config->ns=5; config->np=29; config->tcp = 0.006; config->ts = 0.016; config->nc = 9; - config->edge_pilots = 0; - config->txtbits = 0; config->state_machine = "data"; - config->ftwindowwidth = 80; config->timing_mx_thresh = 0.10; - config->codename = "H_1024_2048_4f"; config->amp_est_mode = 1; - config->nuwbits = 40; config->bad_uw_errors = 10; - uint8_t uw[] = {1,1,0,0, 1,0,1,0, 1,1,1,1, 0,0,0,0, 1,1,1,1, 0,0,0,0}; - assert(sizeof(uw) <= MAX_UW_BITS); - memcpy(config->tx_uw, uw, sizeof(uw)); - memcpy(&config->tx_uw[config->nuwbits-sizeof(uw)], uw, sizeof(uw)); - config->data_mode = "streaming"; - config->amp_scale = 300E3; config->clip_gain1 = 2.2; config->clip_gain2 = 0.8; - } else if (strcmp(mode,"datac4") == 0) { - config->ns=5; config->np=47; config->tcp = 0.006; config->ts = 0.016; config->nc = 4; - config->edge_pilots = 0; - config->txtbits = 0; config->state_machine = "data"; - config->ftwindowwidth = 80; config->timing_mx_thresh = 0.5; - config->codename = "H_1024_2048_4f"; config->amp_est_mode = 1; - config->nuwbits = 32; config->bad_uw_errors = 12; - uint8_t uw[] = {1,1,0,0, 1,0,1,0, 1,1,1,1, 0,0,0,0, 1,1,1,1, 0,0,0,0}; - assert(sizeof(uw) <= MAX_UW_BITS); - memcpy(config->tx_uw, uw, sizeof(uw)); - memcpy(&config->tx_uw[config->nuwbits-sizeof(uw)], uw, sizeof(uw)); - config->data_mode = "streaming"; - config->amp_scale = 2*300E3; config->clip_gain1 = 1.2; config->clip_gain2 = 1.0; - config->rx_bpf_en = true; - } else if (strcmp(mode,"datac13") == 0) { - config->ns=5; config->np=18; config->tcp = 0.006; config->ts = 0.016; config->nc = 3; - config->edge_pilots = 0; - config->txtbits = 0; config->state_machine = "data"; - config->ftwindowwidth = 80; config->timing_mx_thresh = 0.45; - config->codename = "H_256_512_4"; config->amp_est_mode = 1; - config->nuwbits = 48; config->bad_uw_errors = 18; - uint8_t uw[] = {1,1,0,0, 1,0,1,0, 1,1,1,1, 0,0,0,0, 1,1,1,1, 0,0,0,0}; - assert(sizeof(uw) <= MAX_UW_BITS); - memcpy(config->tx_uw, uw, sizeof(uw)); - memcpy(&config->tx_uw[config->nuwbits-sizeof(uw)], uw, sizeof(uw)); - config->data_mode = "streaming"; - config->amp_scale = 2.5*300E3; config->clip_gain1 = 1.2; config->clip_gain2 = 1.0; - config->rx_bpf_en = true; - } - else { - assert(0); - } - config->rs=1.0f/config->ts; + } else if (strcmp(mode, "2020B") == 0) { + config->ts = 0.014; + config->tcp = 0.004; + config->nc = 29; + config->ns = 5; + config->codename = "HRA_56_56"; + config->txtbits = 4; + config->nuwbits = 8 * 2; + config->bad_uw_errors = 5; + config->amp_scale = 130E3; + config->clip_gain1 = 2.5; + config->clip_gain2 = 0.8; + config->edge_pilots = 0; + config->state_machine = "voice2"; + config->ftwindowwidth = 64; + config->foff_limiter = true; + } else if (strcmp(mode, "2020C") == 0) { + config->ts = 0.014; + config->tcp = 0.004; + config->nc = 29; + config->ns = 5; + config->codename = "H_212_158"; + config->txtbits = 4; + config->nuwbits = 8 * 2; + config->bad_uw_errors = 5; + config->amp_scale = 130E3; + config->clip_gain1 = 2.5; + config->clip_gain2 = 0.8; + config->edge_pilots = 0; + config->state_machine = "voice2"; + config->ftwindowwidth = 64; + config->foff_limiter = true; + } else if (strcmp(mode, "qam16") == 0) { + /* not in use yet */ + config->ns = 5; + config->np = 5; + config->tcp = 0.004; + config->ts = 0.016; + config->nc = 33; + config->bps = 4; + config->txtbits = 0; + config->nuwbits = 15 * 4; + config->bad_uw_errors = 5; + config->ftwindowwidth = 32; + config->state_machine = "data"; + config->amp_est_mode = 1; + config->tx_bpf_en = false; + config->clip_en = false; + config->data_mode = "streaming"; + } else if (strcmp(mode, "datac0") == 0) { + config->ns = 5; + config->np = 4; + config->tcp = 0.006; + config->ts = 0.016; + config->nc = 9; + config->edge_pilots = 0; + config->txtbits = 0; + config->nuwbits = 32; + config->bad_uw_errors = 9; + config->state_machine = "data"; + config->amp_est_mode = 1; + config->ftwindowwidth = 80; + config->codename = "H_128_256_5"; + uint8_t uw[] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0}; + memcpy(config->tx_uw, uw, sizeof(uw)); + config->timing_mx_thresh = 0.08f; + config->data_mode = "streaming"; + config->amp_scale = 300E3; + config->clip_gain1 = 2.2; + config->clip_gain2 = 0.85; + } else if (strcmp(mode, "datac1") == 0) { + config->ns = 5; + config->np = 38; + config->tcp = 0.006; + config->ts = 0.016; + config->nc = 27; + config->edge_pilots = 0; + config->txtbits = 0; + config->nuwbits = 16; + config->bad_uw_errors = 6; + config->state_machine = "data"; + config->amp_est_mode = 1; + config->ftwindowwidth = 80; + config->codename = "H_4096_8192_3d"; + uint8_t uw[] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0}; + assert(sizeof(uw) == config->nuwbits); + memcpy(config->tx_uw, uw, config->nuwbits); + config->timing_mx_thresh = 0.10f; + config->data_mode = "streaming"; + config->amp_scale = 145E3; + config->clip_gain1 = 2.7; + config->clip_gain2 = 0.8; + } else if (strcmp(mode, "datac3") == 0) { + config->ns = 5; + config->np = 29; + config->tcp = 0.006; + config->ts = 0.016; + config->nc = 9; + config->edge_pilots = 0; + config->txtbits = 0; + config->state_machine = "data"; + config->ftwindowwidth = 80; + config->timing_mx_thresh = 0.10; + config->codename = "H_1024_2048_4f"; + config->amp_est_mode = 1; + config->nuwbits = 40; + config->bad_uw_errors = 10; + uint8_t uw[] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}; + assert(sizeof(uw) <= MAX_UW_BITS); + memcpy(config->tx_uw, uw, sizeof(uw)); + memcpy(&config->tx_uw[config->nuwbits - sizeof(uw)], uw, sizeof(uw)); + config->data_mode = "streaming"; + config->amp_scale = 300E3; + config->clip_gain1 = 2.2; + config->clip_gain2 = 0.8; + } else if (strcmp(mode, "datac4") == 0) { + config->ns = 5; + config->np = 47; + config->tcp = 0.006; + config->ts = 0.016; + config->nc = 4; + config->edge_pilots = 0; + config->txtbits = 0; + config->state_machine = "data"; + config->ftwindowwidth = 80; + config->timing_mx_thresh = 0.5; + config->codename = "H_1024_2048_4f"; + config->amp_est_mode = 1; + config->nuwbits = 32; + config->bad_uw_errors = 12; + uint8_t uw[] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}; + assert(sizeof(uw) <= MAX_UW_BITS); + memcpy(config->tx_uw, uw, sizeof(uw)); + memcpy(&config->tx_uw[config->nuwbits - sizeof(uw)], uw, sizeof(uw)); + config->data_mode = "streaming"; + config->amp_scale = 2 * 300E3; + config->clip_gain1 = 1.2; + config->clip_gain2 = 1.0; + config->rx_bpf_en = true; + } else if (strcmp(mode, "datac13") == 0) { + config->ns = 5; + config->np = 18; + config->tcp = 0.006; + config->ts = 0.016; + config->nc = 3; + config->edge_pilots = 0; + config->txtbits = 0; + config->state_machine = "data"; + config->ftwindowwidth = 80; + config->timing_mx_thresh = 0.45; + config->codename = "H_256_512_4"; + config->amp_est_mode = 1; + config->nuwbits = 48; + config->bad_uw_errors = 18; + uint8_t uw[] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}; + assert(sizeof(uw) <= MAX_UW_BITS); + memcpy(config->tx_uw, uw, sizeof(uw)); + memcpy(&config->tx_uw[config->nuwbits - sizeof(uw)], uw, sizeof(uw)); + config->data_mode = "streaming"; + config->amp_scale = 2.5 * 300E3; + config->clip_gain1 = 1.2; + config->clip_gain2 = 1.0; + config->rx_bpf_en = true; + } else { + assert(0); + } + config->rs = 1.0f / config->ts; } |
