コード例 #1
0
ファイル: pbch_file_test.c プロジェクト: wujunning2011/libLTE
int main(int argc, char **argv) {
  pbch_mib_t mib;
  int n;

  if (argc < 3) {
    usage(argv[0]);
    exit(-1);
  }

  parse_args(argc,argv);

  if (base_init()) {
    fprintf(stderr, "Error initializing receiver\n");
    exit(-1);
  }

  n = filesource_read(&fsrc, input_buffer, FLEN);

  lte_fft_run_sf(&fft, input_buffer, fft_buffer);

  if (fmatlab) {
    fprintf(fmatlab, "outfft=");
    vec_sc_prod_cfc(fft_buffer, 1000.0, fft_buffer, CP_NSYMB(cell.cp) * cell.nof_prb * RE_X_RB);
    vec_fprint_c(fmatlab, fft_buffer, CP_NSYMB(cell.cp) * cell.nof_prb * RE_X_RB);
    fprintf(fmatlab, ";\n");
    vec_sc_prod_cfc(fft_buffer, 0.001, fft_buffer,   CP_NSYMB(cell.cp) * cell.nof_prb * RE_X_RB);
  }

  /* Get channel estimates for each port */
  chest_ce_sf(&chest, fft_buffer, ce, 0);

  INFO("Decoding PBCH\n", 0);

  n = pbch_decode(&pbch, fft_buffer, ce, &mib);

  base_free();

  if (n < 0) {
    fprintf(stderr, "Error decoding PBCH\n");
    exit(-1);
  } else if (n == 0) {
    printf("Could not decode PBCH\n");
    exit(-1);
  } else {
    if (mib.nof_ports == 2 && mib.nof_prb == 50 && mib.phich_length == PHICH_NORM
        && mib.phich_resources == R_1 && mib.sfn == 28) {
      pbch_mib_fprint(stdout, &mib, cell.id);
      printf("This is the signal.1.92M.dat file\n");
      exit(0);
    } else {
      pbch_mib_fprint(stdout, &mib, cell.id);
      printf("This is an unknown file\n");
      exit(-1);
    }
  }
}
コード例 #2
0
ファイル: pbch_test.c プロジェクト: marojevic/libLTE
int main(int argc, char **argv) {
  pbch_t pbch;
  pbch_mib_t mib_tx, mib_rx;
  int i, j;
  cf_t *ce[MAX_PORTS];
  int nof_re;
  cf_t *sf_symbols[MAX_PORTS];

  parse_args(argc,argv);

  nof_re = 2 * CPNORM_NSYMB * cell.nof_prb * RE_X_RB;

  /* init memory */
  for (i=0;i<cell.nof_ports;i++) {
    ce[i] = malloc(sizeof(cf_t) * nof_re);
    if (!ce[i]) {
      perror("malloc");
      exit(-1);
    }
    for (j=0;j<nof_re;j++) {
      ce[i][j] = 1;
    }
    sf_symbols[i] = malloc(sizeof(cf_t) * nof_re);
    if (!sf_symbols[i]) {
      perror("malloc");
      exit(-1);
    }

  }
  if (pbch_init(&pbch, cell)) {
    fprintf(stderr, "Error creating PBCH object\n");
    exit(-1);
  }

  mib_tx.nof_ports = cell.nof_ports;
  mib_tx.nof_prb = 50;
  mib_tx.phich_length = PHICH_EXT;
  mib_tx.phich_resources = R_1_6;
  mib_tx.sfn = 124;

  pbch_encode(&pbch, &mib_tx, sf_symbols);

  /* combine outputs */
  for (i=1;i<cell.nof_ports;i++) {
    for (j=0;j<nof_re;j++) {
      sf_symbols[0][j] += sf_symbols[i][j];
    }
  }

  pbch_decode_reset(&pbch);
  if (1 != pbch_decode(&pbch, sf_symbols[0], ce, &mib_rx)) {
    printf("Error decoding\n");
    exit(-1);
  }

  pbch_free(&pbch);

  for (i=0;i<cell.nof_ports;i++) {
    free(ce[i]);
    free(sf_symbols[i]);
  }

  if (!memcmp(&mib_tx, &mib_rx, sizeof(pbch_mib_t))) {
    printf("OK\n");
    exit(0);
  } else {
    pbch_mib_fprint(stdout, &mib_rx);
    exit(-1);
  }
}