iqlog.c与两层循环处理存储IQ

主题:iqlog.c文件
时间:2021年1月8日
作者:ybb

D:\OAI\openairinterface5g-develop-20209018\openairinterface5g-develop\common\utils\T\tracer\logger\iqlog.c

if (bsize != N_RB_UL * symbols_per_tti * 12 * 4) {
    
    //为什么RE数量需要乘4?规定必须乘4
    printf("%s:%d:%s: bad buffer size\n", __FILE__, __LINE__, __FUNCTION__);
    abort();
  }

int16 + int14=int 32

采样数量

max_nsamples = bsize / 4;//最大采样数量与bitsize有关,按照前面的定义就是采样数量的最大值就是对应的一个TTI的RE个数
if (max_nsamples > l->max_length) {
    
    
    l->i = realloc(l->i, max_nsamples * sizeof(float));//为指针再分配空间,原来大就减小,原来小就扩大  注:IQ数据以32位浮点数处理
    if (l->i == NULL) abort();//内存分配失败
    l->q = realloc(l->q, max_nsamples * sizeof(float));
    if (l->q == NULL) abort();
    l->max_length = max_nsamples;

两层for循环实行对存储的IQ两路数据的读取:

//下面的两层for循环很重要
  idst = l->i;
  qdst = l->q;
  count = 0;
  for (i = 0; i < symbols_per_tti; i++)//一个TTI的长度为1个时隙,1ms子帧在5G可以有多个时隙(最大采样数量在这里定义为一个TTI内RE的个数)//时域上
    for (j = 0; j < 12 * nb_rb; j++) {
    
    //j为频域指示//频域上
      *idst = ((int16_t *)buffer)[(i*N_RB_UL*12 + j) * 2];//偶数
      *qdst = ((int16_t *)buffer)[(i*N_RB_UL*12 + j) * 2 + 1];//奇数
      idst++;//???
      qdst++;//???
      count++;//
    }

猜你喜欢

转载自blog.csdn.net/BJTUYBYUAN/article/details/112347114