mirror of https://github.com/pvnis/srsRAN_4G.git
Fixed PRS sequence generation
parent
c328a29e39
commit
893cab84f1
@ -1,130 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <strings.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include "lte.h"
|
|
||||||
|
|
||||||
char *input_file_name;
|
|
||||||
int frame_length=1920, symbol_sz=128, nof_slots=1;
|
|
||||||
|
|
||||||
void usage(char *prog) {
|
|
||||||
printf("Usage: %s [ls] -i input_file\n", prog);
|
|
||||||
printf("\t-l frame_length [Default %d]\n", frame_length);
|
|
||||||
printf("\t-s symbol_sz [Default %d]\n", symbol_sz);
|
|
||||||
printf("\t-n nof_frames [Default %d]\n", nof_slots);
|
|
||||||
printf("\t-v [set verbose to debug, default none]\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void parse_args(int argc, char **argv) {
|
|
||||||
int opt;
|
|
||||||
while ((opt = getopt(argc, argv, "ilsnv")) != -1) {
|
|
||||||
switch(opt) {
|
|
||||||
case 'i':
|
|
||||||
input_file_name = argv[optind];
|
|
||||||
break;
|
|
||||||
case 'l':
|
|
||||||
frame_length = atoi(argv[optind]);
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
symbol_sz = atoi(argv[optind]);
|
|
||||||
break;
|
|
||||||
case 'n':
|
|
||||||
nof_slots = atoi(argv[optind]);
|
|
||||||
break;
|
|
||||||
case 'v':
|
|
||||||
verbose++;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
usage(argv[0]);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!input_file_name) {
|
|
||||||
usage(argv[0]);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void fft_run_slot(dft_plan_t *fft_plan, cf_t *input, cf_t *output) {
|
|
||||||
int i;
|
|
||||||
for (i=0;i<7;i++) {
|
|
||||||
input += CP_NORM(i, symbol_sz);
|
|
||||||
dft_run_c2c(fft_plan, input, output);
|
|
||||||
input += symbol_sz;
|
|
||||||
output += symbol_sz;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
|
||||||
filesource_t fsrc;
|
|
||||||
pbch_mib_t pbch_data;
|
|
||||||
pbch_t pbch;
|
|
||||||
dft_plan_t fft_plan;
|
|
||||||
|
|
||||||
int frame_cnt;
|
|
||||||
cf_t *input, *outfft;
|
|
||||||
|
|
||||||
if (argc < 3) {
|
|
||||||
usage(argv[0]);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
parse_args(argc,argv);
|
|
||||||
|
|
||||||
if (filesource_init(&fsrc, input_file_name, COMPLEX_FLOAT)) {
|
|
||||||
fprintf(stderr, "Error opening file %s\n", input_file_name);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
input = malloc(frame_length*sizeof(cf_t));
|
|
||||||
if (!input) {
|
|
||||||
perror("malloc");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
outfft = malloc(7*symbol_sz*sizeof(cf_t));
|
|
||||||
if (!outfft) {
|
|
||||||
perror("malloc");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Init FFT plan */
|
|
||||||
if (dft_plan_c2c(symbol_sz, FORWARD, &fft_plan)) {
|
|
||||||
fprintf(stderr, "Error initiating FFT plan\n");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
fft_plan.options = DFT_DC_OFFSET | DFT_MIRROR_POS | DFT_NORMALIZE;
|
|
||||||
|
|
||||||
if (pbch_init(&pbch, 0, CPNORM)) {
|
|
||||||
fprintf(stderr, "Error initiating PBCH\n");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
int res = 0;
|
|
||||||
frame_cnt = 0;
|
|
||||||
while (frame_length == filesource_read(&fsrc, input, frame_length)
|
|
||||||
&& frame_cnt < nof_slots
|
|
||||||
&& res == 0) {
|
|
||||||
|
|
||||||
fft_run_slot(&fft_plan, &input[960], outfft);
|
|
||||||
|
|
||||||
res = pbch_decode(&pbch, outfft, &pbch_data, 6, 1);
|
|
||||||
if (res == -1) {
|
|
||||||
fprintf(stderr, "Error decoding PBCH\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
frame_cnt++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res == 1) {
|
|
||||||
printf("MIB found\n");
|
|
||||||
} else {
|
|
||||||
printf("MIB not found after %d frames\n", frame_cnt);
|
|
||||||
}
|
|
||||||
|
|
||||||
pbch_free(&pbch);
|
|
||||||
free(input);
|
|
||||||
free(outfft);
|
|
||||||
|
|
||||||
printf("Done\n");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
Loading…
Reference in New Issue