int main(int argc, char **argv) { parse_args(argc, argv); srslte_tcod_gentable(); srslte_tcod_t tcod; srslte_tcod_init(&tcod, 6144); uint32_t st=0, end=187; if (long_cb) { st=srslte_cbsegm_cbindex(long_cb); end=st; } for (uint32_t len=st;len<=end;len++) { long_cb = srslte_cbsegm_cbsize(len); printf("Checking long_cb=%d\n", long_cb); for (int i=0;i<long_cb/8;i++) { input_bytes[i] = rand()%256; } srslte_bit_unpack_vector(input_bytes, input_bits, long_cb); if (SRSLTE_VERBOSE_ISINFO()) { printf("Input bits:\n"); for (int i=0;i<long_cb/8;i++) { srslte_vec_fprint_b(stdout, &input_bits[i*8], 8); } } srslte_tcod_encode(&tcod, input_bits, output_bits, long_cb); srslte_tcod_encode_lut(&tcod, input_bytes, parity, len); srslte_bit_unpack_vector(parity, parity_bits, 2*(long_cb+4)); for (int i=0;i<long_cb;i++) { output_bits2[3*i] = input_bits[i]; output_bits2[3*i+1] = parity_bits[i]; output_bits2[3*i+2] = parity_bits[i+long_cb+4]; } if (SRSLTE_VERBOSE_ISINFO()) { srslte_vec_fprint_b(stdout, output_bits2, 3*long_cb); srslte_vec_fprint_b(stdout, output_bits, 3*long_cb); printf("\n"); } for (int i=0;i<2*long_cb;i++) { if (output_bits2[long_cb+i] != output_bits[long_cb+i]) { printf("error in bit %d, len=%d\n", i, len); exit(-1); } } } srslte_tcod_free(&tcod); printf("Done\n"); exit(0); }
int main(int argc, char **argv) { parse_args(argc, argv); srslte_tcod_gentable(); srslte_tcod_t tcod; srslte_tcod_init(&tcod, 6144); uint32_t st=0, end=187; if (long_cb) { st=srslte_cbsegm_cbindex(long_cb); end=st; } for (uint32_t len=st;len<=end;len++) { long_cb = srslte_cbsegm_cbsize(len); printf("Checking long_cb=%d\n", long_cb); for (int i=0;i<long_cb/8;i++) { input_bytes[i] = rand()%256; } srslte_bit_unpack_vector(input_bytes, input_bits, long_cb); if (SRSLTE_VERBOSE_ISINFO()) { printf("Input bits:\n"); for (int i=0;i<long_cb/8;i++) { srslte_vec_fprint_b(stdout, &input_bits[i*8], 8); } } srslte_tcod_encode(&tcod, input_bits, output_bits, long_cb); srslte_tcod_encode_lut(&tcod, input_bytes, output_bytes, long_cb); srslte_bit_unpack_vector(output_bytes, output_bits2, 2*long_cb+12); /* de-Interleace bits for comparison */ for (int i=0;i<long_cb;i++) { for (int j=0;j<2;j++) { output_bits3[j*long_cb+i] = output_bits[3*i+j+1]; } } // copy tail memcpy(&output_bits3[2*long_cb], &output_bits[3*long_cb], 12); if (SRSLTE_VERBOSE_ISINFO()) { printf("1st encoder\n"); srslte_vec_fprint_b(stdout, output_bits2, long_cb); srslte_vec_fprint_b(stdout, output_bits3, long_cb); printf("2nd encoder\n"); srslte_vec_fprint_b(stdout, &output_bits2[long_cb], long_cb); srslte_vec_fprint_b(stdout, &output_bits3[long_cb], long_cb); printf("tail\n"); srslte_vec_fprint_b(stdout, &output_bits2[2*long_cb], 12); srslte_vec_fprint_b(stdout, &output_bits3[2*long_cb], 12); printf("\n"); } for (int i=0;i<2*long_cb+12;i++) { if (output_bits2[i] != output_bits3[i]) { printf("error in bit %d, len=%d\n", i, len); exit(-1); } } } srslte_tcod_free(&tcod); printf("Done\n"); exit(0); }