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

本文详细分析了一段C代码,主要涉及IQ数据的处理和内存管理。通过对`iqlog.c`文件中缓冲区大小的检查,确保采样数量与RE个数匹配。代码使用了两层循环来读取IQ数据,并根据需要调整内存分配。内容涵盖了数据类型转换、内存重分配及采样数量计算等关键点。
摘要由CSDN通过智能技术生成

主题: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++;//
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值