This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6670 上行使用BCP中的SSL子模块解调,可以支持的最大子载波是多少?



我看历程中的LTE上行配置SSL时,有个参数

UInt32              Rprime, //Number of allocation subcarriers.

然后又定义了一个:

UInt8 prbList[45]={1, 2, 3, 4, 5, 6, 8, 9, 10,12,15,16, 18,20,24,25, 27,30,32,36, 40,45,48,50, 54,60,64,72, 75,80,
81,90,96,100,108,120,128,144,150,160,162,180,192,200,216};

使用的时候是

Rprime1 =   12 * prbList[Rprime]; 

将Rprime作为数组的index,是不是说明Rprime不能大于45,也就是说支持的最大子载波不能超过45?

对于定义的UInt8 prbList[45]={1, 2, 3, 4, 5, 6, 8, 9, 10,12,15,16, 18,20,24,25, 27,30,32,36, 40,45,48,50, 54,60,64,72, 75,80,
81,90,96,100,108,120,128,144,150,160,162,180,192,200,216};这个数组中的数字有代表什么?

具体工程为:

Bcp_testProject

文件为:test_lte_ul.c,配置SSL在第872行

  • Hi, 您好!

    Rprime代表的不是子载波数目 , Rprime是数组下标, 是一个索引值,通过这个索引值可以找到物理资源块(PRB)的数目

    prbList这个数组中的数字代表了物理资源块(PRB)的数目

    Rprime1 才是子载波数目, 它与物理资源块(PRB)的关系是:     子载波数目 = 物理资源块(PRB) * 12     这个关系是协议36. 211里规定的

    实际可支持的最大子载波数是 216 * 12 = 2592

    谢谢!

  • 谢谢你的回复

    1.那么我可不可以使用modulation 模块的软调制,然后在用SSL模块实现软解调,这两个是模块是不是可以实现互逆,也就是说我用一块BCP中的softMOD生成调制符号,然后用另一块BCP中的SSL实现软解调。上述方案可不可行?

    2,使用软调制输出的调制符号和硬调制输出的调制符号的取值范围貌似不一样,这个是由什么决定的呢?我个人理解是调制后的符号值的范围应该是一样的吧,对于软调制输出的值应该在哪里做限定?

    3.SSL模块配置时需要两个参数scale1, scale2,这个应该配置成多少,由什么决定?

    prepare_sslhdr_cfg (&sslHdrCfg, radioStd, allocIdx, modulation, numSymbPerSumbfrm, 1, rms, 2, cInit, numRiSubcs, numAckSubcs, scale1, scale2);

    4.MOD在soft模式时,输入如果直接用RateMatching的输出硬信息(0x00,0x01)可以么?还是要将(0x00,0x01)映射为(0x7f,0x81)再输入到MOD呢?还是RM可以在输入时bit的情况下直接输出软信息(这个UGuider也没有说明,我推理应该不行)?

    实在抱歉,一下子问您这么多问题,因为我要做一个LTE PUSCH的点对点链路,收端和端都想使用BCP。

    非常感谢,期待您的回复。

  • Hi, 您好!

    1. 这是可行的

    2. 范围是一样的, 跟36.211规定的值是一样的

    3. scale1, scale2是噪声因子,是由接收机对接收信号的信噪比计算得到的

    4. 需要影射为(0x7f,0x81), RM可以输出软信息,可以通过设置OUTPUT_BIT_FORMAT位实现

    谢谢!

  • 谢谢你的回答

    1.对于MOD在soft和hard模式下的输出,我这里好像范围不太一致,您知道是什么原因么?

    计算出来的数在hard模式下:

    在soft模式下:

    是不是我哪里参数不对:

    我的soft配置为:

    /* Header 5: Modulation header */
    prepare_modhdr_cfg (&modHdrCfg,
    radioStd,
    33, // number of subcarrier, not used,
    6,//modulation,
    2, // mode
    1024,//rms
    12, //numOFDMsymPerSubfrm, not used
    0, //numCqiSubcs
    0, //numRiSubcs
    0, //numAckSubcs
    cInit,
    0); //qformat

    hard模式为:

    /* Header 5: Modulation header */
    prepare_modhdr_cfg (&modHdrCfg,
    radioStd,
    0, // number of subcarrier, not used,
    modulation,
    0, //uncompressed mode
    1024,//rms
    0, //numOFDMsymPerSubfrm, not used
    0, //numCqiSubcs
    0, //numRiSubcs
    0, //numAckSubcs
    cInit,
    0); //qformat

    2.对于SSL,配置SSLheader时有这段代码:

    for (uu = 0; uu < 25; uu++)
    {
     if (numPrbInPusch[uu] == numSubcarrier/12)
     {
     allocIdx = uu;
     break;
     }
     }

    prepare_sslhdr_cfg (&sslHdrCfg, radioStd, allocIdx, modulation, numSymbPerSumbfrm, 1, rms, 2, cInit, numRiSubcs, numAckSubcs, scale1, scale2);

    是不是说uu的最大值只能取到25么?这样allocIdx的最大值是不是也就只能是25,如果我要配置1200个子载波,就需要uu=33也就是allocIdx=33,是不是SSL支持不了到1200个子载波?

    再次麻烦你,请您见谅,期待您的回复,非常感谢!

  • Hi, 您好!

    1. soft和hard的输出格式是不一样的,具体见BCP手册4.6.1.2 Output Data节,您可以先对照格式看一下输出

    2. 没有规定uu最大是25, 对于1200个字载波,需要100个PRB, 您只要在numPrbInPusch数组里有100这个元素就可以

    谢谢!  

  • 谢谢你的回复,

    现在对于RD模块又有很多问题:

    1,比如说1个TB里面还有13个block,那么RD的output是被存放在13个buff中?是不是会将每一个buff都配置一个descriptor?

    2,一个descriptor只能带1个buff么还是可以有多个buff,这个参数在哪里配置?对于descriptor的packetbuff的大小是不是设定的要大于需要传输的data量?

    现在情况是,我将SSL和RD一起使用,应该是有13个block,在执行下面程序时,numRxPackets 的值总有时是6,有时是1,还有时是2,您知道有可能哪里配置错了么?

    * Wait on data to be received from BCP and validate it */

    for (i = 0; i < 400; i ++);
    while ((numRxPackets = Bcp_rxGetNumOutputEntries (hRx)) == 0);

    for (i = 0; i < numRxPackets; i ++)
    {
    /* Data could arrive scattered across multiple linked descriptors.
    * Collect data from all linked descriptors and validate it.
    */
    rxDataTotalLen = 0;

    Bcp_recv (hRx,
    &hRxDrvBuffer,
    &pRxDataBuffer,
    &rxDataBufferLen,
    &pRxPsInfo,
    &rxPsInfoLen,
    &rxFlowId,
    &rxSrcId,
    &rxDestnTag);

    rxDataTotalLen += rxDataBufferLen;

    /* Check if there are any descriptors linked to this Rx desc */
    while (hRxDrvBuffer)
    {
    /* Save original Rx desc handle. */
    hTmp = hRxDrvBuffer;

    if ((hRxDrvBuffer = Cppi_getNextBD (Cppi_getDescType (hRxDrvBuffer), hRxDrvBuffer)))
    {
    Bcp_rxProcessDesc (hRx,
    hRxDrvBuffer,
    &hVoid,
    &pRxDataBuffer,
    &rxDataBufferLen,
    &pRxPsInfo,
    &rxPsInfoLen,
    &rxFlowId,
    &rxSrcId,
    &rxDestnTag);

    rxDataTotalLen += rxDataBufferLen;
    }

    Bcp_rxFreeRecvBuffer (hRx, hTmp, BCP_TEST_SIZE_HOST_DESC);
    }

    }

    麻烦您了,非常感谢

  • Hi,  您好!

    1.  是的,放在13个buff,每一个buff都配置一个descriptor, 更多相关内容, 您可以查看文档 KeyStone Architecture Multicore Navigator User Guide (SPRUGR9F)

         2.4节 2.4 Descriptors

    2.  是的,只能一个。通常情况下descriptor的packetbuff大于需要传输的data量, 如果不大于,会自动分为多个descriptor输出

    3.  您可以尝试一下设置descriptor的packetbuff大于需要传输的data量

    谢谢!

  • 谢谢你,

    问题解决了,就是因为buff大小太小,加上polling模式下等待时间不够。

    Q1:现在对于BCP的RD输出的值进行TCP3D译码,两者之间怎么处理比较简单,而且时效性高,有没有历程可以参考?

    Q2:对于BCP中RD输出的值,的结构为

    前门的Turbo Decoder driver infomation和最后的16-byte array with the initial beta states(这个是不是tail bit 用?)是在TCP3D的哪里用到的?我看了一下历程,貌似没有提到BCP给出的这种数据形式。

    Q3:每次一调用TCP3d是不是都要进行一次寄存器和中断的配置,有没有可能只配置一次,以后就直接传输数据就行了?历程中对于task的动态申请在实时要求高的应用中是不是可以用静态代替?

    谢谢您,期待您的回复。

  • Hi, 您好!

    1. 高效的方式是BCP-TCP3d互连, 您可以参考MCSDK; 简单的方式是软件触发TCP3d

    2. Turbo Decoder driver infomation保存了编码块长度和编号信息, 这是TCP3d所需要的,您可以参考:

        TCP3d手册:KeyStone Architecture Turbo Decoder Coprocessor (TCP3d) User Guide (SPRUGS0)

         4.6.1 TCP3D Input Configuration Register 0 (TCP3D_IC_CFG0_P0/P1)

     

        16-byte array with the initial beta states的使用, 您可以参考上述TCP3d手册:

         3.3.8 Initial Beta States Computation

    3.  每次译码的数据不同, 在软件触发的模式下,您需要每次配置

    谢谢!

  • 谢谢您的回复

    Q1.能不能对于BCP-TCP3D的互联提供点具体的资料,您所说的MCSDK的哪一部分,能不能具体说明一下。

    Q2. 我按照例程对于13个block,blocksize为5842的码块进行译码,发现用时差不多达到了90w的Cycle,感觉太慢了,对于TCP的译码速度应该是怎么样的呢?

    Q3. TCP3D 有没有提供CRC校验,即按照212协议上给出的TB块的CRC校验?

    麻烦您了,再次表示感谢

  • Hi, 您好!

    Q1: 基本的思路是BCP的输出编码块到高优先级队列, 高优先级接收队列触发中断, 中断触发EDMA搬移数据给TCP3d,因而实现自动互联

           您可以介绍一下您的应用场景吗, 这有助于选择解决方法

    Q2:  以1.2G主频为例, 译码用时~1.5 slot,  这对于13 * 5842 的编码块来说, 已经足够快了, 是可以满足应用需求的

    Q3: 没有

    谢谢!

  • 谢谢您,

    1,BCP和TCP3D做PUSCH解码,码块大小为13*5842。对于您说的中断触发还有高级队列我不太了解,如果没有级联的历程的话,我估计一时半会也搞不定,希望您有级联的历程。

    1,对于BCP中的SSL子模块,输出的LLRbits按照UG(It outputs LLR soft bits (i.e., 1, 2, 4, 6, or 8 soft bits per symbol) that have been scaled by a noise scaling factors provided by the user.)可以看出由a noise scaling factors决定,那么我想让LLR soft bits 为6(以便作为TCP3D的输入+-31),应该讲这个参数设为多少呢?

    在程序中

    /* snrEven is 1/noiseVar (one-dimension) */
    noiseVar = (float) snrEven/rms/rms/2.f;
    scale1 = * ((Int32 *) &noiseVar);
    noiseVar = (float) snrOdd/rms/rms/2.f;
    scale2 = * ((Int32 *) &noiseVar);

    我应该将snrEven设置为什么格式的多大数呢? 对于BCP SSL输入是另一块BCP的MOD在soft模式下的输入值,我想通过两片BCP级联做一个互相校验,采用64QAM调制。

    麻烦您了

  • 请问一下,能留一个交流方式吗?我也在弄这个